Ansible yaml якоря и jinja2 шаблоны - PullRequest
0 голосов
/ 21 марта 2019

как мне перезаписать атрибут диска, но при этом не указывать количество дисков жестко?

Это то, что я хочу сделать (tasks / main.yml этой роли), но с ошибкойсинтаксическая ошибка, а также требует жесткого кодирования количества дисков:

---
- name: anchors
  when: false
  debug:
    new_disk:
      - &new_disk
        size_gb: 80
        type: thin
        datastore: '{{ item.datastore }}'
- name: Deploy usage001 vms
  loop: '{{ vms.usage001 }}
  vmware_guest:
    disk:
      - <<: *new_disk
      - <<: *new_disk
        '{{ item.disk[0] }}'
      - <<: *new_disk
        '{{ item.disk[1] }}

Где элемент выглядит так:

vms:
  usage001:
    disk:
      - size_gb: 1000
      - size_gb: 600
  usage002:
    (...)

1 Ответ

0 голосов
/ 21 марта 2019

Документация для <<, Независимый тип языка слияния гласит:

Ключ слияния «<<» используется для указания того, что все ключи одногоили более указанные карты должны быть вставлены в текущую карту. </p>

Но вы указываете якорь new-disk в последовательности вместо карты.

Вы, вероятно, хотите сделать:

new_disk: 
  - &new_disk
    size_gb: 80
    type: thin
    datastore: '{{ item.datastore }}'

Вы, кажется, хотите выбрать size_gb: 1000 из вашего item, но так как кавычки находятся за пределами вашего синтаксиса jinja2, подстановкаЕсли это сработает, это приведет к:

  - <<: *new_disk
    'size_gb: 1000'

и для этого должно быть:

  - <<: *new_disk
    size_gb: 1000

, поэтому убедитесь, что вы избавились от этих кавычек.

Выбор с использованием item.disk[0] с учетом вашего предмета также кажется странным, я бы ожидал что-то вроде item.vms.usage001.disk[0], но это может быть мой недостаток специальных знаний jinja2.

...