为了账号安全,请及时绑定邮箱和手机立即绑定

Gomplate : 坏字符 U+0022 '-'

Gomplate : 坏字符 U+0022 '-'

Go
慕娘9325324 2022-07-11 17:30:49
我正在尝试gomplate并遇到错误。对于上下文,我定义了一个模板文件 test.tmplt 和一个数据源文件 dev.yaml。test.tmplt 有以下内容:localAPIEndpoint:    advertiseAddress: {{ (datasource "k8s").api-advertise-ip }}而 dev.yaml 包含以下内容:api-advertise-ip: 192.168.0.1如果我尝试使用 gomplate 填写 test.tmplt 的内容,如下所示:gomplate -d k8s=./dev.yaml -f ./test.tmplt -o test.conf我收到以下错误:09:42:44 FTL  error="template: ./test.tmplt:2: bad character U+002D '-'"在我看来,它不喜欢模板文件中的“-”符号。任何解决方法?这是预期的行为吗?编辑 1:感谢@icza 提供的答案,该答案适用于上述示例。但是,如果我将 yaml 文件修改为具有嵌套字段,它似乎会崩溃。例如dev.yaml:kubernetes:    api-advertise-ip: 192.168.0.0测试.tmplt:localAPIEndpoint:    advertiseAddress: {{ index (datasource "k8s") "kubernetes.api-advertise-ip" }}在这种情况下,输出:gomplate -d k8s=./dev.yaml -f ./test.tmplt -o test.conf是 :localAPIEndpoint:    advertiseAddress: <no value>
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

你的"k8s"数据源是一个 YAML 配置,你想访问api-advertise-ip它的属性。

由于api-advertise-ip包含破折号,因此您不能在模板中按原样使用名称,因为这是语法错误:模板引擎尝试将其api用作属性名称,而后面的破折号是语法错误。

您必须将属性名称放在包含破折号的引号中:"api-advertise-ip"但是使用.选择器也是无效的语法。

使用内置index函数通过以下键索引 YAML 数据源:

localAPIEndpoint:
    advertiseAddress: {{ index (datasource "k8s") "api-advertise-ip" }}

gomplatetext/template在引擎盖下使用,请参阅Go Playground上的工作示例。

使用时index,如果您有多个嵌套级别,请将每个键作为附加参数提供给index.

例如:

localAPIEndpoint:
    advertiseAddress: {{ index (datasource "k8s") "kubernetes" "api-advertise-ip" }}

在Go Playground上试试这个。


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 338 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信