我正在寻找一种方法来重用我在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中执行此操作的任何要点?
答案 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文件。根据具体情况,这可能是也可能不是适合您的解决方案。