• 作用:将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基本语法

      • 条件判断

        1. {% if daxin.safe %}
        2. daxin is safe.
        3. {% elif daxin.dead %}
        4. daxin is dead
        5. {% else %}
        6. daxin is okay
        7. {% endif %}
      • 循环结构

        1. {% for file in filenames %}
        2. # 取值
        3. {{ file }}
        4. {% 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