1. 管理变量和事实
将playbook中的某些值使用变量代替,从而简化playbook的编写
1.1 管理变量
ansible变量简介:
变量可能包含下面这些值:
要创建的用户、要安装的软件包、 要重启的服务、 要删除的文件、 要从互联网检索的文档
命名变量:
变量名称必须以字母开头,并且只能含有字母、数字和下划线
定义变量 :
三个范围级别
- 全局范围:从命令行或ansible配置设置的变量
- play范围:在play和相关结构中设置的变量
- 主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
如果多个级别上定义了相同名称的变量,优先采用级别最高的变量,窄范围优先于广范围
playbook中的变量 :
在playbook中定义变量
1.常见方式:
在playbook开头的vars块中:
2.在外部文件定义playbook变量
在users.yml文件中写入
在playbook中使用变量
'注意:当变量用作开始一个值的第一元素时,必须使用引号'
主机变量和组变量
直接应用于主机的清单变量分为两大类:
1.主机变量:应用于特定主机
2.组变量:应用于一个主机组或一组主机组中的所有主机
主机变量优先于组变量,但是playbook中定义的变量比这两者更高
定义主机变量和组变量:
方法一(比较旧,不建议采用):
定义server1.huayu.com的ansible_user主机变量:
定义dbservers主机组的user组变量:
'这种做法使的清单文件难以处理,在同一文件中混合提供主机和变量信息,语法也过时'
方法二:
使用目录填充主机和组变量
定义主机和主机组变量的首选做法是在清单文件或目录相同的工作目录中,创建group_vars 和host_vars两个目录,这两个目录
分别包含用于定义组变量和主机变量的文件
创建group_vars/servers的YAML文件,设置变量为:
user:student
同样需要在host_vars目录中创建名称与主机匹配的文件来存放主机变量 所以一个项目目录中包含: ansible.cfg、group_vars、host_vars、inventory、playbook.yml
从命令行覆盖变量
清单变量可以被playbook中设置的变量覆盖 两者又可通过命令行参数覆盖
使用已注册变量捕获命令输出
管理员可以使用register语句捕获命令输出
cat playbook.yml
ansible-playbook test.yml
练习:
创建playbook,来安装apache并开启,使可被访问,playbook查询web服务器并确认它已经设置好并在运行
- web_pkg 要安装的web服务器软件包
- firewall_pkg #要安装的防火墙软件包
- web_service #要管理的web服务
- firewall_service #要管理的防火墙服务
- python_pkg #uri模块所需软件包
- rule #要打开的服务
执行playbook