Ansible Roles全局变量

时间:2017-09-23 07:04:18

标签: ansible ansible-role

我使用角色来部署我的机器,角色有变量,但有时我有多个角色,我想在根文件夹中放置一个全局变量文件,所以安全使用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

是否存在任何角色和变量的套件可重用性?

2 个答案:

答案 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,因此您可以覆盖角色中的全局值。