避免在Ansibleangular色中重复“with_items”

我有一个Ansibleangular色,有几个虚拟主机运行的任务。 我的剧本的作品,它看起来像这样:

--- - name: Create vhost configuration # action with_items: vhosts - name: Ensure vhost is enabled # action notify: restart apache2 with_items: vhosts # (Many more actions) 

有没有办法避免为每个动作写with_items ? 我是否可以遍历整个剧本的虚拟主机项目,而不是按顺序为所有虚拟主机运行每个命令? (因为我与上面的代码)

从你所要求的,这听起来像你只是想指定虚拟主机组作为运行特定angular色的主机。 所以你的手册应该像这样开始:

 --- - hosts: vhosts name: Tasks run on vhosts roles: - { role: somerole } 

请记住,您可以在Playbook中进行多次播放,因此可以这样做:

 --- - hosts: all name: Run roles for all servers roles: - { role: role1 } - { role: role2 } - etc. - hosts: vhosts name: Run roles specific to vhosts roles: - { role: vhost-role } - hosts: all name: Post-vhost roles for all servers roles: - { role: role3 } - etc. 

如果你有一个单独的剧本,你想在不同的时间在不同的主机组上运行,那么你可以使用一个variables作为主机条目:

 --- - hosts: "{{ somevar }}" name: Run roles against a user specified set of hosts roles: - { role: foo } 

然后你可以用下面的方法调用最后一个:

 $ ansible-playbook playbook.yml --extra-vars "somevar=vhosts" $ ansible-playbook playbook.yml --extra-vars "somevar=host1,host2"