我已经阅读了多个文档,包括这个文档,并在 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 ║
╚═══════════╩═════════════════╝
在 vars 和 defaults 目录中没有定义变量和常量的策略。
目录中的变量
role/defaults
优先级最低。role/defaults/main.yml
因此,将角色中定义的所有变量放入以供参考是有意义的。如果一个变量的默认值取决于我把它放在下面的分布,vars/{{ ansible_os_family }}.yml
并像这样包含它:我还把一些像 url
vars
一样的常量放在下面。但同样没有真正的政策。如何做事取决于你。我个人通过geerlingguy来定位我的角色结构和剧本风格。