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

fma*_*ree 6 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
Run Code Online (Sandbox Code Playgroud)

使用上面的示例,我想重用定义的值,例如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'] }}"
Run Code Online (Sandbox Code Playgroud)

关于如何在YAML中执行此操作有什么要点吗?

fly*_*lyx 6

你可以做:

workstreams:
  - name: &name tigers          # the scalar "tigers" with an anchor &name
    service_workstream: *name   # alias, references the anchored scalar above
Run Code Online (Sandbox Code Playgroud)

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

某些使用YAML的软件为该问题提供了非YAML解决方案,例如,使用Jinja或其他方式预处理YAML文件。根据具体情况,这可能对您来说可能是可行的,也可能不是。