From 7abba86274c33ddc382a90b1f4f897f90f1cba20 Mon Sep 17 00:00:00 2001
From: Murat Kabilov <murat.kabilov@zalando.de>
Date: Fri, 9 Jun 2017 15:30:28 +0200
Subject: [PATCH] move exec method from separate file to the utils; move
 regexps to the utils

---
 pkg/cluster/cluster.go |  6 -----
 pkg/cluster/exec.go    | 61 ------------------------------------------
 pkg/cluster/util.go    | 59 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 59 insertions(+), 67 deletions(-)
 delete mode 100644 pkg/cluster/exec.go

diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go
index eaa56ec4..5627b7b6 100644
--- a/pkg/cluster/cluster.go
+++ b/pkg/cluster/cluster.go
@@ -7,7 +7,6 @@ import (
 	"encoding/json"
 	"fmt"
 	"reflect"
-	"regexp"
 	"sync"
 
 	"github.com/Sirupsen/logrus"
@@ -29,11 +28,6 @@ import (
 	"github.com/zalando-incubator/postgres-operator/pkg/util/volumes"
 )
 
-var (
-	alphaNumericRegexp = regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9]*$")
-	userRegexp         = regexp.MustCompile(`^[a-z0-9]([-_a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-_a-z0-9]*[a-z0-9])?)*$`)
-)
-
 // Config contains operator-wide clients and configuration used from a cluster. TODO: remove struct duplication.
 type Config struct {
 	KubeClient          *kubernetes.Clientset //TODO: move clients to the better place?
diff --git a/pkg/cluster/exec.go b/pkg/cluster/exec.go
deleted file mode 100644
index fbd913c2..00000000
--- a/pkg/cluster/exec.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package cluster
-
-import (
-	"bytes"
-	"fmt"
-
-	remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand"
-	"k8s.io/client-go/pkg/api"
-	"k8s.io/kubernetes/pkg/client/unversioned/remotecommand"
-
-	"github.com/zalando-incubator/postgres-operator/pkg/spec"
-)
-
-func (c *Cluster) ExecCommand(podName *spec.NamespacedName, command ...string) (string, error) {
-	var (
-		execOut bytes.Buffer
-		execErr bytes.Buffer
-	)
-
-	pod, err := c.KubeClient.Pods(podName.Namespace).Get(podName.Name)
-	if err != nil {
-		return "", fmt.Errorf("could not get pod info: %v", err)
-	}
-
-	if len(pod.Spec.Containers) != 1 {
-		return "", fmt.Errorf("could not determine which container to use")
-	}
-
-	req := c.RestClient.Post().
-		Resource("pods").
-		Name(podName.Name).
-		Namespace(podName.Namespace).
-		SubResource("exec")
-	req.VersionedParams(&api.PodExecOptions{
-		Container: pod.Spec.Containers[0].Name,
-		Command:   command,
-		Stdout:    true,
-		Stderr:    true,
-	}, api.ParameterCodec)
-
-	exec, err := remotecommand.NewExecutor(c.RestConfig, "POST", req.URL())
-	if err != nil {
-		return "", fmt.Errorf("failed to init executor: %v", err)
-	}
-
-	err = exec.Stream(remotecommand.StreamOptions{
-		SupportedProtocols: remotecommandconsts.SupportedStreamingProtocols,
-		Stdout:             &execOut,
-		Stderr:             &execErr,
-	})
-
-	if err != nil {
-		return "", fmt.Errorf("could not execute: %v", err)
-	}
-
-	if execErr.Len() > 0 {
-		return "", fmt.Errorf("stderr: %v", execErr.String())
-	}
-
-	return execOut.String(), nil
-}
diff --git a/pkg/cluster/util.go b/pkg/cluster/util.go
index b6416cd7..4c90804f 100644
--- a/pkg/cluster/util.go
+++ b/pkg/cluster/util.go
@@ -1,14 +1,19 @@
 package cluster
 
 import (
+	"bytes"
 	"encoding/json"
 	"fmt"
 	"strings"
+	"regexp"
 	"time"
 
 	"k8s.io/client-go/pkg/api/v1"
 	"k8s.io/client-go/pkg/apis/apps/v1beta1"
 	"k8s.io/client-go/pkg/labels"
+	remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand"
+	"k8s.io/client-go/pkg/api"
+	"k8s.io/kubernetes/pkg/client/unversioned/remotecommand"
 
 	"github.com/zalando-incubator/postgres-operator/pkg/spec"
 	"github.com/zalando-incubator/postgres-operator/pkg/util"
@@ -16,6 +21,11 @@ import (
 	"github.com/zalando-incubator/postgres-operator/pkg/util/retryutil"
 )
 
+var (
+	alphaNumericRegexp = regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9]*$")
+	userRegexp         = regexp.MustCompile(`^[a-z0-9]([-_a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-_a-z0-9]*[a-z0-9])?)*$`)
+)
+
 func isValidUsername(username string) bool {
 	return userRegexp.MatchString(username)
 }
@@ -302,3 +312,52 @@ func (c *Cluster) credentialSecretName(username string) string {
 func (c *Cluster) podSpiloRole(pod *v1.Pod) string {
 	return pod.Labels[c.OpConfig.PodRoleLabel]
 }
+
+func (c *Cluster) ExecCommand(podName *spec.NamespacedName, command ...string) (string, error) {
+	var (
+		execOut bytes.Buffer
+		execErr bytes.Buffer
+	)
+
+	pod, err := c.KubeClient.Pods(podName.Namespace).Get(podName.Name)
+	if err != nil {
+		return "", fmt.Errorf("could not get pod info: %v", err)
+	}
+
+	if len(pod.Spec.Containers) != 1 {
+		return "", fmt.Errorf("could not determine which container to use")
+	}
+
+	req := c.RestClient.Post().
+		Resource("pods").
+		Name(podName.Name).
+		Namespace(podName.Namespace).
+		SubResource("exec")
+	req.VersionedParams(&api.PodExecOptions{
+		Container: pod.Spec.Containers[0].Name,
+		Command:   command,
+		Stdout:    true,
+		Stderr:    true,
+	}, api.ParameterCodec)
+
+	exec, err := remotecommand.NewExecutor(c.RestConfig, "POST", req.URL())
+	if err != nil {
+		return "", fmt.Errorf("failed to init executor: %v", err)
+	}
+
+	err = exec.Stream(remotecommand.StreamOptions{
+		SupportedProtocols: remotecommandconsts.SupportedStreamingProtocols,
+		Stdout:             &execOut,
+		Stderr:             &execErr,
+	})
+
+	if err != nil {
+		return "", fmt.Errorf("could not execute: %v", err)
+	}
+
+	if execErr.Len() > 0 {
+		return "", fmt.Errorf("stderr: %v", execErr.String())
+	}
+
+	return execOut.String(), nil
+}
-- 
GitLab