我有一堆大厅管道文件,如下所示:
---
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:
:
为什么这样做,有什么方法可以将解析器配置为不这样做?只是保持这些变量不变?
为了避免与 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 配置文件中。
{
和}
字符在 Yaml 中用于流映射(即哈希)。如果不为映射条目提供值,则会得到nil
.
因此,在branch: {{tracking_branch}}
的情况下,由于有两对大括号,因此您将获得一个具有键branch
和值(在Ruby中)的哈希
{{"tracking_branch"=>nil}=>nil}
当它被转回 Yaml 时,你会得到一些尴尬和冗长:
branch:
? tracking_branch:
:
解决方案只是引用值:
branch: "{{tracking_branch}}"
完全忘记了大厅现在提供模板((var-name))
,只是切换到它而不是在管道上{{var-name}}
,YAML 解析器现在很高兴!