【问题标题】:How to prevent Ruby's YAML parser from trying to parse {{var-name}}如何防止 Ruby 的 YAML 解析器尝试解析 {{var-name}}
【发布时间】:2017-10-05 15:39:31
【问题描述】:

我有一堆如下所示的大厅管道文件:

---
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: 
  : 

为什么要这样做,有什么办法可以配置解析器不这样做?让这些变量保持原样?

【问题讨论】:

    标签: ruby yaml


    【解决方案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 配置文件中经常出现这类事情。

    【讨论】:

      【解决方案2】:

      {} 字符在 Yaml 中用于 flow mappings(即哈希)。如果您没有为映射条目提供值,您会得到 nil

      所以在branch: {{tracking_branch}} 的情况下,由于有两对 对大括号,你会得到一个带有branch 键和值(在Ruby 中)的散列

      {{"tracking_branch"=>nil}=>nil}
      

      当这被转储到 Yaml 时,您会感到有些尴尬和冗长:

      branch:
        ? tracking_branch:
        :
      

      解决方法是简单地引用值:

      branch: "{{tracking_branch}}"
      

      【讨论】:

        【解决方案3】:

        完全忘记了 concourse 现在提供 ((var-name)) 用于模板,只是在管道中切换到而不是 {{var-name}} 并且 YAML 解析器现在很高兴!

        【讨论】:

          猜你喜欢
          • 2014-06-14
          • 2017-02-02
          • 1970-01-01
          • 2018-12-20
          • 1970-01-01
          • 2011-04-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多