2

だから私は、チェーンを実行しようとしましclient-gols

これが私が試したことです:

    req := client.CoreV1().RESTClient().Post().Resource("pods").Name(pod.Name).Namespace(pod.ObjectMeta.Namespace).SubResource("exec") // .Param("container", containerName)
    scheme := runtime.NewScheme()
    if err := _v1.AddToScheme(scheme); err != nil {
        panic(err.Error())
    }
    parameterCodec := runtime.NewParameterCodec(scheme)
    req.VersionedParams(&_v1.PodExecOptions{
        Stdin:     false,
        Stdout:    true,
        Stderr:    true,
        TTY:       false,
        Container: containerName,
        Command:   strings.Fields("/bin/sh -c " + command),
    }, parameterCodec)
    exec, err := remotecommand.NewSPDYExecutor(restConfig, "POST", req.URL())
    if err != nil {
        panic(err.Error())
    }
    var stdout, stderr bytes.Buffer
    err = exec.Stream(remotecommand.StreamOptions{
        Stdin:  nil,
        Stdout: &stdout,
        Stderr: &stderr,
        Tty:    false,
    })
    if err != nil {
        panic(err.Error())
    }
log.Printf("Output from pod: %v", stdout.String())
log.Printf("Error from pod: %v", stderr.String())

command変数が単純な場合ls -l、目的の出力が得られます。しかし、そのようなことをしようと'ls -l && echo hello'すると、エラーが発生しますcommand terminated with exit code 2。を入れるだけでは何も出力されませんecho hello。ただし、プレフィックスhelloを削除し、属性が に等しい場合、目的の出力が生成されますが、このアプローチではコマンドをチェーンできません。Bourne Shell/bin/sh -cCommandstring.Fields("echo hello")

全体として、私がやろうとしているのは、Pod のコンテナーで一連のコマンドを実行することです。

4

1 に答える 1