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

时间:2014-04-10 13:25:33

标签: yaml jinja2 ansible

我有一个在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"

让我感到困扰的是,mirrors[0].frontend_urimirrors[0].package_pattern可以从mirrors[0].name生成,但为了做到这一点,我需要以某种方式使用相对路径来引用它们,因为我没有&#39 ; t想要将第一级(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"

有没有办法使用相对路径引用多维数组的其他部分?

1 个答案:

答案 0 :(得分:4)

这样可行: * name是一个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"