我正在通过以下方式配置我的环境:
库存.yml
all:
children:
production:
1.2.3.4
staging:
1.2.3.5
在 group_vars/all.yml 中,我设置了将添加到剧本中的用户哈希值。我希望能够将用户专门添加到 group_vars/staging.yml,并将其与 group_vars/all.yml 中的相同设置合并。
在这种情况下,是否有适当的方法来合并哈希或声明继承?
答案1
“此设置控制变量在 Ansible 中的合并方式。默认情况下,Ansible 将按照特定优先顺序覆盖变量,如变量中所述。当优先级较高的变量获胜时,它将替换其他值。一些用户更喜欢合并哈希变量(在 Python 术语中也称为“字典”)。此设置称为“合并”。...”
例如,给定库存和组变量
shell> cat hosts
all:
children:
production:
hosts:
1.2.3.4
staging:
hosts:
1.2.3.5
shell> cat group_vars/all.yml
users:
admin:
shell: /bin/bash
ansible:
shell: /bin/sh
shell> cat group_vars/production/users.yml
users:
dealer:
shell: /usr/sbin/nologin
shell> cat group_vars/staging/users.yml
users:
tester:
shell: /bin/bash
剧本
shell> cat pb.yml
- hosts: all
tasks:
- debug:
var: users
默认情况下覆盖字典。给出(节选)
shell> ansible-playbook pb.yml
TASK [debug] ****
ok: [1.2.3.4] =>
users:
dealer:
shell: /usr/sbin/nologin
ok: [1.2.3.5] =>
users:
tester:
shell: /bin/bash
什么时候ANSIBLE_HASH_BEHAVIOUR设置为合并剧本给出的字典(节选)
shell> ANSIBLE_HASH_BEHAVIOUR=merge ansible-playbook pb.yml
TASK [debug] ****
ok: [1.2.3.4] =>
users:
admin:
shell: /bin/bash
ansible:
shell: /bin/sh
dealer:
shell: /usr/sbin/nologin
ok: [1.2.3.5] =>
users:
admin:
shell: /bin/bash
ansible:
shell: /bin/sh
tester:
shell: /bin/bash
此设置将已弃用在 2.13 中。
引用已弃用的详细信息
“此功能很脆弱且不可移植,导致持续的混乱和误用”
引用已弃用的替代方案
“明确组合过滤器”
例如,将普通用户的词典重命名为用户全部
shell> cat group_vars/all.yml
users_all:
admin:
shell: /bin/bash
ansible:
shell: /bin/sh
然后过滤器结合合并词典
shell> cat pb.yml
- hosts: all
tasks:
- debug:
var: users_all|combine(users)
给出(节选)
shell> ansible-playbook pb.yml
TASK [debug] ****
ok: [1.2.3.4] =>
users_all|combine(users):
admin:
shell: /bin/bash
ansible:
shell: /bin/sh
dealer:
shell: /usr/sbin/nologin
ok: [1.2.3.5] =>
users_all|combine(users):
admin:
shell: /bin/bash
ansible:
shell: /bin/sh
tester:
shell: /bin/bash
注意:要合并列表,请参阅解决方案。