是否有 Ansible 可以合并的变量?
Are there any vars that Ansible can merge?
今天我注意到 Ansible 不会合并变量。
例如,当我有类似
的东西时
---
lvm_roles:
postgresql:
size: '10g'
path: '/var/lib/postgresql'
在另一个地方我有
---
lvm_roles:
sonarqube:
size: '10g'
path: '/opt/sonarqube'
Ansible 不会合并这些事实。我不确定优先顺序,但我认为第一个获胜。没有错误或警告。恕我直言,这是配置管理工具的一个危险特性。
是否有 Ansible 可以合并的变量?列表和散列将不起作用。是否有某种解决方法?
这是Ansible的一大缺点。因为 "facts" 可能取决于您要配置的内容。无法合并 "facts" 使得有必要对您不想配置的内容进行硬编码和复制。
例如,当我用
创建一个文件时
lvm_roles:
postgresql:
size: '10g'
path: '{{ postgresql_home }}'
sonarqube:
size: '10g'
path: '{{ sonar_home }}'
这将不起作用,因为 sonar_home
未在 de postgresql 节点上定义。在 sonarqube 节点上,postgresql_home
未定义。如果无法合并,灵活使用 vars 的能力将受到很大影响。
# if inventory variables overlap, does the higher precedence one win
# or are hash values merged together? The default is 'replace' but
# this can also be set to 'merge'.
#hash_behaviour = replace
因此,您可以通过设置 hash_behaviour = merge
来更改此行为。
我不会在系统范围内更改它,因为它可能会破坏其他依赖默认行为的 projects/roles。您可以在真正需要它的特定项目的根目录下分发 ansible.cfg
。
同时,正如@dgw 在一个具体示例中指出的那样,我始终能够通过仔细选择变量的放置位置(清单中的组或主机、包含的文件、剧本...)来保持默认行为。 ) 并最终在需要时自行合并它们。
今天我注意到 Ansible 不会合并变量。
例如,当我有类似
的东西时---
lvm_roles:
postgresql:
size: '10g'
path: '/var/lib/postgresql'
在另一个地方我有
---
lvm_roles:
sonarqube:
size: '10g'
path: '/opt/sonarqube'
Ansible 不会合并这些事实。我不确定优先顺序,但我认为第一个获胜。没有错误或警告。恕我直言,这是配置管理工具的一个危险特性。
是否有 Ansible 可以合并的变量?列表和散列将不起作用。是否有某种解决方法?
这是Ansible的一大缺点。因为 "facts" 可能取决于您要配置的内容。无法合并 "facts" 使得有必要对您不想配置的内容进行硬编码和复制。
例如,当我用
创建一个文件时lvm_roles:
postgresql:
size: '10g'
path: '{{ postgresql_home }}'
sonarqube:
size: '10g'
path: '{{ sonar_home }}'
这将不起作用,因为 sonar_home
未在 de postgresql 节点上定义。在 sonarqube 节点上,postgresql_home
未定义。如果无法合并,灵活使用 vars 的能力将受到很大影响。
# if inventory variables overlap, does the higher precedence one win
# or are hash values merged together? The default is 'replace' but
# this can also be set to 'merge'.
#hash_behaviour = replace
因此,您可以通过设置 hash_behaviour = merge
来更改此行为。
我不会在系统范围内更改它,因为它可能会破坏其他依赖默认行为的 projects/roles。您可以在真正需要它的特定项目的根目录下分发 ansible.cfg
。
同时,正如@dgw 在一个具体示例中指出的那样,我始终能够通过仔细选择变量的放置位置(清单中的组或主机、包含的文件、剧本...)来保持默认行为。 ) 并最终在需要时自行合并它们。