针对不在清单文件中的任意主机的 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
当我 运行 一本剧本 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