我的 ansible.cfg 没有设置库存,因此我不使用 /etc/ansible/hosts 来决定库存。
Ansible 根据优先级确定变量。但要做到这一点,Ansible 需要首先找到变量文件,然后了解文件的类型,然后才能确定优先级,对吧?所以我的问题是:
1/如果主ansible playbook文件夹下有多个子文件夹,Ansible如何知道在哪里可以找到变量文件?或者它可能只是收集主文件夹下的所有文件?
2/ Ansible 如何知道变量文件的类型,即它们是否是 inventory group_vars/all、playbook group_vars/all、inventory host_vars/* 等?注意 Ansible 需要知道文件的类型才能确定变量优先级。
我有这些问题是因为我正在研究 Ansible 剧本,它当前的布局是:
main_playbook.yaml
inventories/dev/rds/group_vars/all.yaml
inventories/dev/rds/group_vars/rds_something.yaml
Run Code Online (Sandbox Code Playgroud)
尽管 Ansible playbook 没有提及路径,但 Ansible 神奇地知道所有变量文件中定义的变量。
如果 Ansible 可以神奇地收集所有这些文件,那么我该如何设计项目,使其知道在不同环境下何时收集哪些文件?目前它只有开发环境,但我计划也有测试环境。但我不知道测试环境的变量文件放在哪里。
Cas*_*sey 11
这是一个很好的问题,ansible 并没有让它的魔力足够清晰。
\n\n\n1/ 如果主 ansible playbook\n文件夹下有多个子文件夹,Ansible 如何知道在哪里可以找到变量文件?或者\n也许它只是收集主文件夹下的所有文件?
\n
在 ansible 中,没有真正的主文件夹概念。也就是说,出于可变分辨率的目的,您可以将“主”文件夹视为您的清单/主机文件所在的位置。
\nAnsible 始终查找host_vars/
并group_vars/
关联您的清单文件。“相对于您的清单文件”是指“与您的清单文件位于同一文件夹中”
因此,库存(主机)文件的位置很重要。
\n因此,如果您想让多个环境保持 100% 独立,您的项目布局应该如下所示:
\nproject\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 inventories/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dev/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 rds/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 group_vars/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 all.yaml\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 rds_something.yaml\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 inventory.yml\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 rds/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 group_vars/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 all.yaml\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 rds_something.yaml\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 inventory.yml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main_playbook.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n\n2/ Ansible 如何知道变量文件的类型,即它们是否是 inventory group_vars/all、playbook group_vars/all、inventory\nhost_vars/* 等?
\n
Ansible 根据它所在的文件夹知道。
\nall.yml
如果文件夹中有一个指定的文件group_vars
,那么 ansible 知道它包含适用于所有组的变量。
rds_something.yml
如果文件夹中有一个指定的文件group_vars
,那么 ansible 知道它包含组中所有主机的变量rds_something
。
db01.yml
如果文件夹中有一个指定的文件host_vars
,那么 ansible 知道它包含仅适用于db01
主机的变量。如果db01
不在你的清单文件中,那么 ansible 会忽略它。
归档时间: |
|
查看次数: |
8244 次 |
最近记录: |