在游戏层面,我们有serial: 1 ,让我们一次运行整个游戏。 但是我还没有find一个简单的方法来完成这个任务。 如果相关任务没有执行正确的locking(无论出于何种原因),这一点尤其重要。
一个明显的答案是把这个任务放在自己的位置上。 但是这对angular色没有帮助。 (不得不使用angular色扮演游戏中的serial: 1并不是很直观。)
如果您不想在执行剧本中的任何并行操作,请将fork级别设置为1:
ansible-playbook --forks=1 ...
你也可以把它放在你的cfg文件中:
[defaults] forks=1
但是如果你想单独使用,可以使用上面的命令行选项。
编辑:
serial: 1做了一些完全不同的事情:就像在每个主机上依次运行剧本,等待整个剧本完成,然后再转到下一个主机。 forks=1意味着在下一个主机上运行相同的任务之前,在一个主机上运行第一个任务,这样在下一个任务被触摸之前,每个主机将运行第一个任务。
所以你只需要一个游戏就可以forks=1 ; 不幸的是,目前不可能。
想想你想要的是什么
run_once:true
对于可以在本地运行的命令,使用循环遍历播放中的所有主机。 这只有在命令可以在本地运行时才起作用。 你也可以用这种方式一个接一个地在远程机器上用ssh运行一个命令,如果设置了密钥的话,在谈论升级时就变得困难了。
例如:
- name: Init New Appliances - Remove the known hosts entry for the server in case it has changed run_once: yes connection: local become: no command: "ssh-keygen -R {{ item }}" with_items: - "{{ inventory_hostname }}"