我已阅读多份文件,包括这个并在 GitHub 上检查了多个 ansible 角色,但我不清楚何时定义变量以及定义变量时将其放在哪里,即在defaults
、tasks
或vars
目录中。
我希望得到指导,这样我就不必花费大量时间思考是否需要一个变量,如果需要,应该把它放在哪里。
sensu_host: localhost
sensu_home: /etc/sensu
sensu_conf_d: "{{ sensu_home }}/conf.d"
- name: be sure {{ item }} is installed
apt:
name: "{{ item }}"
state: latest
with_items:
- build-essential
- ntp
或者应该在变量中定义项目:
- name: be sure {{ item }} is installed
apt:
name: "{{ item }}"
state: latest
with_items:
{{ packages }}
__sensu_repo_url: deb http://sensu.global.ssl.fastly.net/apt sensu main
__sensu_repo_key_url: http://sensu.global.ssl.fastly.net/apt/pubkey.gp
是否有特定的清单,例如
如果是 a、b、c,则变量需要在默认值中声明
如果 d, e, f 则 v
如果 g, h, i 则在任务中定义它
╔═══════════╦═════════════════╗
║ directory ║ characteristics ║
╠═══════════╬═════════════════╣
║ defaults ║ constants, e.g. ║
║ tasks ║ bla, e.g. ║
║ vars ║ variables ║
╚═══════════╩═════════════════╝
答案1
在 vars 和 defaults 目录中没有定义变量和常量的策略。
目录中的变量role/defaults
具有最低优先级。因此,将角色中定义的所有变量放入role/defaults/main.yml
以供参考是有意义的。如果变量默认值取决于发行版,我会将其放在下面vars/{{ ansible_os_family }}.yml
并像这样包含它:
# Variable setup.
- name: Include OS-specific variables.
include_vars: "{{ ansible_os_family }}.yml"
我也放置了一些像 url 一样的常量变量vars
。
但同样,没有真正的政策。如何做事取决于你。我个人通过以下方式来调整我的角色结构和剧本风格:格林盖。