变量
自动化技术使得重复做事变的更加容易,当系统有所不同,Ansible 可以是使用相同的 template,通过变量来处理不同系统。
Ansible 的变量名称可以以 字母、数字和下划线
命名,变量开头要以 字母开头
- 在 inventory 中定义变量
可以参考 「Ansible–入门」 inventory 章节介绍
- 在 playbook 中定义变量
|
|
使用变量
在 template 语言 jinjia2 的语法引用,利用中括号和点号来访问子属性
在 playbook 中使用变量
在 playbook 中使用,需要用两个大括号引用即可
|
|
在 playbook 中使用变量文件定义变量
变量文件 vars/server_vars.yml
内容
YAML 陷阱
YAML 语法要求如果值以 开头,需要讲整行用双引号扩起来,为了确保你不是在声明一个字典。
使用 Facts 获取主机系统变量
Ansible 可以通过 module_setup 收集远程主机的系统信息–facts,通过 facts 收集的信息,可以以变量形式来使用。
在 playbook 中使用 facts 变量
命令会返回海量的变量数据,这些变量可以在 playbook 中直接使用
使用复杂的 facts 变量
使用通过 fact 收集到复杂的、多层次的变量。
可以通过下面两种方式访问到复杂变量的自变量
|
|
关闭facts
在 playbook 中, 可以设置是否启用 gather_facts 来获取远程系统信息
使用被控端自定义变量
在被控端可以在 /etc/ansible/facts.d
目录中,任何以 .fact
结尾的文件都可以在 Ansible 提供局部 facts。
这样就可以在 playbook 中引用变量或者覆盖掉系统的 facts 值
注册变量
可以把 tasks 运行结果作为变量,供后面的 action 使用,在运行 playbook 时,可以使用 -v 参数看到结果值,
在文件模板中使用变量
Ansible 使用的模本是 python 的一个 jinja2 模板。在 playbook 中定义的变量,可以直接在 template 中使用。
template 变量的定义
|
|
template 变量的使用
在 template index.html.j2 中可以直接使用系统变量和用户自定义的变量
- 系统变量 ,
- 用户自定义变量:
命令行中传递变量
在执行 playbook 命令时可以通过 vars_prompt
和 vars_files
传递变量
|
|