Ansible 在 vars、defaults 或 task 目录中定义变量和常量策略是什么?

Ansible 在 vars、defaults 或 task 目录中定义变量和常量策略是什么?

我已阅读多份文件,包括这个并在 GitHub 上检查了多个 ansible 角色,但我不清楚何时定义变量以及定义变量时将其放在哪里,即在defaultstasksvars目录中。

我希望得到指导,这样我就不必花费大量时间思考是否需要一个变量,如果需要,应该把它放在哪里。

默认值

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

但同样,没有真正的政策。如何做事取决于你。我个人通过以下方式来调整我的角色结构和剧本风格:格林盖

相关内容