Symptom:
We write a client-go program to run a simple command ie pwd inside a pod. It runs fine, No error but I don't see pwd output to the standard OS output. Partial sample code is likefunc ExecPodCmd(o *KubeOperations,Podname,Podnamespace string,SimpleCommand []string) error {
SimpleCommand := []string{"pwd"}
execReq := o.clientset.CoreV1().RESTClient().Post().
Resource("pods").
Name(Podname).
Namespace(Podnamespace).
SubResource("exec")
execReq.VersionedParams(&corev1.PodExecOptions{
Command: PsqlCommand,
Stdin: true,
Stdout: true,
Stderr: true,
}, scheme.ParameterCodec)
exec, err := remotecommand.NewSPDYExecutor(o.restConfig, "POST", execReq.URL())
if err != nil {
return fmt.Errorf("error while creating Executor: %v", err)
}
err = exec.Stream(remotecommand.StreamOptions{
Stdin: os.Stdin,
Stdout: os.Stdout,
Stderr: os.Stderr,
Tty: false,
})
if err != nil {
return fmt.Errorf("error in Stream: %v", err)
} else {
return nil
}
}
Solution:
It turns out we need to use bash -c to run the simplecommand to get proper os output.Replace SimpleCommand := []string{"pwd"} with SimpleCommand := []string{"/bin/sh", "-c", "pwd"}
No comments:
Post a Comment