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

Posted

技术标签:

【中文标题】Ansible-playbook 针对不在清单文件中并包含组变量的任意主机运行【英文标题】:Ansible-playbook run against arbitrary host which is not in inventory file and include group vars 【发布时间】:2017-06-04 19:10:33 【问题描述】:

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

【问题讨论】:

有些步骤是不需要的。我必须创建一个文件,向其中添加一些内容,运行命令并删除该文件。如果我不删除该文件,我将不得不在提交到存储库时对其进行审查。理想情况下,我希望只运行一行而不执行所有这些额外步骤。 看看这个solution @KonstantinSuvorov 我没有关于运行角色的问题。针对不在清单文件中的节点运行角色的问题。我相信你的解决方案会遇到同样的问题,因为它最终会在后台做同样的事情。 【参考方案1】:

我找到了一个 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

【讨论】:

以上是关于Ansible-playbook 针对不在清单文件中并包含组变量的任意主机运行的主要内容,如果未能解决你的问题,请参考以下文章

在命令“ansible-playbook”中加密用户私钥文件

原创ansible-playbook 详解

四ansible-playbook案例(nfslnmp+可道云tomcatnginx)

ansible-playbook 在设置时挂起

ansible-playbook剧本初体验

ansible-playbook对服务器安装阿里云日志服务agent--ilogtail