如何仅在"播放1"在Ansible中成功的情况下执行"播放2"



我有两个剧本,每个剧本有一个任务。

第一次播放检查每个目标上是否存在/var/test.dat。只有当第一次播放成功时,我才希望第二次播放并行执行这些脚本。

如果第一次播放失败,即test.dat不存在,我希望在不执行第二次播放的情况下终止剧本。为此,我已将any_errors_fatal设置为真正的

我需要有一个可翻译的播放strategy设置为免费,因为每个脚本需要30分钟才能完成。

我对ansible的理解是有限的。

我知道,如果我把两个任务都放在一个PLAY下,并设置策略来释放两个任务,那么这两个任务将并行运行,这是我不想要的。

---
- name: Play 1- check for login and script
hosts: all_hosts
any_errors_fatal: true
strategy: free
tasks:
- name: Check script existence
shell: "ls /var/test.dat"
register: checkscript
- name:
fail:
msg: "script {{ scriptdet }} missing on {{ inventory_hostname }}"
when: checkscript.rc != 0
- name: Play 2- Run scripts
hosts: all_hosts
user: "{{ USER }}"
strategy: free
tasks:
- name: Execute backup script
shell: "{{ scriptdet }}"
args:
chdir: ~/..

我尝试了上面的剧本,但我看到第二部剧执行了,尽管第一部剧的任务失败了。

你能建议我如何让它发挥作用吗?

除非any_errors_catal为true,否则Ansible将在所有主机上完成运行,即使其他主机出现故障。然而,正如您所发现的,any_errors_catal不适用于免费策略。

创建全局变量也是不可能的。

但是,您提到您希望使用免费策略来加快执行速度。然而,免费策略只能防止"为已经完成的主机阻止新任务">

如果您需要在不等待其他主机完成的情况下执行同一任务,则需要并行性。战略与并行无关。

在Ansible中,可以使用forks调整并行主机的数量。然而,默认值非常低,仅为5。

您想要的是将这个数字设置得更高——这取决于您的执行主机资源。根据我使用大量cpu和内存的经验,这可以调整到数百。

您可以在ansible.cfg或命令行中设置:

ansible-playbook -f 30 my_playbook.yml

通过这种方式,您可以使用默认的线性策略,其中any_errors_catal设置为true。

相关内容

  • 没有找到相关文章