第三十七天:Ansible playbook变量
Playbook中同样也支持变量
变量名:仅能由字母、数字和下划线组成,且只能以字母开头
变量定义:
variable=value
variable: value
变量调用方式:
通过 {{ variable_name }} 调用变量,且变量名前后建议加空格,有时用"{{ variable_name }}"才生效
变量来源:
1. ansible 的 setup facts 远程主机的所有变量都可直接调用
2. 通过命令行指定变量,优先级最高
3. 在playbook文件中定义
4. 在独立的变量YAML文件中定义
5. 在主机清单文件中定义
主机(普通)变量:主机组中主机单独定义,优先级高于公共变量 组(公共)变量:针对主机组中所有主机定义统一变量
6. 在项目中针对主机和主机组定义
在项目目录中创建 host_vars和group_vars目录
7. 在role中定义 变量的优先级从高到低如下
-e 选项定义变量 -->playbook中vars_files --> playbook中vars变量定义 -->host_vars/主机 名文件 -->主机清单中主机变量--> group_vars/主机组名文件-->group_vars/all文件--> 主机清单组变量
一、使用 setup 模块中变量
1、使用 facts 变量
本模块自动在playbook调用,生成的系统状态信息, 并将之存放在facts变量中
facts 包括的信息很多,如: 主机名,IP,CPU,内存,网卡等
facts 变量的实际使用场景案例
通过facts变量获取被控端CPU的个数信息,从而生成不同的Nginx配置文件
通过facts变量获取被控端内存大小信息,从而生成不同的memcached的配置文件
通过facts变量获取被控端主机名称信息,从而生成不同的Zabbix配置文件
通过facts变量获取被控端网卡信息,从而生成不同的主机名 ......
2、性能优化
每次执行playbook,默认会收集每个主机的所有facts变量,将会导致速度很慢,可以采用下面方法加速
方法1 关闭facts采集加速执行,此方法将导致无法使用facts变量
- hosts: all
gather_facts: no
[root@ansible ~]# cat /etc/ansible/ansible.cfg [defaults] # smart 表示默认收集 facts,但 facts 已有的情况下不会收集,即使用缓存 facts # implicit 表示默认收集 facts,要禁止收集,必须使用 gather_facts: False # explicit 则表示默认不收集,要显式收集,必须使用gather_facts: True gathering = smart #在使用 facts 缓存时设置为smart fact_caching_timeout = 86400 #缓存时长 fact_caching = redis #缓存存在redis中 fact_caching_connection = 10.0.0.100:6379:0 #0表示redis的0号数据库 #若redis设置了密码 fact_caching_connection = 10.0.0.100:6379:0:password
3、在playbook 命令行中定义变量
vim var2.yml --- - hosts: websrvs remote_user: root tasks: - name: install package yum: name={{ pkname }} state=present [root@ansible ~]#ansible-playbook -e pkname=httpd var2.yml
4、在playbook文件中定义变量