Ansible vars文件-处理具有不同属性的项目

时间:2018-10-26 18:11:37

标签: ansible

我对Ansible还是有点陌生​​,但是我找不到一个很好的例子来说明如何处理以下情况:

在我的vars_file中,向我提供了以下内容...

- users
  - name: user_a
    age: 18
    car: "Datsun"

  - name: user_b
    age: 20
    pens: 
      - "Zebra F-701"
      - "Bic"

  - name: user_c
    age: 99
    car: "Horse and Buggy"
    pens: 
      - "Quill"
      - "Fountain Pen"

我的剧本任务如下:

- name: add users
  user:
    name: "{{ name }}"
    age: "{{ age }}"
    car: "{{ car }}"
    pens: "{{ item.pens | join(',') }}"
  with_items: "{{ users }}"

因此,user_a没有笔,user_b没有汽车,并且由于引用的变量不存在,剧本也相应地失败了。

在理想情况下,如果添加user_b时任务未找到“ car”变量,则该任务会继续出现在笔列表中而不会出错,并成功添加了用户。有关如何执行此操作的任何建议将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:2)

添加空的默认值:

- name: add users
  user:
    name: "{{ name }}"
    age: "{{ age }}"
    car: "{{ car | default('') }}"
    pens: "{{ item.pens | default('') | join(',') }}"
  with_items: "{{ users }}"

答案 1 :(得分:1)

一种选择是使用default filter

car: "{{ item.car | default(omit) }}"