我通过以下方式配置我的环境:
库存.yml
all:
children:
production:
1.2.3.4
staging:
1.2.3.5
Run Code Online (Sandbox Code Playgroud)
在 group_vars/all.yml 中,我设置了将添加到剧本中的用户哈希。我希望能够将用户专门添加到 group_vars/staging.yml 中,这些用户将与我的 group_vars/all.yml 中的相同设置合并。
在这种情况下,是否有正确的方法来合并哈希或声明继承?
请参阅DEFAULT_HASH_BEHAVIOUR。引用
\n\n\n“此设置控制变量在 Ansible 中合并的方式。默认情况下,Ansible 将按照特定优先级顺序覆盖变量,如变量中所述。当优先级较高的变量获胜时,它将替换其他值。一些用户更喜欢哈希变量(在 Python 术语中又名 \xe2\x80\x98dictionaries\xe2\x80\x99)被合并。此设置称为 \xe2\x80\x98merge\xe2\x80\x99。...”
\n
例如,给定 inventory 和group_vars
\nshell> cat hosts\nall:\n children:\n production:\n hosts:\n 1.2.3.4\n staging:\n hosts:\n 1.2.3.5\n
Run Code Online (Sandbox Code Playgroud)\nshell> cat group_vars/all.yml\nusers:\n admin:\n shell: /bin/bash\n ansible:\n shell: /bin/sh\n
Run Code Online (Sandbox Code Playgroud)\nshell> cat group_vars/production/users.yml \nusers:\n dealer:\n shell: /usr/sbin/nologin\n
Run Code Online (Sandbox Code Playgroud)\nshell> cat group_vars/staging/users.yml \nusers:\n tester:\n shell: /bin/bash\n
Run Code Online (Sandbox Code Playgroud)\n剧本
\nshell> cat pb.yml\n- hosts: all\n tasks:\n - debug:\n var: users\n
Run Code Online (Sandbox Code Playgroud)\n默认情况下覆盖字典。给出(删节)
\nshell> ansible-playbook pb.yml\n\nTASK [debug] ****\nok: [1.2.3.4] => \n users:\n dealer:\n shell: /usr/sbin/nologin\nok: [1.2.3.5] => \n users:\n tester:\n shell: /bin/bash\n
Run Code Online (Sandbox Code Playgroud)\n当ANSIBLE_HASH_BEHAVIOUR设置为合并剧本给出的字典时(删节)
\nshell> ANSIBLE_HASH_BEHAVIOUR=merge ansible-playbook pb.yml\n\nTASK [debug] ****\nok: [1.2.3.4] => \n users:\n admin:\n shell: /bin/bash\n ansible:\n shell: /bin/sh\n dealer:\n shell: /usr/sbin/nologin\nok: [1.2.3.5] => \n users:\n admin:\n shell: /bin/bash\n ansible:\n shell: /bin/sh\n tester:\n shell: /bin/bash\n
Run Code Online (Sandbox Code Playgroud)\n此设置将在 2.13 中弃用。
\n引用已弃用的详细信息
\n\n\n“这个功能很脆弱且不可移植,导致持续的混乱和误用”
\n
引用已弃用的替代方案
\n\n\n“明确地组合过滤器”
\n
例如,将普通用户字典重命名为users_all
\nshell> cat group_vars/all.yml\nusers_all:\n admin:\n shell: /bin/bash\n ansible:\n shell: /bin/sh\n
Run Code Online (Sandbox Code Playgroud)\n然后过滤器组合合并字典
\nshell> cat pb.yml\n- hosts: all\n tasks:\n - debug:\n var: users_all|combine(users)\n
Run Code Online (Sandbox Code Playgroud)\n给出(删节)
\nshell> ansible-playbook pb.yml\n\nTASK [debug] ****\nok: [1.2.3.4] => \n users_all|combine(users):\n admin:\n shell: /bin/bash\n ansible:\n shell: /bin/sh\n dealer:\n shell: /usr/sbin/nologin\nok: [1.2.3.5] => \n users_all|combine(users):\n admin:\n shell: /bin/bash\n ansible:\n shell: /bin/sh\n tester:\n shell: /bin/bash\n
Run Code Online (Sandbox Code Playgroud)\n注意:要合并列表,请参阅解决方案。
\n 归档时间: |
|
查看次数: |
10897 次 |
最近记录: |