in controllers/util/backup_util.go [159:202]
func RunExecForPod(podName string, namespace string, command []string, config *rest.Config) (err error) {
client := &kubernetes.Clientset{}
if client, err = kubernetes.NewForConfig(config); err != nil {
return err
}
req := client.CoreV1().RESTClient().Post().
Resource("pods").
Name(podName).
Namespace(namespace).
SubResource("exec")
scheme := runtime.NewScheme()
if err = corev1.AddToScheme(scheme); err != nil {
return fmt.Errorf("error adding to scheme: %v", err)
}
parameterCodec := runtime.NewParameterCodec(scheme)
req.VersionedParams(&corev1.PodExecOptions{
Command: command,
Container: "solrcloud-node",
Stdin: false,
Stdout: true,
Stderr: true,
TTY: false,
}, parameterCodec)
var exec remotecommand.Executor
exec, err = remotecommand.NewSPDYExecutor(config, "POST", req.URL())
if err != nil {
return fmt.Errorf("error while creating Executor: %v", err)
}
var stdout, stderr bytes.Buffer
err = exec.Stream(remotecommand.StreamOptions{
Stdout: &stdout,
Stderr: &stderr,
Tty: false,
})
if err != nil {
return fmt.Errorf("error in Stream: %v", err)
}
return nil
}