ansible自动化运维(四)jinjia2模板

Jinjia2模板

前面说到playbook组成的时候,有介绍到template模块,而template模块对模板文件进行渲染时,使用的就是jinja2模板引擎,jinja2本身就是基于python的模板引擎,所以下面先来了解一下jinjia2模板的一些用法

基础语法

{{   }} 用来装载表达式,比如变量、运算表达式、比较表达式等。(%   %)用来装载控制语句,比如 if 控制结构,for循环控制结构。(#    #)用来装载注释,模板文件被渲染后,注释不会包含在最终生成的文件中。

该模板支持的一些数据类型和表达式

字符串:使用单引号或双引号;数字:整数,浮点数;列表:[list1, list2, ...]元组:(item1, item2, ...)字典:{key1:value1, key2:value2, ...}布尔型:true/false算术运算:+, -, *, /, //, %, **比较操作:==, !=, >, >=, <, <=逻辑运算:and, or, not

条件判断

Jinjia2模板本身就是基于python的,所以它if语句也支持多条件判断,嵌套等

与python一样,具有if(如果),elif(在如果),else(否则),只不过结尾变成了endif表示条件的结束

常见的缩进方式为4格,也可以使用 2 个空格或制表符,但要保持一致

单条件:{% if  表达式 %}执行的内容{% endif %}
双条件:{% if 表达式 %}执行内容{% else %}执行内容{% endif %}
多条件:{% if 表达式 %}执行内容{% elif 表达式 %}执行内容{% else %}
执行内容{% endif %}
嵌套:{% if  表达式 %}执行的内容{% if 表达式 %}执行内容{% else %}执行内容{% endif %}{% endif %}

循环

循环同样也具有条件判断的类似操作,这里就不过多举例了。

可以使用{% for %}和{% endfor %}块来实现一个基本的循环。

{% for i in 表达式 %}执行内容{% endfor %}

需要注意的是ansible默认不支持break(跳出循环)和continue(继续)的。

其他控制结构

你会发现jinjia2模板没有函数,但是,jinjia2模板有类似函数的用法,叫做宏,主要用于在模板渲染过程中生成动态的内容。一般有两种用法定义{% macro %}和调用{% call %},jinjia2还支持其他的控制结构如{% include %}用于包含其他模板文件。

定义宏:{% macro one(text = '这是一段默认文本') %}{{ text }}{% endmacro %}

这里one是宏的名称,text为参数,{{text}}则是宏输出的内容

过滤器

Jinja2也支持过滤器,可以使用过滤器来对变量进行操作。

Lookup过滤器

在 Ansible 中,lookup过滤器是一种强大的工具,用于从外部数据源检索数据。

语法格式:{{ lookup(‘插件名称’, ‘插件参数’)}}

常用插件:

file: 用于读取配置文件、脚本、密钥文件等各种文件类型的内容。

env: 用于获取环境变量的值

password: 用于从密码存储(如ansible-vault)中获取密码

#获取/etc/testfile文件内容{{ lookup('file','/etc/testfile') }}#获取PATH环境的变量值{{ lookup('env','PATH') }}
Default过滤器

default过滤器用于在变量未定义或者为假(例如空字符串、False、None、空列表等)的情况下提供一个默认值。

Set是用来设置变量的,想当于声明一个变量

如果variable变量未定义,那么就会把”定义的变量”这个值赋予给它

set default_value=”定义的变量”database_host:{{ variable | default("default_value") }}

template模块

 template模块与copy模块的用法十分类似,只是更多用于jinja2模板的渲染,也就是模板文件中可以引用变量,实现对不同主机有定制化的配置。

参数

解析

src

指定本地jinja2模板文件的位置

dest

指定目标远程主机路径

backup

指定是否备份,默认值no

mode

设置权限

user

设置用户

group

设置用户组

Jinjia2模板示例

jinjia2模板好用的地方在于它支持多种文件可以是html,xml,conf等等,这就极大的方便用template模块使用jinjia2模板对一些服务的配置文件进行修改

安装redis服务:

把需要修改的配置信息写入模板中[root@web01 ansible]# cat redis.conf.j2bind {{ ansible_host }} 127.0.0.1  #  引用了facts组件内置变量port {{ redis_port }}           #这是play文件里定义的变量protected-mode notcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile /var/run/redis_6379.pidloglevel notice

编写play文件

[root@web01 ansible]# cat redis.yml---- name: 部署redsi服务hosts: web01vars:redis_port: 6379 #指定redis的端口tasks:- name: install redisyum:name: redisstate: present- name: start redisservice:name: redisstate: startednotify: restart- name: upload redis.conftemplate:src: /etc/ansible/redis.conf.j2dest: /etc/redis.confhandlers:- name: restartservice:name: redisstate: restarted

执行命令

[root@web01 ansible]# ansible-playbook redis.yml

查询配置文件是否修改

[root@web01 ansible]# grep [^a-Z$] /etc/redis.confbind 192.168.143.161 127.0.0.1port 6379protected-mode notcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile /var/run/redis_6379.pidloglevel notice

可以看到此时配置文件和我们模板中写的配置文件内容一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows安装Jira

下载 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理员身份安装&#xff0c;否则弹出以下提醒 创建和配置MySQL数据库&#xff1a;参照 Connecting Jira applicat…

uniapp - 微信小程序

一、background-image 大图不显示的问题 解决方法&#xff1a; 1、使用网络地址&#xff1b;2、使用 base64 urlTobase64(filePath) {// #ifdef MP-WEIXINlet img ${filePath},imgBase64 wx.getFileSystemManager().readFileSync(img, "base64"),base64Url data:…

DETR: End-to-End Object Detection with Transformers论文学习

论文地址&#xff1a;https://arxiv.org/pdf/2005.12872 代码地址&#xff1a;https://github.com/facebookresearch/detr 相关学习视频&#xff1a;https://space.bilibili.com/94779326/lists?sid1531941 标题前言&#xff1a; DETR 是 Facebook 团队于 2020 年提出的基于…

Vue3状态管理:Pinia架构设计分析

Vue3状态管理:Pinia架构设计分析 介绍 在Vue.js开发中&#xff0c;状态管理是一个非常重要的部分。随着Vue3的发布&#xff0c;Pinia作为一种新的状态管理架构也相继问世。本文将对Pinia架构进行深入分析&#xff0c;帮助读者了解其设计原理、特点以及在实际项目中的应用。 架构…

【IDEA】启动报错

今天启动IDEA报错 报错信息&#xff1a; Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打开任务管理器&#xff0c;关掉进程ID5444的任务

socket编程UDP-实现停等机制(接收确认、超时重传)

在下面博客中&#xff0c;我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程&#xff0c;并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接&#xff08;进阶篇&#xff09;_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制&#xff1a; sock…

python xpath解析笔记

与bs4的区别 bs4有很多属性和方法&#xff0c;而xpath只有一个方法&#xff0c;是通过不同的xpath表达式实现很多功能的。 html例子 定位 tree.xpath(‘/html/head/title’) 返回列表。 开头的斜杠表示从根节点遍历。 中间的斜杠表示层级。&#xff08;相当于bs4中的>…

Q学习(Q-Learning)详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

树状数组详解

概述 树状数组&#xff08;Binary Indexed Tree&#xff0c;简称BIT&#xff09;&#xff0c;是一种数据结构&#xff0c;用于处理区间查询和更新问题。它是一种可以高效地在对数级别时间复杂度内进行单点更新和区间查询的数据结构。树状数组通常用于解决以下两类问题&#xf…

freeswitch(开启支持MCU视频会议,使用mod_av模块)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install

【大数据技术基础】【记录Ubuntu 16.04升级到18.04】Ubuntu的一个版本升级到另一个版本

在 Ubuntu 操作系统中进行软件更新和系统升级 Ubuntu Kylin 16.04 LTS 系统进行系统升级到 Ubuntu 18.04.6 LTS 版本 升级提示&#xff1a;系统弹出提示框&#xff0c;告知用户有新版本的 Ubuntu 可用&#xff0c;询问用户是否想要升级。 认证窗口&#xff1a;显示了一个认证…

这是一个vue3 + scss的数字滚动效果

介绍: 当数字变化时&#xff0c;只改变变化的数字位&#xff0c;其余的不变&#xff0c;可以递增、递减、骤变、负数也可以&#xff0c;但是样式要根据具体的项目需求去改&#xff1b; 效果1、增加数字&#xff1a; 效果2、减少数字&#xff1a; 使用方法&#xff1a; <te…

TortoiseGit的下载、安装和配置

一、TortoiseGit的简介 tortoiseGit是一个开放的git版本控制系统的源客户端&#xff0c;支持Winxp/vista/win7.该软件功能和git一样 不同的是&#xff1a;git是命令行操作模式&#xff0c;tortoiseGit界面化操作模式&#xff0c;不用记git相关命令就可以直接操作&#xff0c;读…

最新版Chrome浏览器加载ActiveX控件之Adobe PDF阅读器控件

背景 Adobe PDF阅读器控件是一个ActiveX控件&#xff0c;用于在Windows平台上显示和操作PDF文件。它提供了一系列方法和属性&#xff0c;可以实现对PDF文件的加载、显示、搜索、打印、保存等操作。 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件…

源码分析之Openlayers中的控件篇Control基类介绍

概述 Openlayers 中内置了9类控件&#xff0c;这9类控件都是基于Control类&#xff0c;而Control类则是继承于BaseObject类&#xff0c;如下图所示&#xff1a; 如上&#xff0c;这9类控件分别是&#xff1a; Attribution&#xff1a;属性控件FullScreen:全屏控件MousePositi…

第P2周:Pytorch实现CIFAR10彩色图片识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 实现CIFAR-10的彩色图片识别实现比P1周更复杂一点的CNN网络 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: …

2024年食堂采购系统源码技术趋势:如何开发智能的供应链管理APP

本篇文章&#xff0c;小编将与大家一同探讨2024年食堂采购系统的技术趋势&#xff0c;并提供开发更智能的供应链管理APP的策略。 一、2024年食堂采购系统的技术趋势 1.人工智能与机器学习的深度应用 在2024年&#xff0c;AI和机器学习在食堂采购系统中的应用将更加普遍。这些…

系统架构的演变

什么是系统架构&#xff1f; 系统架构是系统的一种整体的高层次的结构表示&#xff0c;它确定了系统的基本组织、组件之间的关系、组件与环境的关系&#xff0c;以及指导其设计和发展的原则。随着技术的发展和业务需求的增长&#xff0c;系统架构经历了从简单到复杂、从集中到…

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢&#xff1f;值类型引用类型 2、总结 三、特殊的引用类…

【C语言实现:用队列模拟栈与用栈模拟队列(LeetCode 225 232)】

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…