当前位置: 首页 > article >正文

Linux Ansible-Jinjia2模板

目录

jinja2模板语法

部署jinja2模板

jinja2逻辑表达式


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

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

注意事项

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

jinja2模板语法

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

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

       注释包含在{# #}中

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

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

部署jinja2模板

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

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

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

Template模块语法:
 src:指定来源jinja2模板
 dest:指定要在目标主机上创建的文件

vim hosts.yml
---
- name: template and jinja2
  hosts: web
  tasks:
    - name: template
      template:
        src: host.j2
        dest: /etc/hosts.txt

进行验证

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

jinja2逻辑表达式

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

#格式
 {% if 判断条件 %}
 {{ 满足条件执行的内容 }}
 {% elif 判断条件 %}
 {{ 满足条件执行的内容 }}
 {% else %}
 {{ 以上条件都不满足执行的内容 }}
 {% endif%}

#例子-如果被管理节点的主机fqdn为node1,则输出echo node1;如果不为node1,则输出此管理节点的fqdn和ipv4地址
 {% if ansible_facts.fqdn == “node1” %}
 echo node1
 {% else %}
 hosts is {{ ansible_facts.fqdn }} and {{ ansible_facts.default_ipv4.address }}
 {% endif %}

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

#格式
 {% for 循环语句 %}
 {{ 每次循环执行的内容 }}
 {% endfor%}

#例子  提取所有主机各自对应的hostname值
 {% for host in groups['all'] %}
 {{ hostvars[host]['ansible_facts']['hostname']}}                                          
 {% endfor %}


http://www.kler.cn/a/15765.html

相关文章:

  • 【Docker容器】一、一文了解docker
  • PMP--一、二、三模、冲刺--分类--变更--技巧--特点
  • 什么是MySQL,有什么特点
  • daos集群部署(单机)
  • 怎样选择合适的服务器租用呢?
  • STM32+AI语音识别智能家居系统
  • iOS 吸顶效果
  • 【Redis】Redis中的5种基础数据类型详解
  • 前端web3入门脚本二:初探dex,在dex完成一笔swap
  • 势能回馈系统超级电容储能系统介绍
  • 浅谈文心一言
  • 生成器的创建方式(py编程)
  • 汇编语言(第3版)- 学习笔记 - 第1章-基础知识
  • 【无标题】c++异常机制的一些总结以及思考
  • HTTPS协议
  • 万万没想到在生产环境翻车了,之前以为很熟悉 CountDownLatch
  • 如果ChatGPT写作论文,保姆及教程以及问题答疑
  • Elasticsearch简单搜索以及聚合分析
  • 软件测试:测试一个网站
  • vue2之echarts的封装 折线图,饼图,大图
  • 合并石子(动态规划)
  • DPDK系列之十六虚拟化virtio源码分析之virtio-user
  • JS手撕代码系列【手写实现Promise】
  • 【Redis16】Redis进阶:内存优化
  • wifi芯片行业信息汇总
  • AcWing55. 连续子数组的最大和