2017-07-27 86 views
0

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

“{”failed“:true,”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 

回答

1

应用你的任务中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

+0

当我将此过滤器,启用站点文件夹被删除。 – GreenLion

+0

@GreenLion不在我的答案。在这种情况下,如果您将空列表传递给with_items,则循环将被跳过。 –

+0

使用您的示例应如何查看nginx_sites_disabled列表? nginx_sites_disabled:[]? – GreenLion

1

你不要”? 。吨需要行注释掉当工作完成

最喜欢的Ansible模块,file模块idempotent:如果所需stateabsent,并且该文件不存在,它不会做任何

只需保留nginx_sites_disabled列表不变。

顺便说一句,如果你还需要nginx_sites_disabled是一个空列表,你需要这样写:

--- 
nginx_sites_disabled: [] 

否则,nginx_sites_disabled将等于None。这就是为什么你有这个错误。