当变量没有值时,Ansible循环

时间:2017-07-27 09:07:58

标签: ansible

我创建了一个变量,用于在我的主要任务集中禁用nginx中的站点。由于这是一次性任务,意味着一旦domain1.com被禁用,我可以评论整行。当我这样做时,我收到错误

" {"失败":是的," msg":"字段' args'具有无效值,似乎包含未定义的变量。错误是:'无'没有属性'域'"。

如果将任务修改为仅在变量中列出域名时运行,我该怎么办?

nginx_sites_disabled:
#- domain: "domain1.com"

- name: Disable sites
    file:
    path: /etc/nginx/sites-enabled/{{ item.domain }}
    state: absent
  with_items: "{{nginx_sites_disabled}}"
  notify:
  - Reload nginx

2 个答案:

答案 0 :(得分:2)

在您的任务中应用default过滤器:

- name: Disable sites
    file:
    path: /etc/nginx/sites-enabled/{{ item.domain }}
    state: absent
  with_items: "{{ nginx_sites_disabled | default([]) }}"
  notify:
    - Reload nginx

相关答案:Ansible: apply when to complete loop

答案 1 :(得分:1)

完成工作后,您无需注释掉这些行。

与大多数Ansible模块一样,file模块为idempotent:如果所需的stateabsent且文件不存在,则不会执行任何操作

保持nginx_sites_disabled列表不变。

顺便说一句,如果您仍需要nginx_sites_disabled作为空列表,则需要写下:

---
nginx_sites_disabled: []

否则,nginx_sites_disabled将等于None。这就是你有这个错误的原因。