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

Ansible playbook针对不在清单文件中且包含组变量的任意主机运行,ansible,ansible-inventory,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.

当我以这种方式运行剧本
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
我想使用
组变量/allwindows.yml
中定义的变量

如果我将目录文件添加到一个组
[allwindows]
host
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
以使用组变量/allwindows.yml中的所有变量,而不修改清单文件?

我发现了一种方法。这不像@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

我已经找到了一个解决方法。这不像@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

有些步骤是不需要的。我必须创建一个文件,向其中添加一些内容,运行命令并删除该文件。若我不删除那个文件,那个么当我提交到存储库中时,我必须检查它。理想情况下,我希望只运行一行,而不执行所有这些额外的步骤。看看这个@KonstantinSuvorov,我对运行角色没有问题。针对不在清单文件中的节点运行角色的问题。我相信你的解决方案会有同样的问题,因为最终它会在引擎盖下做同样的事情。有些步骤是不需要的。我必须创建一个文件,向其中添加一些内容,运行命令并删除该文件。若我不删除那个文件,那个么当我提交到存储库中时,我必须检查它。理想情况下,我希望只运行一行,而不执行所有这些额外的步骤。看看这个@KonstantinSuvorov,我对运行角色没有问题。针对不在清单文件中的节点运行角色的问题。我相信你的解决方案会有同样的问题,因为最终它会在幕后做同样的事情。