我在 Go 中有测试代码,它在 Compute Engine 实例上设置了一个状态(并且不想公开端口)。由于似乎没有直接在 Golang 中执行此操作的简单方法,因此我使用gcloud
:
func TestMe(t *testing.T) {
cmd := exec.Command("gcloud", "compute", "ssh", "--project", "foo", "--tunnel-through-iap", "--zone", "europe-west1-z", "bar", `--ssh-flag="-T"`, "--", "echo WOW")
cmd.Env = os.Environ()
out, err := cmd.CombinedOutput()
println(string(out))
t.Fatal(err)
}
运行时go test
,cmd
输出:
bash: myuser@compute.123456789: command not found
计算实例是正确的 - 但尝试访问计算实例时出现故障。相同的 gcloud 命令适用于 bash(即使对于非交互式)。我认为 Golang 环境中有些不同。