Ansible playbook指定foo分组执行却同时在bar主机运行问题排查
Ansible playbook未按预期仅在foo分组执行的问题排查
你提供的hosts.yml本身结构没有错误,按配置foo组下仅包含foo-a-emea、foo-b-emea、foo-a-us、foo-b-us四台主机,你可以按照以下步骤定位问题:
- 首先确认playbook执行命令是否显式指定了当前的清单文件,正确执行命令格式如下:
ansible-playbook -i hosts.yml <你的playbook文件名>.yml
如果未加-i hosts.yml参数,ansible会读取默认路径(通常为/etc/ansible/hosts)的清单,该文件内的foo组配置可能包含了bar分组的主机,导致执行范围不符合预期。
- 如果执行命令正确,执行以下命令验证
foo组实际包含的主机列表:
ansible foo -i hosts.yml --list-hosts
- 如果输出结果包含bar分组的主机,说明存在清单配置冲突,常见原因有两个:
- 你的
ansible.cfg中配置了多清单源,比如指定了inventory为目录,目录下其他清单文件也定义了foo组,ansible会合并所有同组的主机配置 - 你在
group_vars或host_vars目录下存在错误的组关联配置
- 你的
- 如果输出结果仅包含4台foo开头的主机,说明问题出在playbook或角色逻辑:
- 检查
sync角色中是否使用了delegate_to、import_playbook等语法,将任务分发到了bar组的主机执行 - 检查执行playbook的命令是否添加了
--limit ec2/--limit all这类参数,覆盖了play中定义的hosts范围 - 检查playbook是否导入了其他play文件,额外指定了包含bar组的主机范围
- 检查
内容的提问来源于stack exchange,提问作者Hugo Dias
相关产品推荐
相关产品推荐

