针对不在清单文件中的任意主机的 Ansible-playbook 运行 并包含组变量

Ansible-playbook run against arbitrary host which is not in inventory file and include group vars

当我 运行 一本剧本 runrole.yml 这样:

ansible-playbook -i '192.168.0.7,' runrole.yml -e "ROLE=allwindows" -e "TARGETIP=192.168.0.7" -e "ansible_port=5986" --ask-vault-pass

runrole.yml 有:

- hosts:  '{{TARGETIP}}'
  roles:
  - { role: '{{ROLE}}' }

它有效(即它 运行s 针对 192.168.0.7),但它失败了,因为我没有提供所有额外的参数

ansible_user: Administrator
ansible_password: SecretPasswordGoesHere
ansible_connection: winrm

我希望 Ansible 使用 group-vars/allwindows.yml 中定义的变量。

它会起作用,如果我将清单文件添加到组 [allwindows] 主机 192.168.0.7:

[allwindows]
host1
...
hostN
192.168.0.7

和运行使用:

ansible-playbook runrole.yml -e "ROLE=allwindows" -e "TARGETIP=192.168.0.7" -e "ansible_port=5986" --ask-vault-pass

它工作正常,因为它检测到 192.168.0.7 属于一个组 allwindows。 在某些情况下,我想 运行 在不触及清单文件的情况下针对主机的角色。如何指定包含组 allwindows 以使用 group_vars/allwindows.yml 中的所有变量而不修改清单文件?

我找到了一个 hack 如何做到这一点。它不像@techraf 的回答那么好,但它适用于 ansible-playbook

ATARGETIP=192.168.0.7 && echo "[allwindows]" > tmpinventory && echo "$ATARGETIP" >> tmpinventory && ansible-playbook -i tmpinventory runrole.yml -e "ROLE=allwindows" -e "TARGETIP=$ATARGETIP" -e "ansible_port=5986" --ask-vault-pass && rm tmpinventory