Ansible-playbook针对任意主机运行,该主机不在库存文件中并包含组变量

时间:2017-01-19 22:16:45

标签: ansible ansible-inventory

当我以这种方式运行剧本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中的所有变量而不修改库存文件?

1 个答案:

答案 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