• Asible——template


    template

    当需要批量处理被控机上配置文件中的内容时,template可以为对应配置文件创建模板,并把时常变化的内容修改为变量,根据各个被控机的具体情况来确定变量的具体值。

    • Jinja2

    说template之前,先说下Jinja2。

    Jinja2是Python下一个被广泛应用的模版引擎

    其基本语法:

    1. 控制结构(表达式):{% %}
    2. 变量取值:{{ }}
    3. 注释: {# #}

    ansilbe中template是基于Jinja2来使用的,所以以上语法在template中都有效

    template注释

    *注释的语法为:{##}
    其作用主要是对模板文件进行内容说明,在执行playbook时,注释内容不用传递到被控机上。只能在主控机上查看。

    例:

    {# yum #}
    
    [{{ Name_1 }}]
    name=[{{ name_1 }}]
    baseurl=ftp://host.domain8.rhce.cc/dvd/{{ localtion_1 }}
    enable=1
    gkgcheck=1
    gkgkey=ftp://host.domain8.rhce.cc/dvd/RPM-GPG-KEY-redhat-relese
    
    
    
    [root@localhost html]# cat /etc/yum.repos.d/test.repo   执行playbook后,发现文件中并没有注释
    
    [EX294_BASE]
    name=[EX294 base software]
    baseurl=ftp://host.domain8.rhce.cc/dvd/BaseOS
    enable=1
    gkgcheck=1
    gkgkey=ftp://host.domain8.rhce.cc/dvd/RPM-GPG-KEY-redhat-relese
    

    ansible_managed(配置文件内置变量)

    ansible_managed为ansible配置文件中的变量,默认值为:ansible_managed = Ansible managed

    此变量也是对文件进行说明,但与注释不一样的是,ansible_managed为变量,在被控机中可以查看。

    我们可以自定义ansible_managed值。

    ......
    # in some situations so the default is a static string:
    #ansible_managed = Ansible managed
    ansible_managed = '此文件由template生成,请不要随意修改'   自定义ansible_managed的值
    
    
    
    
    [root@localhost html]# cat /etc/yum.repos.d/test.repo    对此文件进行说明
    此文件由template生成,请不要随意修改
    
    [EX294_BASE]
    name=[EX294 base software]
    baseurl=ftp://host.domain8.rhce.cc/dvd/BaseOS
    enable=1
    gkgcheck=1
    gkgkey=ftp://host.domain8.rhce.cc/dvd/RPM-GPG-KEY-redhat-relese
    

    template表达式

    表达式或控制块的语法为:{%%}

    template——for循环

    除了在playbook中进行loop循环外,我们也可以在模板文件中进行内容循环。

    变量 {{ loop.index }} 可以代表循环的索引次数号

    [root@localhost project2]# vim template/test.j2
    {% for x in users %}                把变量x置于users变量中,让x来遍历users中的值
      {{ loop.index,x }}
    {% endfor %}
    
    
    [root@localhost project2]# !vim
    vim test.yml                              执行playbook
    ---
    - name: test
      hosts: 192.168.190.133
      vars_files:
        files/vars                            指定变量文件
      tasks:
        - name:
          template:
            src: template/test.j2
            dest: /
    
    [root@localhost html]# vim /test.j2        查看被控机文件
      (1, 'zhangsan')
      (2, 'lisi')
      (3, 'wangwu')
    

    template——if条件

    满足条件下才打印下面的变量

    vim template/test.j2 
    {% if ansible_facts.distribution == "RedHat" %}   如果被控机事实中的系统变量为RedHat,则打印变量result.
      {{ result }}
    {% endif %}
    

    template—— 变量过滤器

    变量过滤器的作用是使传递的数据进行修饰后者筛选,从而使结果展示的更加简洁与明了。过滤器通过竖线符号(|)与变量分开

    常用变量过滤器

    过滤器名 说明
    safe 不转义,将此值标记为安全
    capitalize 把值的首字母转换成大写,其他字母转换成小写
    lower 把值转换成小写形式
    upper 把值转换成大写形式
    title 把值中每个单词的首字母都转换成大写
    trim 把值的首尾空格去掉
    striptags 把值中所有的 HTML 标签都删掉
    tojson/to_nice_json 值返回为json格式
    toyaml/to_nice_yaml 值返回为yaml格式

    例:

    {{ ansible_facts.default_ipv4 | to_nice_yaml }}  将事实中的地址信息转换为yaml格式
    
    
    [root@localhost /]# vim test.txt   执行playbook后,到被控机器上查看
    address: 192.168.190.133
    alias: ens33
    broadcast: 192.168.190.255
    gateway: 192.168.190.2
    interface: ens33
    macaddress: 00:0c:29:93:80:cf
    mtu: 1500
    netmask: 255.255.255.0
    network: 192.168.190.0
    type: ether
    
    

    过滤器可以连续使用

    {{ ansible_facts.default_ipv4 | to_nice_yaml | title }}   将值转为yaml格式后把每个单词的首字母大写
    
    
    [root@localhost /]# cat test.txt 
    Address: 192.168.190.133
    Alias: Ens33
    Broadcast: 192.168.190.255
    Gateway: 192.168.190.2
    Interface: Ens33
    Macaddress: 00:0c:29:93:80:cf
    Mtu: 1500
    Netmask: 255.255.255.0
    Network: 192.168.190.0
    Type: Ether
  • 相关阅读:
    累加和最大化
    SELECT子句顺序
    Linux命令入门教程
    求字符串前缀最长的连续重复子串(不重叠)
    王道机试指南题解(C/C++版)
    C++ Primer 第 5 版 习题参考答案
    第 16 章
    第 15 章
    第 14 章
    从jvm源码解读Java运行时的类加载
  • 原文地址:https://www.cnblogs.com/sawyer95/p/13647279.html
Copyright © 2020-2023  润新知