我正在寻找一种方法来重用在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中执行此操作有什么要点吗?
你可以做:
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文件。根据具体情况,这可能对您来说可能是可行的,也可能不是。