我在命令行上运行我的playbooks指定目标服务器环境,例如:
ansible-playbook -e env=staging playbook.yml
现在我希望能够提供参数,例如要在服务器上创建的用户字典,以便所有环境都有用户 common ,以及我运行该playbook的 specific 到 that one 环境的用户 .
目录结构可能如下所示:
├── group_vars
│ ├── all
│ │ ├── users.yml
│ │
│ ├── development
│ │ ├── users.yml
│ │
│ ├── production
│ │ ├── users.yml
│ │
│ └── staging
│ ├── users.yml
我最初认为像这样的设置可以完成这项工作 . 但是,每个环境的 users.yml
字典永远不会与 all/users.yml
合并
ansible-playbook -e env=production playbook.yml
只会从 production/users.yml
读取 .
如何使用 all/users.yml
从特定环境中使用Ansible合并 users.yml
- 这样我始终可以创建公共和特定于env的用户?
1 回答
默认情况下,Ansible将通过具有更高优先级的等效项覆盖哈希/字典值 .
您可以通过更改ansible.cfg中的hash_behaviour选项来覆盖它,如果您真的想要,但我建议在这样的全局级别反对它 .
相反,您可以像这样定义您的用户:
然后还在你的所有group_vars中定义了一个
all_users
变量,如下所示:然后你可以通过使用set_fact任务创建合并变量来变量combine:
或者您可以将其直接组合到您打算使用它的任务中:
如果您只是尝试组合2个列表,则可以通过简单添加列表来执行此操作:
或直接: