相当于golang中的cat <<EOF

Abu*_*fia -1 shell go kubectl

我正在尝试执行与此等效的操作:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: testMap
  namespace: default
data:
  details:
    host: "localhost:${reg_port}"
EOF
Run Code Online (Sandbox Code Playgroud)

在戈兰。

我目前的尝试归结为:

func generateConfig(port string) string {
    return `
apiVersion: v1
kind: ConfigMap
metadata:
  name: testMap
  namespace: default
data:
  details:
    host: "localhost:" + port`
}

func main() {
  exec.Command("kubectl", "apply", "-f", "-", generateConfig(5000))
}
Run Code Online (Sandbox Code Playgroud)

我并不特别惊讶地发现它不起作用,并出现错误:

error: Unexpected args: [
apiVersion: v1
kind: ConfigMap
metadata:
    name: testMap
    namespace: default
data:
    details:
        host: "localhost:5000"]
Run Code Online (Sandbox Code Playgroud)

我认识到我将这些作为参数传递,并且 kubectl 需要一个文件,但是我发现自己完全不知道如何继续。

我宁愿不创建临时文件或调用单独的 bash 脚本,因为这看起来比我希望的更混乱。

Cer*_*món 5

此处的shell文档定向到命令的标准输入。

以下是将命令的标准输入设置为generateConfig的结果的方法:

cmd := exec.Command("kubectl", "apply", "-f", "-")
cmd.Stdin = strings.NewReader(generateConfig("5000"))

if err := cmd.Run(); err != nil {
    // handle error
}
Run Code Online (Sandbox Code Playgroud)