Ansible检查字典是否存在

der*_*ert 3 dictionary conditional-statements ansible ansible-playbook

我想部署其他mysql用户 - 如果设置.所以我正在使用字典.例如:

mysql_additional_users:
  user1:
    password: mysecretpass
    privs: "database1.*:ALL"
Run Code Online (Sandbox Code Playgroud)

只要定义了dict,它就可以正常工作.如果不是 - 它失败了.

虽然我试图确定,如果定义了dict:

  - name: create additional mysql users
    mysql_user: name={{ item.key }} password={{ item.value.password }} priv={{ item.value.privs }} state=present      
    with_dict: "{{ mysql_additional_users }}"
    when: mysql_additional_users is defined 
Run Code Online (Sandbox Code Playgroud)

但我总是得到一个错误:

fatal: [<hostname>]: FAILED! => {"failed": true, "msg": "ERROR! 'mysql_additional_users' is undefined"}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

hel*_*loV 6

with_dict总是被评估.如果你想使用它when,试试这个:

with_dict: mysql_additional_users | default({})
when: mysql_additional_users is defined
Run Code Online (Sandbox Code Playgroud)

它将评估为空dict,但任务将被跳过when.