1

当我以这种方式运行剧本时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属于一个 group allwindows。在某些情况下,我想在不接触库存文件的情况下对主机运行角色。如何在不修改清单文件的情况下指定包含组allwindows以使用所有变量?group_vars/allwindows.yml

4

1 回答 1

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
于 2017-01-19T22:48:17.997 回答