Skip to content

Commit 7fdb23c

Browse files
authored
Separate rabbitmqcluster_controller into smaller files (#418)
- separate according to different k8s/rmq concepts that the Reconcile function is handling - all broken down files have a corresponding *_test.go file which contains its integration tests
1 parent 411eda9 commit 7fdb23c

15 files changed

+1274
-1077
lines changed

controllers/pod_executor.go

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package controllers
2+
3+
import (
4+
"bufio"
5+
"bytes"
6+
"fmt"
7+
corev1 "k8s.io/api/core/v1"
8+
"k8s.io/client-go/kubernetes"
9+
"k8s.io/client-go/kubernetes/scheme"
10+
"k8s.io/client-go/rest"
11+
"k8s.io/client-go/tools/remotecommand"
12+
)
13+
14+
type PodExecutor interface {
15+
Exec(clientset *kubernetes.Clientset, clusterConfig *rest.Config, namespace, podName, containerName string, command ...string) (string, string, error)
16+
}
17+
18+
func NewPodExecutor() PodExecutor { return &rabbitmqPodExecutor{} }
19+
20+
type rabbitmqPodExecutor struct{}
21+
22+
func (p *rabbitmqPodExecutor) Exec(clientset *kubernetes.Clientset, clusterConfig *rest.Config, namespace, podName, containerName string, command ...string) (string, string, error) {
23+
request := clientset.CoreV1().RESTClient().
24+
Post().
25+
Resource("pods").
26+
Name(podName).
27+
Namespace(namespace).
28+
SubResource("exec").
29+
VersionedParams(&corev1.PodExecOptions{
30+
Container: containerName,
31+
Command: command,
32+
Stdout: true,
33+
Stderr: true,
34+
Stdin: false,
35+
}, scheme.ParameterCodec)
36+
37+
exec, err := remotecommand.NewSPDYExecutor(clusterConfig, "POST", request.URL())
38+
if err != nil {
39+
return "", "", err
40+
}
41+
42+
stdOut := bytes.Buffer{}
43+
stdErr := bytes.Buffer{}
44+
45+
err = exec.Stream(remotecommand.StreamOptions{
46+
Stdout: bufio.NewWriter(&stdOut),
47+
Stderr: bufio.NewWriter(&stdErr),
48+
Stdin: nil,
49+
Tty: false,
50+
})
51+
if err != nil {
52+
return stdOut.String(), stdErr.String(), err
53+
}
54+
if stdErr.Len() > 0 {
55+
return stdOut.String(), stdErr.String(), fmt.Errorf("%v", stdErr)
56+
}
57+
58+
return stdOut.String(), "", nil
59+
}

0 commit comments

Comments
 (0)