我试图建立Ansible能够根据主机是什么清单组运行一个剧本。例如,在清单中,我们有:Ansible:根据库存变量包括剧本
[group1]
host1.sub.domain.tld ansible_host=10.0.0.2
...
[group1:vars]
whatsmyplaybook=build-server.yml
然后,我们希望做一个简单的剧本,将或多或少地重定向到这是清单中的剧本:
---
- name: Load Playbook from inventory
include: "{{hostvars[server].whatsmyplaybook}}"
凡“server
”变量将是主机的FQDN,从命令行传递:
ansible-playbook whatsmyplaybook.yml -e "server=host1.sub.domain.tld"
我们的推理是从全新安装(PXE启动)启动服务器,它只会真正知道它的FQDN,然后有一个firstboot脚本SSH连接到我们的Ansible主机,并启动以上命令。然而,我们这样做的时候,我们得到以下错误:
ERROR! 'hostvars' is undefined
这表明库存不会被解析,直至提供host
列表,它吸了很多。有没有另外一种方法来完成这个?
你为什么试这个? Ansible戏剧有'主持人'声明,它决定了他们被应用到哪个组。您包含的任何游戏都必须具有此声明,并将在所有匹配的主机组上运行。 – techraf
@techraf“'我们的推理是从一个全新的安装(PXE启动)中启动一个服务器引导程序,它只会真正知道它的FQDN”。我们已经有了可以填写'hosts'声明的剧本,但是当我们重建一台机器时,它们必须被修改或者运行的范围太大。我们的目标是消除对此的需求,并允许不知道其角色/剧本的主持人让Ansible与之竞争。 – MrDrMcCoy