client-go创建Kubernetes资源时环境变量单引号变3个如何解决
问题根因
该问题是Golang代码中环境变量赋值时多写了不必要的外层单引号导致的,具体逻辑如下:
kubectl apply所用YAML中的value: '"0.0.0.0/0"',外层单引号是YAML语法的包裹符,不属于值本身,实际存入etcd的环境变量值为"0.0.0.0/0"(仅包含左右双引号)。- 你原有Golang代码里写的
Value: "'\"0.0.0.0/0\"'",对应的字符串实际内容是'"0.0.0.0/0"',首尾额外多了两个单引号。Kubernetes将该值序列化为YAML返回时,根据YAML转义规则,字符串内部的单引号需要转义为两个连续单引号,所以最终查询到的结果就变成了'''\"0.0.0.0/0\"''',看起来就是多了三个单引号。
解决方案
直接修改Golang代码中Env的Value字段,去掉外层多余的单引号即可:
原有代码:
Env: []v1.EnvVar{{Name: "TF_VAR_security_ips", Value: "'\"0.0.0.0/0\"'"}}
修改为(两种写法二选一即可):
- 双引号转义写法:
Env: []v1.EnvVar{{Name: "TF_VAR_security_ips", Value: "\"0.0.0.0/0\""}}
- 反引号免转义写法(更易读):
Env: []v1.EnvVar{{Name: "TF_VAR_security_ips", Value: `"0.0.0.0/0"`}}
修改后重新创建资源,查询到的YAML就会和kubectl apply的结果一致,不会出现多余的单引号。
内容的提问来源于stack exchange,提问作者zzxwill
相关产品推荐
相关产品推荐

