1. 管理变量
将playbook中的某些值使用变量代替,从而简化playbook的编写
总结:
- 1.变量能够让playbook复用
- 2.可以给清单中的主机和主机组定义变量
- 3.可以使用事实和外部文件定义变量,也可以在命令行中
- 4.register关键字何以用于捕获命令输出
- 5.ansiblevault
- 6.ansible事实是从受管主机自动检测到的变量
1.1 ansible变量简介
-
变量可能包含下面这些值: 要创建的用户、要安装的软件包、 要重启的服务、 要删除的文件、 要从互联网检索的文档 。
-
命名变量: 变量名称必须以字母开头,并且只能含有字母、数字和下划线
示例: web_server 、 remote_file 、 file1 -
定义变量的三个范围级别:
全局范围: 从命令行或ansible配置设置的变量
play范围: 在play和相关结构中设置的变量
主机范围: 由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
如果多个级别上定义了相同名称的变量,优先采用级别最高的变量,窄范围优先于广范围
1.2 在playbook中定义变量
1.2.1 在playbook开头的vars块中定义变量
较常见
1.2.2 在外部文件定义playbook变量
1.3 在playbook中使用变量
---
- name: testvar
hosts: all
vars:
user: leo
tasks:
- name: Create user {
{
user }}
user:
name: "{
{ user }}"
注意:
1.将变量名称放在花括号内即可
2.当变量用作开始一个值的第一元素时,必须使用引号
1.4 变量的分类
直接应用于主机的清单变量分为两大类:
1.主机变量:应用于特定主机
2.组变量:应用于一个主机组或一组主机组中的所有主机主机变量优先于组变量,但是playbook中定义的变量比这两者更高。(范围越小优先级越高)
1.4.1 定义主机变量和组变量
- Way1:比较旧,不建议采用
定义主机的变量:
定义主机组的变量:
定义嵌套组user变量:
这种做法使得清单文件难以处理,在同一文件中混合提供主机和变量信息,语法也过时,不建议使用。
- Way2:使用目录填充主机和组变量
定义主机和主机组变量的首选做法是:在与清单文件或目录相同的工作目录中
- 创建group_vars:包含组变量 和 host_vars:包含主机变量 两个目录
- 创建groups_vars/servers的yaml文件,设置变量值未key:value
- 在host_vars目录中创建名称与主机匹配的文件来存放主机变量
所以一个项目目录中包含: ansible.cfg、group_vars、host_vars、hosts、playbook.yml
从命令行覆盖变量 清单变量可以被playbook中设置的变量覆盖 两者又可通过命令行参数覆盖
- Way3:使用数组作为变量
1.4.2 使用已注册变量捕获命令输出
管理员可以使用register语句捕获命令输出
---
- name: Install a package
hosts: server2
tasks:
- name: Install
yum:
name: httpd
state: installed
register: installed_result
- debug:
var: installed_result