【发布时间】:2021-03-06 03:51:35
【问题描述】:
我的 Ansible 角色 vars/sonarqube.yml 有一个文件,其中包含内容
---
lvm_roles:
sonarqube:
size: '10g'
path: '{{ sonar_home }}'
还有一个带有内容的文件group_vars/all/lvm.yml
lvm_roles:
sonarqube:
size: '20g'
在ansible.cfg我有一条线
hash_behaviour = merge
没有merge,结果将是
lvm_roles:
sonarqube:
size: '20g'
换句话说,我失去了path var。
merge 的结果是
lvm_roles:
sonarqube:
size: '10g'
path: '/opt/sonarqube'
然而我想要和期望的结果是
lvm_roles:
sonarqube:
size: '20g'
path: '/opt/sonarqube'
所以期望的行为是
- Ansible 合并变量
-
group_vars中的配置优先于我的角色中的配置。
我可以在 Ansible 中配置此行为吗?如何?
【问题讨论】:
-
我建议您阅读以下内容:the paragraph on vars precedenc in the doc。角色中的 /var 的优先级高于 group_vars。
-
这很有趣。恕我直言,将这种优先级赋予 vars 目录中的 vars 是没有意义的。角色中的变量应该具有低优先级,因为您希望角色是可配置的。它没有意义很容易说明。你最终会得到像github.com/geerlingguy/ansible-role-postgresql/blob/master/vars/…中的“影子”变量@
-
角色中的变量defaults 的优先级低于库存变量。角色中的变量 vars 的优先级高于库存变量。
-
@onknowns 正如 dgw 所指出的,您角色的可配置变量应该在
defaults/main.yml中。如果你对这一切都不满意,ansible is opensource 这样你就可以轻松地提出问题,甚至提出 PR,看看他们是否愿意改变这一点(尽管我对此表示怀疑)。您关于 geerlingguys 角色的示例与您试图展示的完全相反:这些是您不希望任何人更改的内部变量。可定制的在github.com/geerlingguy/ansible-role-postgresql/blob/master/… -
@Zeitounator 好的,为什么 geerlingguy 还要费心让这些变量可变呢?通过使用伪变量。这里的重点是人们想方设法改变 PostgreSQL 在偏离默认方式的系统上的安装方式。在我的站点上,我使用了一个以自定义方式安装 PostgreSQL 的内部托管服务提供商,而我可以使用 geerlingguy.postgresql 角色的唯一方法是因为 geerlingguy 不厌其烦地使用伪变量使这些变量可配置。 geerlingguy 使用伪变量降低了变量的优先级。
标签: ansible ansible-facts