From bb18875b20bc9a1d1f4cadf897d6ca2013b0a7a5 Mon Sep 17 00:00:00 2001
From: Abhishek Dubey <abhishekbhardwaj510@gmail.com>
Date: Sat, 6 Feb 2021 22:28:24 +0530
Subject: [PATCH] [Node port][Add] Added nodeport support for service (#38)

* Added NodePort service support for redis operator

Signed-off-by: iamabhishek-dubey <abhishekbhardwaj510@gmail.com>

* Added nodePort service support

Signed-off-by: iamabhishek-dubey <abhishekbhardwaj510@gmail.com>

* Updated CHANGELOG with v0.4.0 info

Signed-off-by: iamabhishek-dubey <abhishekbhardwaj510@gmail.com>
---
 CHANGELOG.md                                  | 13 +++
 Makefile                                      |  4 +-
 api/v1beta1/redis_types.go                    |  8 +-
 helm-charts/redis-operator/Chart.yaml         |  8 +-
 .../templates/operator-deployment.yaml        | 31 ++++---
 .../templates/role-binding.yaml               | 16 +++-
 .../redis-operator/templates/role.yaml        | 82 -------------------
 .../templates/service-account.yaml            |  7 ++
 helm-charts/redis-operator/values.yaml        | 14 +++-
 k8sutils/redis.go                             |  3 +-
 k8sutils/services.go                          |  2 +
 11 files changed, 78 insertions(+), 110 deletions(-)
 delete mode 100644 helm-charts/redis-operator/templates/role.yaml

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5f01135c..6061fd58 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+### v0.4.0
+##### February 6, 2021
+
+#### :tada: Features
+
+- Add Nodeport support for Kubernetes service
+
+#### :beetle: Bug Fixes
+
+- Updated helm chart with latest CRD configuration
+- Optimized helm chart
+- RBAC issus fixed
+
 ### v0.3.0
 ##### Decemeber 30, 2020
 
diff --git a/Makefile b/Makefile
index 9d4795d8..9423d295 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 # Current Operator version
-VERSION ?= 0.0.1
+VERSION ?= 0.4.0
 # Default bundle image tag
 BUNDLE_IMG ?= controller-bundle:$(VERSION)
 # Options for 'bundle-build'
@@ -12,7 +12,7 @@ endif
 BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL)
 
 # Image URL to use all building/pushing image targets
-IMG ?= quay.io/opstree/redis-operator:v0.3.0
+IMG ?= quay.io/opstree/redis-operator:v0.4.0
 # Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
 CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=false"
 
