在Ansible YAML中使用相对路径引用多维数组中的另一个元素

在Ansible YAML中使用相对路径引用多维数组中的另一个元素,yaml,jinja2,ansible,Yaml,Jinja2,Ansible,我有一个用YAML语法定义的多维数组。这是Ansible使用的group_vars文件的一部分: mirrors: - name: "ubuntu" dists: - precise - precise-backports - precise-proposed - precise-security - precise-updates frontend_uri: "/ubuntu" package_patte

我有一个用YAML语法定义的多维数组。这是Ansible使用的group_vars文件的一部分:

mirrors:
  - name: "ubuntu"
    dists: 
      - precise
      - precise-backports
      - precise-proposed
      - precise-security
      - precise-updates
    frontend_uri: "/ubuntu"
    package_pattern: "/ubuntu/pool"
    sync_hour: 0
    upstreams:
      main: "nl.archive.ubuntu.com"
      backups:
        - "ubuntu.mirror.ac.ke"
        - "ke.archive.ubuntu.com"
困扰我的是
镜像[0]。前端uri
镜像[0]。包模式可以从
镜像[0]中生成。名称
,但要做到这一点,我需要使用相对路径以某种方式引用它们,因为我不想在路径中包含第一级(
0
)的迭代器,大致是这样的:

mirrors:
  - name: "ubuntu"
    dists: 
      - precise
      - precise-backports
      - precise-proposed
      - precise-security
      - precise-updates
    frontend_uri: "/{{ .name }}"
    package_pattern: "/{{ .name }}/pool"
    sync_hour: 0
    upstreams:
      main: "nl.archive.ubuntu.com"
      backups:
        - "ubuntu.mirror.ac.ke"
        - "ke.archive.ubuntu.com"
是否有任何方法可以使用相对路径引用多维数组的其他部分?

这将起作用: *名称是一个yamlism,允许将定义的别名用于& 其余的只是使用一个未在同一树中定义的变量引用

_name: &name "ubuntu"
- name: *name
    dists: 
      - precise
      - precise-backports
      - precise-proposed
      - precise-security
      - precise-updates
    frontend_uri: "/{{ _name }}"
    package_pattern: "/{{ _name }}/pool"
    sync_hour: 0
    upstreams:
      main: "nl.archive.ubuntu.com"
      backups:
        - "ubuntu.mirror.ac.ke"
        - "ke.archive.ubuntu.com"

你是说你可以写:
frontend\u-uri:“/{{mirrors[0].name}}”
?我不认为这是可能的,我不是故意这么说的,因为我认为这样做是个坏主意,如果它有效的话,我甚至都没有试过。谢谢你的链接,不幸的是似乎没有一个完美的解决方案。我知道“ubuntu”只是一个例子,可能有n个元素。定义一个包含“ubuntu”内容的变量无助于简化,因为您需要定义n个变量,并在
package\u模式中相应地使用它们。