go - kubectl get with template string 失败,不兼容的类型进行比较

标签 go kubernetes go-templates

我必须检查复制 Controller 中的应用程序容器是否在特定端口上运行。这是我正在使用的带有 go 模板字符串的命令。

kubectl get rc my-rc --namespace=nightly --template='{{range .spec.template.spec.containers}}{{if .ports}}{{range .ports}}{{if .containerPort}}{{if eq .containerPort 5445}}{{end}}{{end}}{{end}}{{end}}{{end}}'

我认为这不是字符串比较,因为它是一个端口。甚至字符串比较也会抛出错误“调用 eq 时出错:比较不兼容的类型”

我可以只获取一组容器端口并在外部进行比较,但我想在 go 模板中完成它。

我是 Go 语言的新手。感谢使用模板字符串或使用模板文件完成此操作的任何建议。谢谢

最佳答案

使用 printf "%T".containerPort 检查 .containerPort 表明它是一个 float64。如果您将您的端口与尾随的 5445.0 进行比较,它应该可以工作。

您还有一些不必要的 if 语句。

--template='{{range .spec.template.spec.containers}}{{range .ports}}{{if eq .containerPort 5445.0}}True{{end}}{{end}}{{end}}'

您的示例还缺少用于将输出指定为 Go 模板的 -o="go-template" 标志。

关于go - kubectl get with template string 失败,不兼容的类型进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35818105/

相关文章:

go - 无法使用 os/exec 包执行 go 文件

amazon-web-services - `dask-kubernetes` 调度程序 - AWS 上的工作人员

java - 使用 Fabric8 的 Kubernetes 客户端 API

json - 如何发送一组 map 并使用 gin-templating 对其进行迭代

go - 如何将数据添加到在 Go 中作为参数的接口(interface)?

go - 简单如果不工作 go 模板

go - 我应该如何重用 Go 中的流?

node.js - 从 Hyperledger Fabric Node SDK 中的函数 InvokeChaincode() 获取链码调用者 ID

nginx - 无法更新锁 : configmaps forbidden: User "system:serviceaccount:ingress

go - 在 golang 中保存随机状态