我使用角色来部署我的机器,角色有变量,但有时我有多个角色,我想在根文件夹中放置一个全局变量文件,所以安全使用vars/global.yml
和覆盖 role/vars/main.yml
#vars/global.yml
somevariable: somevalue
但是如果根文件夹中存在全局变量,则只需覆盖基于角色的变量并实现变量/全局变量。
├── Playbook.yml
├── ansible.cfg
├── roles
│ ├── Ansible-Role-UserProfile
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── meta
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── templates
│ │ │ ├── rm.j2
│ │ │ └── vimrc.j2
│ │ └── vars
│ │ └── main.yml
└── vars
└── global.yml
是否存在任何角色和变量的套件可重用性?
答案 0 :(得分:2)
查看Variable Precedence: Where Should I Put A Variable?章节。
列表中“角色变量”之后列出的所有角色都具有优先权,因此请使用其中任何一个角色。
- 阻止变量(仅适用于块中的任务)
- 任务变量(仅适用于任务)
- role(和include_role)params
- 包括params
- include_vars
- set_facts / registered vars
- 额外的变种(总是赢得优先权)
否则使用具有最低优先级的角色默认值来定义变量值。角色默认值由游戏变量覆盖,来自问题中的示例。
答案 1 :(得分:1)
将全局变量放在group_vars / all中。在Directory layout中了解它如何适合您的目录结构。
角色变量优先于group_vars,因此您可以覆盖角色中的全局值。