--- /dev/null
+package controller\r
+\r
+import (\r
+ corev1 "k8s.io/api/core/v1"\r
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"\r
+)\r
+\r
+\r
+\r
+func GetStatefulSet() []*appsv1.StatefulSet {\r
+\r
+ statefulSet1 := &appsv1.StatefulSet{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Namespace: "ricplt",\r
+ Labels: map[string]string{\r
+ "app": "ricplt-dbaas",\r
+ "chart": "dbaas-2.0.0",\r
+ "heritage": "Helm",\r
+ "release": "release-name",\r
+ },\r
+ Name: "statefulset-ricplt-dbaas-server",\r
+ },\r
+ Spec: appsv1.StatefulSetSpec{\r
+ PodManagementPolicy: appsv1.PodManagementPolicyType("OrderedReady"),\r
+ Replicas: int32Ptr(1),\r
+ Selector: &metav1.LabelSelector{\r
+ MatchLabels: map[string]string{\r
+ "app": "ricplt-dbaas",\r
+ "release": "release-name",\r
+ },\r
+ },\r
+ ServiceName: "service-ricplt-dbaas-tcp",\r
+ Template: corev1.PodTemplateSpec{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Labels: map[string]string{\r
+ "app": "ricplt-dbaas",\r
+ "release": "release-name",\r
+ },\r
+ },\r
+ Spec: corev1.PodSpec{\r
+ ImagePullSecrets: []corev1.LocalObjectReference{\r
+\r
+ corev1.LocalObjectReference{\r
+ Name: "secret-nexus3-o-ran-sc-org-10002-o-ran-sc",\r
+ },\r
+ },\r
+ ShareProcessNamespace: boolPtr(true),\r
+ TerminationGracePeriodSeconds: int64Ptr(5),\r
+ Volumes: []corev1.Volume{\r
+\r
+ corev1.Volume{\r
+ Name: "config",\r
+ VolumeSource: corev1.VolumeSource{\r
+ ConfigMap: &corev1.ConfigMapVolumeSource{\r
+ LocalObjectReference: corev1.LocalObjectReference{\r
+ Name: "configmap-ricplt-dbaas-config",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ Containers: []corev1.Container{\r
+\r
+ corev1.Container{\r
+ Command: []string{\r
+\r
+ "redis-server",\r
+ },\r
+ EnvFrom: []corev1.EnvFromSource{\r
+\r
+ corev1.EnvFromSource{\r
+ ConfigMapRef: &corev1.ConfigMapEnvSource{\r
+ LocalObjectReference: corev1.LocalObjectReference{\r
+ Name: "configmap-ricplt-dbaas-appconfig",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ LivenessProbe: &corev1.Probe{\r
+ PeriodSeconds: 5,\r
+ ProbeHandler: corev1.ProbeHandler{\r
+ Exec: &corev1.ExecAction{\r
+ Command: []string{\r
+\r
+ "/bin/sh",\r
+ "-c",\r
+ "timeout 10 redis-cli -p 6379 ping",\r
+ },\r
+ },\r
+ },\r
+ InitialDelaySeconds: 15,\r
+ },\r
+ Stdin: false,\r
+ TTY: false,\r
+ VolumeMounts: []corev1.VolumeMount{\r
+\r
+ corev1.VolumeMount{\r
+ MountPath: "/data",\r
+ Name: "config",\r
+ ReadOnly: false,\r
+ },\r
+ },\r
+ Args: []string{\r
+\r
+ "/data/redis.conf",\r
+ },\r
+ Image: "nexus3.o-ran-sc.org:10002/o-ran-sc/ric-plt-dbaas:0.6.1",\r
+ Name: "container-ricplt-dbaas-redis",\r
+ Ports: []corev1.ContainerPort{\r
+\r
+ corev1.ContainerPort{\r
+ ContainerPort: 6379,\r
+ Name: "redis",\r
+ },\r
+ },\r
+ ReadinessProbe: &corev1.Probe{\r
+ InitialDelaySeconds: 15,\r
+ PeriodSeconds: 5,\r
+ ProbeHandler: corev1.ProbeHandler{\r
+ Exec: &corev1.ExecAction{\r
+ Command: []string{\r
+\r
+ "/bin/sh",\r
+ "-c",\r
+ "timeout 10 redis-cli -p 6379 ping",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ StdinOnce: false,\r
+ },\r
+ },\r
+ HostIPC: false,\r
+ HostNetwork: false,\r
+ HostPID: false,\r
+ },\r
+ },\r
+ UpdateStrategy: appsv1.StatefulSetUpdateStrategy{\r
+ Type: appsv1.StatefulSetUpdateStrategyType("RollingUpdate"),\r
+ },\r
+ },\r
+ TypeMeta: metav1.TypeMeta{\r
+ APIVersion: "apps/v1",\r
+ Kind: "StatefulSet",\r
+ },\r
+ }\r
+\r
+ statefulSet2 := &appsv1.StatefulSet{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Name: "redis-cluster",\r
+ },\r
+ Spec: appsv1.StatefulSetSpec{\r
+ Replicas: int32Ptr(9),\r
+ Selector: &metav1.LabelSelector{\r
+ MatchLabels: map[string]string{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/name": "redis-cluster",\r
+ },\r
+ },\r
+ Template: corev1.PodTemplateSpec{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Labels: map[string]string{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/name": "redis-cluster",\r
+ },\r
+ },\r
+ Spec: corev1.PodSpec{\r
+ Volumes: []corev1.Volume{\r
+\r
+ corev1.Volume{\r
+ Name: "conf",\r
+ VolumeSource: corev1.VolumeSource{\r
+ ConfigMap: &corev1.ConfigMapVolumeSource{\r
+ DefaultMode: int32Ptr(493),\r
+ LocalObjectReference: corev1.LocalObjectReference{\r
+ Name: "redis-cluster-cm",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ Containers: []corev1.Container{\r
+\r
+ corev1.Container{\r
+ Stdin: false,\r
+ StdinOnce: false,\r
+ TTY: false,\r
+ Command: []string{\r
+\r
+ "/conf/update-node.sh",\r
+ "redis-server",\r
+ "/conf/redis.conf",\r
+ },\r
+ Name: "redis",\r
+ Ports: []corev1.ContainerPort{\r
+\r
+ corev1.ContainerPort{\r
+ ContainerPort: 6379,\r
+ Name: "client",\r
+ },\r
+ corev1.ContainerPort{\r
+ Name: "gossip",\r
+ ContainerPort: 16379,\r
+ },\r
+ },\r
+ VolumeMounts: []corev1.VolumeMount{\r
+\r
+ corev1.VolumeMount{\r
+ Name: "conf",\r
+ ReadOnly: false,\r
+ MountPath: "/conf",\r
+ },\r
+ corev1.VolumeMount{\r
+ MountPath: "/data",\r
+ Name: "data",\r
+ ReadOnly: false,\r
+ },\r
+ },\r
+ Env: []corev1.EnvVar{\r
+\r
+ corev1.EnvVar{\r
+ Name: "POD_IP",\r
+ ValueFrom: &corev1.EnvVarSource{\r
+ FieldRef: &corev1.ObjectFieldSelector{\r
+ FieldPath: "status.podIP",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ Image: "redis:5.0.1-alpine",\r
+ ImagePullPolicy: corev1.PullPolicy("IfNotPresent"),\r
+ },\r
+ },\r
+ HostIPC: false,\r
+ HostNetwork: false,\r
+ HostPID: false,\r
+ TopologySpreadConstraints: []corev1.TopologySpreadConstraint{\r
+\r
+ corev1.TopologySpreadConstraint{\r
+ TopologyKey: "kubernetes.io/hostname",\r
+ WhenUnsatisfiable: corev1.UnsatisfiableConstraintAction("DoNotSchedule"),\r
+ LabelSelector: &metav1.LabelSelector{\r
+ MatchLabels: map[string]string{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/name": "redis-cluster",\r
+ },\r
+ },\r
+ MaxSkew: 1,\r
+ },\r
+ },\r
+ },\r
+ },\r
+ VolumeClaimTemplates: []corev1.PersistentVolumeClaim{\r
+\r
+ corev1.PersistentVolumeClaim{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Labels: map[string]string{\r
+ "app.kubernetes.io/name": "redis-cluster",\r
+ "app.kubernetes.io/instance": "release-name",\r
+ },\r
+ Name: "data",\r
+ },\r
+ Spec: corev1.PersistentVolumeClaimSpec{\r
+ AccessModes: []corev1.PersistentVolumeAccessMode{\r
+\r
+ corev1.PersistentVolumeAccessMode("ReadWriteOnce"),\r
+ },\r
+ Resources: corev1.ResourceRequirements{\r
+ Requests: corev1.ResourceList{\r
+ "storage": resource.MustParse("1Gi"),\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ TypeMeta: metav1.TypeMeta{\r
+ APIVersion: "apps/v1",\r
+ Kind: "StatefulSet",\r
+ },\r
+ }\r
+\r
+ return []*appsv1.StatefulSet{statefulSet1, statefulSet2}\r
+}
\ No newline at end of file