库存目录中的 Ansible vars 不适用

Anible vars in inventories directory no applying

我正在使用一个角色 (zaxos.lvm-ansible-role) 来管理一些主机上的 lvms。最初我在 host_vars/server.yaml 下有我的 lvm 变量,它有效。

这是工作布局

├── filter_plugins
├── group_vars
├── host_vars
│   ├── server1.yaml
│   └── server2.yaml
├── inventories
│   ├── preprod
│   ├── preprod.yml
│   ├── production
│   │   ├── group_vars
│   │   └── host_vars
│   ├── production.yaml
│   ├── staging
│   │   ├── group_vars
│   │   └── host_vars
│   └── staging.yml
├── library
├── main.yaml
├── module_utils
└── roles
    └── zaxos.lvm-ansible-role
        ├── defaults
        │   └── main.yml
        ├── handlers
        │   └── main.yml
        ├── LICENSE
        ├── meta
        │   └── main.yml
        ├── README.md
        ├── tasks
        │   ├── create-lvm.yml
        │   ├── main.yml
        │   ├── mount-lvm.yml
        │   ├── remove-lvm.yml
        │   └── unmount-lvm.yml
        ├── tests
        │   ├── inventory
        │   └── test.yml
        └── vars
            └── main.yml

对于我的环境,根据 Ansible 文档,在库存目录下设置 host_vars 更有意义,该目录也受支持(替代目录布局)。

然而,当我更改为此布局时,变量未初始化且主机上的 lvms 未更改。

 ├── filter_plugins
├── inventories
│   ├── preprod
│   │   ├── group_vars
│   │   └── host_vars
│   │       ├── server1.yaml
│   │       └── server2.yaml
│   ├── preprod.yml
│   ├── production
│   │   ├── group_vars
│   │   └── host_vars
│   ├── production.yaml
│   ├── staging
│   │   ├── group_vars
│   │   └── host_vars
│   └── staging.yml
├── library
├── main.yaml
├── module_utils
└── roles
    └── zaxos.lvm-ansible-role
        ├── defaults
        │   └── main.yml
        ├── handlers
        │   └── main.yml
        ├── LICENSE
        ├── meta
        │   └── main.yml
        ├── README.md
        ├── tasks
        │   ├── create-lvm.yml
        │   ├── main.yml
        │   ├── mount-lvm.yml
        │   ├── remove-lvm.yml
        │   └── unmount-lvm.yml
        ├── tests
        │   ├── inventory
        │   └── test.yml
        └── vars
            └── main.yml

知道为什么这种方法不起作用吗?

你的 host_vars 目录必须位于 ansible 发现的 inventory_dir.

使用上面的文件树,我猜你正在用 ansible-playbook -i inventories/preprod.yml yourplaybook.yml 启动你的剧本。在这种情况下,ansible 发现 inventory_dirinventories

解决方案是将库存文件移动到您环境的每个目录中,例如对于预生产 => mv inventories/preprod.yml inventories/preprod/

然后您可以使用 ansible-playbook -i inventories/preprod/preprod.yml yourplaybook.yml 启动您的剧本,它应该会如您所愿地工作。