Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止ansible在跳过任务时计算变量_Ansible_Ansible Playbook - Fatal编程技术网

防止ansible在跳过任务时计算变量

防止ansible在跳过任务时计算变量,ansible,ansible-playbook,Ansible,Ansible Playbook,我在剧本中有一个有条件的角色。像这样: - { role: some_role, when: "some_var == 'blah'" } 令人恼火的是,即使条件取决于角色,ansible仍然决定完成角色中的每一项任务并提及: TASK: [some_role | do something] ******************************** skipping: [some_host] 我无法理解为什么需要将它应用到角色中的每项任务中,但这是我刚刚经历的事情。直到现在。我刚

我在剧本中有一个有条件的角色。像这样:

  - { role: some_role, when: "some_var == 'blah'" }
令人恼火的是,即使条件取决于角色,ansible仍然决定完成角色中的每一项任务并提及:

TASK: [some_role | do something] ********************************
skipping: [some_host]
我无法理解为什么需要将它应用到角色中的每项任务中,但这是我刚刚经历的事情。直到现在。我刚刚向某个角色添加了一个任务,如下所示:

- name: do something
  some_module:
    something: "{{ item.0.some_sub_attr }}"
    something_else: "{{ item.1 }}"
  with_subelements:
    - elem1
    - elem2
现在,出于某种不正当的原因,ansible正在尝试评估
elem1
(即使它跳过了任务),并且因为
elem1
未定义,它会用以下方法将整件事情搞错:

fatal: [some_host] => subelements lookup expects a dictionary, got 'elem1'

我怎样才能避免这种情况发生?理想情况下,我希望消除任务上的所有跳过,让它告诉我它正在跳过角色,但是如果这是不可避免的,我至少可以做点什么来停止让它对正在跳过的任务上的变量求值吗?

首先,它显示为“跳过”而不是无声地不执行的原因是(至少在Ansible 1.x中)任务执行顺序是在评估任何内容之前确定的(与任务名称中的变量不起作用的原因相同),并且每个主机都有自己的一组变量。仅仅因为一个条件导致一个主机跳过它并不意味着另一个主机可能不跳过它,因此,所有任务都将始终显示,即使所有主机都跳过了这些任务。playbook runner已在很大程度上为2.x重写,真正的条件包含/角色也在路线图上(尽管我最近没有查看当前的2.0代码是否具有该功能)-这可能会解决您的问题


假设您想要在1.x中工作的东西-您是否考虑过对问题变量使用角色默认值或默认过滤器来防止它们崩溃?在ansible.cfg中设置error\u on\u undefined\u vars=False也是一个大问题,但我不建议…

角色默认值是我的备份选项。我宁愿避免这是因为它让人感觉很粗糙,因为我从来都不希望使用默认值,但我想如果没有其他方法的话,我会选择它。至于2.x,我很乐意在它正式发布后进行切换,但因为这是在生产代码中使用的,所以我不想在这之前进行切换。请查看2.0(github-devel上周的切换)-看看它是否有用。现在还为时过早(不要在prod中这样做),但看看它是否能解决您的问题。。。