2

我使用角色来部署我的机器,角色有变量,但有时我有多个角色,我想把一个全局变量文件放在根文件夹中,所以可以使用vars/global.yml覆盖 role/vars/main.yml

#vars/global.yml
somevariable: somevalue

但是如果根文件夹中有全局变量,只需覆盖基于角色的变量并实现 vars/global 代替。

├── 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

有什么东西可以重用角色和变量吗?

4

2 回答 2

3

看看变量优先级:我应该把变量放在哪里?章节。

列表中“角色变量”之后列出的所有角色都将具有优先权,因此请使用其中任何一个。

  • 块变量(仅适用于块中的任务)
  • 任务变量(仅用于任务)
  • 角色(和 include_role)参数
  • 包括参数
  • 包含变量
  • set_facts / 注册变量
  • 额外变量(总是优先)

否则,使用具有最低优先级的角色默认值来定义变量值。从您的问题的示例中,角色默认值被 play vars 覆盖。

于 2017-09-23T08:22:56.797 回答
1

将全局变量放在 group_vars/all 中。在目录布局中查看它如何适合您的目录结构。

角色变量优先于 group_vars,因此您可以覆盖角色中的全局值。

于 2017-09-23T09:16:28.473 回答