Ansible with_dict需要一个dict - blank Null字典变量

时间:2017-07-11 01:09:27

标签: ansible ansible-2.x

Ansible 1.9.4

在我的group_vars/slave/slave文件中,我将以下变量设置为NULL值(无/未定义/空字符串更准确):

# NFS mount settings
slave_nfsmount:

Playbook调用任务/操作:

  - name: Ensure nfs mount directory exists
    file: path={{item.key}} state=directory
    with_dict: "{{slave_nfsmount | default({})}}"
    ignore_errors: yes

获取错误消息:

TASK: [Ensure nfs mount directory exists] ************************************** 
fatal: [12.19.22.33] => with_dict expects a dict

FATAL: all hosts have already failed -- aborting

想要在global_vars / slave / slave文件中设置slave_nfsmount变量的值(因为用户可以在命令行传递此值,或者可以在其他一些文件中使用它方式取决于用户想要在运行时传递的内容)。因为,目前它对 slave_nfsmount 变量使用NULL,空/无值,我使用"{{ slave_nfsmount | default({})}}"语句使用with_dict:

当值为空/空/未定义/空时,如何使其工作以便我的剧本不会失败?

我尝试过:and slave_nfsmount is not defined

ignore_errors: yesTrue),但它没有成功,剧本仍然失败,上面显示了致命的错误。

2 个答案:

答案 0 :(得分:1)

  

我将以下变量设置为NULL值(无/未定义)

不,你没有。你有一个已定义的变量。

例如使用三元过滤器。

with_dict: "{{slave_nfsmount | ternary(slave_nfsmount, {})}}"

答案 1 :(得分:1)

仅当var 未定义时,default()过滤器才会返回默认值。

http://jinja.pocoo.org/docs/2.9/templates/#default

  

如果值未定义,它将返回传递的默认值,否则返回变量的值:

在您的情况下,slave_nfsmount已定义且为空。

如果您希望var被额外的变量覆盖(即-e参数),请在初始化时为其指定默认值:

slave_nfsmount: {}