库存目录中的 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_dir
为 inventories
解决方案是将库存文件移动到您环境的每个目录中,例如对于预生产 => mv inventories/preprod.yml inventories/preprod/
然后您可以使用 ansible-playbook -i inventories/preprod/preprod.yml yourplaybook.yml
启动您的剧本,它应该会如您所愿地工作。
我正在使用一个角色 (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_dir
为 inventories
解决方案是将库存文件移动到您环境的每个目录中,例如对于预生产 => mv inventories/preprod.yml inventories/preprod/
然后您可以使用 ansible-playbook -i inventories/preprod/preprod.yml yourplaybook.yml
启动您的剧本,它应该会如您所愿地工作。