- 作用:将playbook中的某些值使用变量代替,从而简化playbook的编写
- 变量的定义:vars(在playbook中直接编写变量)和vars_files(在playbook中引用变量文件)
- 变量的引用:{{}}、如果想要输出某一字典项(多级变量),则应该用”key.dict”或”key[‘dict’]”的方式引用,例如{{hostvars[‘node1’]}}或{{hostvars.node1}}或hostvars[var](var为变量)
- 查看ansible_facts变量小技巧
- 使用filter可以筛选指定的facts信息,支持通配符进行模糊的过滤
- ansible localhost -m setup -a “filter=ansible_eth0”查看eth0的网卡信息
- ansible localhost -m setup -a “filter=*mb”查看mb结尾的变量信息
- 常见魔法变量:ansibles_version、hostvars、groups、group_names、inventory_hostname
- ansibles_version:获取到ansible的版本号
- hostvars:帮助我们在操作当前主机时获取到其他主机中的信息,前提条件在其他主机执行了”[Gathering Facts]”任务,示例{{hostvars.node1.ansible_eth0}}、 ansible all -m debug -a “msg={{hostvars.node3.group_names}}”
- groups:获取到清单中“所有分组”的“分组信息”ansible node1 -m debug -a “msg={{groups}}”,常用{{gruop.all}}可列出所有主机
- group_names:获取到当前主机所在分组的组名ansible node1-m debug -a “msg={{group_names}}”
- inventory_hostname:获取到被操作主机的主机清单中的主机名称,ansible web -m debug -a “msg={{inventory_hostname}}”
jinja2基本语法
条件判断
{% if daxin.safe %}
daxin is safe.
{% elif daxin.dead %}
daxin is dead
{% else %}
daxin is okay
{% endif %}
循环结构
{% for file in filenames %}
# 取值
{{ file }}
{% endfor %}
检测语法(可以检查语法是否有错误)
ansible-playbook —syntax-check /path/to/playbook.yaml- 测试运行(模拟执行playbook)
ansible-playbook -C /path/to/playbook.yaml- 显示受到影响的主机 —list-hosts
- 显示工作的task —list-tasks
- 显示将要运行的tag —list-tags