【发布时间】:2018-01-07 02:31:00
【问题描述】:
我正在寻找一种方法来重用 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 中执行此操作的任何要点?
【问题讨论】:
-
我总是想知道在这种情况下
vars将如何与作为列表元素的映射链接,其中列表是(顶层)映射中的值。如果那是workstreams[0]['name']甚至workstream.0.name我可以想象它可以做到(虽然不在YAML规范中),但使用vars,没办法。 -
@Anthon:我曾想过在即将到来的 YAML 1.3 中做类似的事情,但其他事情目前对我们来说更重要。我的想法是将它与别名耦合,因此您需要像
&root这样的根级别的锚点,然后可以执行*root.workstreams.1.name(我喜欢基于 1 的索引)。
标签: yaml