如何通过CLI抑制Ansible“未传递清单仅隐式localhost可用”警告?
解决Ansible CLI执行时的"No inventory was passed"警告问题
核心问题
执行以下命令提取变量时,Ansible返回警告No inventory was passed, only implicit localhost is available,但不想修改现有Playbook或添加/etc/ansible/hosts的localhost条目,仅通过CLI方式抑制警告:
ansible localhost -m debug -a var=hostvars[inventory_hostname] --playbook-dir /ansible/ --extra-vars @vars/vars.yml | grep -zPo '(?<=>)((.| )*)' | jq -r '.[].hostname'
可行解决方案
方案1:通过-i参数显式指定临时inventory
在命令中添加-i localhost,参数(注意末尾的逗号,用于标记这是一个主机列表而非文件路径),让Ansible明确使用显式的localhost inventory,避免触发隐式localhost的警告:
ansible localhost -m debug -a var=hostvars[inventory_hostname] --playbook-dir /ansible/ --extra-vars @vars/vars.yml -i localhost, | grep -zPo '(?<=>)((.| )*)' | jq -r '.[].hostname'
方案2:通过环境变量指定inventory
设置ANSIBLE_INVENTORY环境变量为localhost,,同样可以让Ansible使用显式inventory而不依赖隐式配置:
ANSIBLE_INVENTORY=localhost, ansible localhost -m debug -a var=hostvars[inventory_hostname] --playbook-dir /ansible/ --extra-vars @vars/vars.yml | grep -zPo '(?<=>)((.| )*)' | jq -r '.[].hostname'
原理说明
警告的根源是Ansible未收到显式的inventory配置,自动使用隐式的localhost主机。通过CLI或环境变量显式指定inventory源后,Ansible不再触发该警告,同时完全保留原有Playbook的配置和变量提取逻辑。
输出所有Playbook变量
若要输出当前Playbook的所有变量,可将debug模块的var参数调整为var=vars(针对全局变量)或保持var=hostvars[inventory_hostname](针对当前主机的所有变量),结合上述抑制警告的方式即可实现:
ansible localhost -m debug -a var=vars --playbook-dir /ansible/ --extra-vars @vars/vars.yml -i localhost,
内容的提问来源于stack exchange,提问作者Theo Sweeny
相关产品推荐
相关产品推荐