diff --git a/api/v1beta1/redis_types.go b/api/v1beta1/redis_types.go
index e915b850..635a82d0 100644
--- a/api/v1beta1/redis_types.go
+++ b/api/v1beta1/redis_types.go
@@ -55,8 +55,8 @@ type Storage struct {
 // RedisMaster interface will have the redis master configuration
 type RedisMaster struct {
 	Resources   Resources         `json:"resources,omitempty"`
-	RedisConfig map[string]string `json:"redisConfig"`
-	Service     Service           `json:"service"`
+	RedisConfig map[string]string `json:"redisConfig,omitempty"`
+	Service     Service           `json:"service,omitempty"`
 }
 
 // RedisExporter interface will have the information for redis exporter related stuff
@@ -78,8 +78,8 @@ type GlobalConfig struct {
 // RedisSlave interface will have the redis slave configuration
 type RedisSlave struct {
 	Resources   Resources         `json:"resources,omitempty"`
-	RedisConfig map[string]string `json:"redisConfig"`
-	Service     Service           `json:"service"`
+	RedisConfig map[string]string `json:"redisConfig,omitempty"`
+	Service     Service           `json:"service,omitempty"`
 }
 
 // ResourceDescription describes CPU and memory resources defined for a cluster.
diff --git a/helm-charts/redis-operator/Chart.yaml b/helm-charts/redis-operator/Chart.yaml
index dff5d045..ffe9691d 100644
--- a/helm-charts/redis-operator/Chart.yaml
+++ b/helm-charts/redis-operator/Chart.yaml
@@ -1,13 +1,15 @@
 ---
-apiVersion: v1
+apiVersion: v2
+appVersion: "0.4.0"
 description: Provides easy redis setup definitions for Kubernetes services, and deployment.
 engine: gotpl
 maintainers:
-  - name: Opstree Solutions
+  - name: Abhishek Dubey
+  - name: Sandeep Rawat
 name: redis-operator
 sources:
   - https://github.com/OT-CONTAINER-KIT/redis-operator
-version: 0.2
+version: 0.4.0
 home: https://github.com/OT-CONTAINER-KIT/redis-operator
 icon: https://github.com/OT-CONTAINER-KIT/redis-operator/raw/master/static/redis-operator-logo.svg
 keywords:
diff --git a/helm-charts/redis-operator/templates/operator-deployment.yaml b/helm-charts/redis-operator/templates/operator-deployment.yaml
index 0fa5cd7d..16bf04cc 100644
--- a/helm-charts/redis-operator/templates/operator-deployment.yaml
+++ b/helm-charts/redis-operator/templates/operator-deployment.yaml
@@ -3,8 +3,15 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: {{ .Values.redisOperator.name }}
+  labels:
+    control-plane: "{{ .Values.redisOperator.name }}"
+    app.kubernetes.io/name: {{ .Values.redisOperator.name }}
+    helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
+    app.kubernetes.io/version: {{ .Chart.AppVersion }}
 spec:
-  replicas: 1
+  replicas: {{ .Values.replicas }}
   selector:
     matchLabels:
       name: {{ .Values.redisOperator.name }}
@@ -13,19 +20,17 @@ spec:
       labels:
         name: {{ .Values.redisOperator.name }}
     spec:
-      serviceAccountName: {{ .Values.redisOperator.name }}
       containers:
       - name: "{{ .Values.redisOperator.name }}"
         image: "{{ .Values.redisOperator.imageName }}:{{ .Values.redisOperator.imageTag }}"
         imagePullPolicy: {{ .Values.redisOperator.imagePullPolicy }}
-        env:
-          - name: WATCH_NAMESPACE
-            valueFrom:
-              fieldRef:
-                fieldPath: metadata.namespace
-          - name: POD_NAME
-            valueFrom:
-              fieldRef:
-                fieldPath: metadata.name
-          - name: OPERATOR_NAME
-            value: "{{ .Values.redisOperator.name }}"
+        command:
+        - /manager
+        args:
+        - --leader-elect
+{{- if .Values.resources }}
+        resources:
+{{ toYaml .Values.resources | indent 10 }}
+{{- end }}
+      serviceAccountName: "{{ .Values.serviceAccountName }}"
+      serviceAccount: "{{ .Values.serviceAccountName }}"
diff --git a/helm-charts/redis-operator/templates/role-binding.yaml b/helm-charts/redis-operator/templates/role-binding.yaml
index 70142a57..0c45e5c9 100644
--- a/helm-charts/redis-operator/templates/role-binding.yaml
+++ b/helm-charts/redis-operator/templates/role-binding.yaml
@@ -1,12 +1,20 @@
 ---
 apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
+kind: ClusterRoleBinding
 metadata:
   name: {{ .Values.redisOperator.name }}
+  labels:
+    control-plane: "{{ .Values.redisOperator.name }}"
+    app.kubernetes.io/name: {{ .Values.redisOperator.name }}
+    helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
+    app.kubernetes.io/version: {{ .Chart.AppVersion }}
 subjects:
 - kind: ServiceAccount
-  name: {{ .Values.redisOperator.name }}
+  name: {{ .Values.serviceAccountName }}
+  namespace: {{ .Release.Namespace }}
 roleRef:
-  kind: Role
-  name: {{ .Values.redisOperator.name }}
+  kind: ClusterRole
+  name: cluster-admin
   apiGroup: rbac.authorization.k8s.io
diff --git a/helm-charts/redis-operator/templates/role.yaml b/helm-charts/redis-operator/templates/role.yaml
deleted file mode 100644
index 4d4c75c5..00000000
--- a/helm-charts/redis-operator/templates/role.yaml
+++ /dev/null
@@ -1,82 +0,0 @@
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  creationTimestamp: null
-  name: {{ .Values.redisOperator.name }}
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  - pods/exec
-  - services
-  - services/finalizers
-  - endpoints
-  - persistentvolumeclaims
-  - events
-  - configmaps
-  - secrets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - apps
-  resources:
-  - deployments
-  - daemonsets
-  - replicasets
-  - statefulsets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - monitoring.coreos.com
-  resources:
-  - servicemonitors
-  verbs:
-  - get
-  - create
-- apiGroups:
-  - apps
-  resourceNames:
-  - redis-operator
-  resources:
-  - deployments/finalizers
-  verbs:
-  - update
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  verbs:
-  - get
-- apiGroups:
-  - apps
-  resources:
-  - replicasets
-  - deployments
-  verbs:
-  - get
-- apiGroups:
-  - redis.opstreelabs.in
-  resources:
-  - '*'
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
diff --git a/helm-charts/redis-operator/templates/service-account.yaml b/helm-charts/redis-operator/templates/service-account.yaml
index aa2b6a2d..54271623 100644
--- a/helm-charts/redis-operator/templates/service-account.yaml
+++ b/helm-charts/redis-operator/templates/service-account.yaml
@@ -3,3 +3,10 @@ apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: {{ .Values.redisOperator.name }}
+  labels:
+    control-plane: "{{ .Values.redisOperator.name }}"
+    app.kubernetes.io/name: {{ .Values.redisOperator.name }}
+    helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+    app.kubernetes.io/managed-by: {{ .Release.Service }}
+    app.kubernetes.io/instance: {{ .Release.Name }}
+    app.kubernetes.io/version: {{ .Chart.AppVersion }}
diff --git a/helm-charts/redis-operator/values.yaml b/helm-charts/redis-operator/values.yaml
index e4ad4b16..5f66ce26 100644
--- a/helm-charts/redis-operator/values.yaml
+++ b/helm-charts/redis-operator/values.yaml
@@ -2,5 +2,17 @@
 redisOperator:
   name: redis-operator
   imageName: quay.io/opstree/redis-operator
-  imageTag: v0.2
+  imageTag: v0.4.0
   imagePullPolicy: Always
+
+resources:
+  limits:
+    cpu: 100m
+    memory: 100Mi
+  requests:
+    cpu: 100m
+    memory: 100Mi
+
+replicas: 1
+
+serviceAccountName: redis-operator
diff --git a/k8sutils/redis.go b/k8sutils/redis.go
index 5b1dcad7..c88805a0 100644
--- a/k8sutils/redis.go
+++ b/k8sutils/redis.go
@@ -155,7 +155,8 @@ func ExecuteCommand(cr *redisv1beta1.Redis, cmd []string) {
 
 	targetContainer := -1
 	for i, tr := range pod.Spec.Containers {
-		if tr.Name+"-master" == cr.ObjectMeta.Name+"-master" {
+		reqLogger.Info("Pod Counted successfully", "Count", i, "Container Name", tr.Name)
+		if tr.Name == cr.ObjectMeta.Name+"-master" {
 			targetContainer = i
 			break
 		}
diff --git a/k8sutils/services.go b/k8sutils/services.go
index 3090863d..3f81d712 100644
--- a/k8sutils/services.go
+++ b/k8sutils/services.go
@@ -57,6 +57,8 @@ func GenerateServiceDef(cr *redisv1beta1.Redis, labels map[string]string, portNu
 
 	if typeService == "LoadBalancer" {
 		serviceType = corev1.ServiceTypeLoadBalancer
+	} else if typeService == "NodePort" {
+		serviceType = corev1.ServiceTypeNodePort
 	} else {
 		serviceType = corev1.ServiceTypeClusterIP
 	}
-- 
GitLab