Просмотр исходного кода

Implement parseSecretToHelmRelease to reduce code repetition

jnfrati 4 лет назад
Родитель
Сommit
33524ddd24
1 измененных файлов с 30 добавлено и 39 удалено
  1. 30 39
      internal/kubernetes/agent.go

+ 30 - 39
internal/kubernetes/agent.go

@@ -672,6 +672,30 @@ func contains(s []string, str string) bool {
 	return false
 }
 
+func parseSecretToHelmRelease(secret v1.Secret, chartList []string) (*rspb.Release, bool, error) {
+	if secret.Type != "helm.sh/release.v1" {
+		return nil, true, nil
+	}
+
+	releaseData, ok := secret.Data["release"]
+
+	if !ok {
+		return nil, true, fmt.Errorf("release field not found")
+	}
+
+	helm_object, err := decodeRelease(string(releaseData))
+
+	if err != nil {
+		return nil, true, err
+	}
+
+	if len(chartList) > 0 && !contains(chartList, helm_object.Name) {
+		return nil, true, nil
+	}
+
+	return helm_object, false, nil
+}
+
 func (a *Agent) StreamHelmReleases(conn *websocket.Conn, chartList []string, selectors string) error {
 	tweakListOptionsFunc := func(options *metav1.ListOptions) {
 		options.LabelSelector = selectors
@@ -698,28 +722,17 @@ func (a *Agent) StreamHelmReleases(conn *websocket.Conn, chartList []string, sel
 				return
 			}
 
-			if secretObj.Type != "helm.sh/release.v1" {
-				return
-			}
+			helm_object, isNotHelmRelease, err := parseSecretToHelmRelease(*secretObj, chartList)
 
-			releaseData, ok := secretObj.Data["release"]
-
-			if !ok {
-				errorchan <- fmt.Errorf("release field not found")
+			if isNotHelmRelease && err == nil {
 				return
 			}
 
-			helm_object, err := decodeRelease(string(releaseData))
-
 			if err != nil {
 				errorchan <- err
 				return
 			}
 
-			if len(chartList) > 0 && !contains(chartList, helm_object.Name) {
-				return
-			}
-
 			msg := Message{
 				EventType: "UPDATE",
 				Object:    helm_object,
@@ -733,33 +746,22 @@ func (a *Agent) StreamHelmReleases(conn *websocket.Conn, chartList []string, sel
 		AddFunc: func(obj interface{}) {
 			secretObj, ok := obj.(*v1.Secret)
 
-			if secretObj.Type != "helm.sh/release.v1" {
-				return
-			}
-
 			if !ok {
 				errorchan <- fmt.Errorf("could not cast to secret")
 				return
 			}
 
-			releaseData, ok := secretObj.Data["release"]
+			helm_object, isNotHelmRelease, err := parseSecretToHelmRelease(*secretObj, chartList)
 
-			if !ok {
-				errorchan <- fmt.Errorf("release field not found")
+			if isNotHelmRelease && err == nil {
 				return
 			}
 
-			helm_object, err := decodeRelease(string(releaseData))
-
 			if err != nil {
 				errorchan <- err
 				return
 			}
 
-			if len(chartList) > 0 && !contains(chartList, helm_object.Name) {
-				return
-			}
-
 			msg := Message{
 				EventType: "ADD",
 				Object:    helm_object,
@@ -773,33 +775,22 @@ func (a *Agent) StreamHelmReleases(conn *websocket.Conn, chartList []string, sel
 		DeleteFunc: func(obj interface{}) {
 			secretObj, ok := obj.(*v1.Secret)
 
-			if secretObj.Type != "helm.sh/release.v1" {
-				return
-			}
-
 			if !ok {
 				errorchan <- fmt.Errorf("could not cast to secret")
 				return
 			}
 
-			releaseData, ok := secretObj.Data["release"]
+			helm_object, isNotHelmRelease, err := parseSecretToHelmRelease(*secretObj, chartList)
 
-			if !ok {
-				errorchan <- fmt.Errorf("release field not found")
+			if isNotHelmRelease && err == nil {
 				return
 			}
 
-			helm_object, err := decodeRelease(string(releaseData))
-
 			if err != nil {
 				errorchan <- err
 				return
 			}
 
-			if (len(chartList) > 0) && !contains(chartList, helm_object.Name) {
-				return
-			}
-
 			msg := Message{
 				EventType: "DELETE",
 				Object:    helm_object,