我们使用一个简单的失败任务来强制用户指定Ansible limit选项,这样就不会默认/意外在所有主机上执行该任务。
我发现的最简单方法是:
---
- name: Force limit
# 'all' is okay here, because the fail task will force the user to specify a limit on the command line, using -l or --limit
hosts: 'all'
tasks:
- name: checking limit arg
fail:
msg: "you must use -l or --limit - when you really want to use all hosts, use -l 'all'"
when: ansible_limit is not defined
run_once: true
现在,我们在运行剧本时必须使用-l
(= --limit
选项),例如
ansible-playbook playbook.yml -l www.example.com
限制选项文档:
限制为一台或多台主机当要针对某个主机组但仅针对该组的一个或多个成员运行一本剧本时,这是必需的。
仅限一台主机
ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit "host1"
限制到多个主机
ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit "host1,host2"
负数限制。
注意:必须使用单引号防止bash插值。
ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit 'all:!host1'
仅限主机组
ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit 'group1'
hosts: "{{ variable_host | default('web')}}"