我有一堆大厅管道文件,如下所示:
---
resources:
- name: example
type: git
source:
uri: git@github.internal.me.com:me/example.git
branch: {{tracking_branch}}
private_key: {{ssh_key}}
paths:
- code/src/do/teams/sampleapp
params:
depth: 1
- name: deploy-image
type: docker-image
source:
repository: {{docker_image_url}}
我想在ruby中解析它们以执行一系列转换(比如验证它们并在缺少某些键时更新它们)。
问题是,每当我尝试加载它们并将它们转储回文件时,{{something}}
的部分就变成了:
branch:
? tracking_branch:
:
private_key:
? ssh_key:
:
为什么这样做,是否有任何方法可以配置解析器不执行此操作?只要保留这些变量就可以了吗?
答案 0 :(得分:1)
为避免与YAML的内部语法冲突,您需要引用您的值:
---
resources:
- name: example
type: git
source:
uri: git@github.internal.me.com:me/example.git
branch: '{{tracking_branch}}'
private_key: '{{ssh_key}}'
paths:
- code/src/do/teams/sampleapp
params:
depth: 1
出于类似的原因,这种情况一直出现在Ansible配置文件中。
答案 1 :(得分:1)
{
和}
字符在Yaml中用于flow mappings(即哈希)。如果您没有为映射条目提供值,则会获得nil
。
所以在branch: {{tracking_branch}}
的情况下,由于有两个对括号,你得到一个带有键branch
和值(在Ruby中)的哈希
{{"tracking_branch"=>nil}=>nil}
如果将其转发给Yaml,你会得到一些有点啰嗦和冗长的信息:
branch:
? tracking_branch:
:
解决方案只是引用值:
branch: "{{tracking_branch}}"
答案 2 :(得分:0)
完全忘记了大厅现在为模板提供((var-name))
,只是在管道上切换到{{var-name}}
而YAML解析器现在很开心!