我有一个剧本需要花费很多时间来执行,部分原因是它必须在很多节点上运行(我在 ansible 检查所有节点的状态上浪费了时间),并且我需要做一些中间某个地方发生了变化。
缩小剧本范围的最佳方式是什么?我考虑过隔离所需的更改和/或仅在单个节点上运行修改后的部分?
这是什么tags http://docs.ansible.com/ansible/playbooks_tags.html是给。
您可以使用任意标签组合来标记任何任务,然后指定要运行的标签组合(或者,使用--skip-tags
)然后将只运行那些指定的任务。
因此,示例剧本可能如下所示:
- hosts: all
tasks:
- name: copy foo
copy:
src: path/to/foo
dest: path/to/foo
tags:
- copy_foo
- copy
- foo
- name: copy bar
copy:
src: path/to/bar
dest: path/to/bar
tags:
- copy_bar
- copy
- bar
- name: restart foo
service:
name: foo
state: restarted
tags:
- restart_foo
- restart
- foo
- name: restart bar
service:
name: bar
state: restarted
tags:
- restart_bar
- restart
- bar
然后我可以只运行“restart foo”任务ansible-playbook -i path/to/hosts playbook.yml --tags "restart_foo"
。或者,我可以运行所有与 bar 相关的标签,并使用以下任意组合重新启动 foo (但不复制 foo):
ansible-playbook -i path/to/hosts playbook.yml --tags "bar,restart_foo"
ansible-playbook -i path/to/hosts playbook.yml --tags "restart,copy_bar"
ansible-playbook -i path/to/hosts playbook.yml --skip-tags "copy_foo"
如果您想改为(或作为组合)限制运行游戏的节点,那么您可以使用--limit http://docs.ansible.com/ansible/playbooks_best_practices.html#top-level-playbooks-are-separated-by-role选项。因此,如果您想将游戏限制为仅网络服务器,那么您可以使用以下命令运行它ansible-playbook -i path/to/hosts playbook.yml --limit webservers
甚至将其限制为单个特定主机ansible-playbook -i path/to/hosts playbook.yml --limit web.example.org
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)