繁体   English   中英

Ansible yaml anchors和jinja2模板

[英]Ansible yaml anchors and jinja2 templating

如何覆盖磁盘属性而不是硬编码磁盘数?

这就是我想要它(该角色的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:
    (...)

<<Merge Key Language Independent Type的文档说明:

“<<”合并键用于指示应将一个或多个指定映射的所有键插入当前映射中。

但是您在序列而不是地图上指定锚定new-disk

你可能想做:

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

您似乎希望从您的item选择size_gb: 1000 ,但由于引号超出了您的jinja2语法,替换(如果有效)将导致:

  - <<: *new_disk
    'size_gb: 1000'

为了工作,它必须是:

  - <<: *new_disk
    size_gb: 1000

所以请确保你摆脱这些报价。

使用item.disk[0]给出你的项目的选择似乎也很奇怪,我本来期望像item.vms.usage001.disk[0]这样的东西,但这可能是我缺乏jinja2特定的知识。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM