YAML中的变量重用,变量中的变量

时间:2017-07-31 13:25:16

标签: yaml

我正在寻找一种方法来重用我在YAML列表中定义的变量,我有一个YAML列表,其中包含以下示例条目:

workstreams:
  - name: tigers
    service_workstream: tigers-svc
    virtual_user:
      - {name: inbound-tigers, pass: '123', access: inbound, env: app1}
      - {name: outbound-tigers, pass: '123', access: outbound, env: app1}
    email: tigers@my-fqdn.com
    mount_dir: /mnt/tigers
    app_config_dir: /opt/tigers

使用上面的示例我想重用一个定义的值,比如 tigers 。理想的解决方案是这样的:

workstreams:
  - name: tigers
    service_workstream: "{{ vars['name'] }}-svc"
    virtual_user:
      - {name: "inbound-{{ vars['name'] }}", pass: '123', access: inbound, env: app1}
      - {name: "outbound-{{ vars['name'] }}", pass: '123', access: outbound, env: app1}
    email: "{{ vars['name'] }}@my-fqdn.com"
    mount_dir: "/mnt/{{ vars['name'] }}"
    app_config_dir: "/opt/{{ vars['name'] }}"

关于如何在YAML中执行此操作的任何要点?

1 个答案:

答案 0 :(得分:5)

你可以这样做:

workstreams:
  - name: &name tigers          # the scalar "tigers" with an anchor &name
    service_workstream: *name   # alias, references the anchored scalar above

但是,你可以在YAML 1.2中进行字符串连接或任何类似的连接。它不能对输入数据进行任何转换。别名实际上是对包含相应锚点的节点的引用,它不是变量。

相当一些使用YAML的软件为该问题提供了非YAML解决方案,例如,使用Jinja或诸如此类的方法预处理YAML文件。根据具体情况,这可能是也可能不是适合您的解决方案。