当我以这种方式运行剧本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}}' }
它有效(即它运行于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
中的所有变量而不修改库存文件?
答案 0 :(得分:0)
我发现了黑客如何做到这一点。这不像@ 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