如何根据主机名设置 Ansible 变量?

如何根据主机名设置 Ansible 变量?

如果我运行,ansible-playbook playbooks/snapshot.yml -l my.host.net我想引用一个VMID预设为此主机虚拟机 ID(例如 4321)的变量。

我发现一个问题这应该可以回答这个问题,但是当我将my.host.net.yml(下面)添加到host_vars我的项目下的目录时,我在运行剧本时收到错误...'VMID' is undefined。要么是 ansible 没有自动读取host_vars/my.host.net.yml,要么是我弄乱了。

---
- hosts: all
  gather_facts: false
  tasks:

  - name: print a host variable
    debug:
      msg: "hostvar VMID is {{ VMID }}"

host_vars/my.host.net.yml

---
VMID: 4321

更新-添加目录结构:

ansible
├── ansible.cfg
├── group_vars
├── host_vars
│   └── my.host.net.yml
├── inventories
├── playbooks
│   └── snapshot.yml
├── roles
└── tests

答案1

对于遇到此问题的其他任何人,我最终将符号链接放在了我的playbooks目录中。在设置 ansible 时,我没有意识到将 playbook 放在不同的目录中会导致这些问题。我当然不希望数百个 playbook 弄乱 ansible 根目录,所以这有效。我可以对group_vars我的 playbook 中的做同样的事情,vars_files: ../group_vars/但目前看来这没问题。

ansible
├── ansible.cfg
├── group_vars
├── host_vars
│   └── my.host.net.yml
├── inventories
├── templates
├── playbooks
│   ├── snapshot.yml
│   ├── templates -> ../templates 
|   └── host_vars -> ../host_vars
├── roles
└── tests

相关内容