使用ansible-playbook的limit参数导致localhost无法被找到
问题原因与解决方案
问题原因
你使用的--limit 'all:!vm'参数会对所有Play的主机列表进行全局过滤:
- 该规则仅保留
all组中不属于vm组的主机 - 你的第一个Play指定
hosts: localhost,如果localhost不在all组内,或者被!vm规则意外排除(比如localhost同时在vm组),就会出现skipping: no hosts matched的报错
解决方案
方案1:修改limit参数,明确包含localhost
直接在limit规则里追加localhost,确保它不会被过滤掉:
ansible-playbook -i hosts --vault-password-file /etc/hostname playbooks/install.yml --tags "printa" --limit 'all:!vm,localhost'
方案2:将localhost加入all组
在你的hosts inventory文件中,把localhost添加到all组(all组默认包含所有主机,但若inventory里没显式声明可能存在识别问题):
[all] localhost # 其他主机条目... [vm] # vm组的主机...
这样all:!vm规则会自动保留不在vm组的localhost。
方案3:给localhost单独分组
在inventory中创建一个专属组(比如local),然后在limit里包含这个组:
[local] localhost [vm] # vm组的主机...
执行命令时修改limit:
ansible-playbook -i hosts --vault-password-file /etc/hostname playbooks/install.yml --tags "printa" --limit 'all:!vm,local'
内容的提问来源于stack exchange,提问作者Ciasto piekarz
相关产品推荐
相关产品推荐

