当前位置:   article > 正文

Linux Ansible-Jinjia2模板_linux系统pip安装jinja2

linux系统pip安装jinja2

目录

jinja2模板语法

部署jinja2模板

jinja2逻辑表达式


jinja2是基于Python书写的模块引擎,ansible通常会使用jinja2模块结合template模块来修改被管理主机的配置文件

一般使用ansible的事实变量或魔法变量编写一个jinja2模板文件,然后使用template模板调用jinja2模板文件,在渲染jinja2模板时将其变量替换为此被管理节点上的此变量对应的值

注意事项

Ansible允许jinja2模板使用条件判断语句和循环语句,但是不允许在playbook中使用(剧本中通过loop对象来实现)

jinja2模板语法

jinja2模板以.j2为后缀(也可以不写后缀)

jinja2模板主要由注释、变量和逻辑表达式组成

       注释包含在{# #}中

变量被包含在 {{ var }} 中

       逻辑表达式通过 {% %}书写

部署jinja2模板

通过在jinja2模板引用事实变量,提取出主机事实变量所对应的值

  1. vim host.j2
  2. Welcome to  {{ ansible_facts['fqdn'] }} {{ ansible_facts['default_ipv4']['address'] }}

通过template模块部署到受管主机上(支持将控制节点中的本地文件转移到受管主机)

  1. Template模块语法:
  2.  src:指定来源jinja2模板
  3.  dest:指定要在目标主机上创建的文件
  4. vim hosts.yml
  5. ---
  6. - name: template and jinja2
  7.   hosts: web
  8.   tasks:
  9.     - name: template
  10.       template:
  11.         src: host.j2
  12.         dest: /etc/hosts.txt

进行验证

ansible web -m shell -a "cat /etc/hosts.txt"

jinja2逻辑表达式

条件判断语句(使用if语句提供判断)

  1. #格式
  2. {% if 判断条件 %}
  3. {{ 满足条件执行的内容 }}
  4. {% elif 判断条件 %}
  5. {{ 满足条件执行的内容 }}
  6. {% else %}
  7. {{ 以上条件都不满足执行的内容 }}
  8. {% endif%}
  9. #例子-如果被管理节点的主机fqdn为node1,则输出echo node1;如果不为node1,则输出此管理节点的fqdn和ipv4地址
  10. {% if ansible_facts.fqdn == “node1” %}
  11. echo node1
  12. {% else %}
  13. hosts is {{ ansible_facts.fqdn }} and {{ ansible_facts.default_ipv4.address }}
  14. {% endif %}

循环控制语句(使用for语句提供循环)

  1. #格式
  2. {% for 循环语句 %}
  3. {{ 每次循环执行的内容 }}
  4. {% endfor%}
  5. #例子  提取所有主机各自对应的hostname值
  6. {% for host in groups['all'] %}
  7. {{ hostvars[host]['ansible_facts']['hostname']}}                                          
  8. {% endfor %}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/191402
推荐阅读
相关标签
  

闽ICP备14008679号