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.rhkb.cn/news/490257.html

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

相关文章

光谱相机

光谱相机是一种能够同时获取目标物体的空间图像信息和光谱信息的成像设备。 1、工作原理 光谱相机通过光学系统将目标物体的光聚焦到探测器上&#xff0c;在探测器前设置分光元件&#xff0c;如光栅、棱镜或滤光片等&#xff0c;将光按不同波长分解成多个光谱通道&#xff0c…

LLM 分布式训练六大关键技术介绍

编者按&#xff1a; 本文聚焦于分布式去中心化神经网络训练技术&#xff0c;作者系统阐述了在大规模模型训练中提高硬件使用效率的创新方法。 文章重点阐述了六种关键的分布式训练技术&#xff1a; 数据并行训练&#xff1a;通过将数据 mini-batches 分散到多个 workers&#x…

【记录】Django解决与VUE跨域问题

1 梗概 这里记录Django与VUE的跨域问题解决方法&#xff0c;主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…

跨平台开发技术的探索:从 JavaScript 到 Flutter

随着多平台支持和用户体验一致性在应用程序开发中变得越来越重要,开发者面临的挑战是如何在不同平台上保持代码的可维护性和高效性。本文将探讨如何利用现代技术栈,包括 Flutter、JavaScript、HTML5、WebAssembly、TypeScript 和 Svelte,在统一的平台上进行高效的跨平台开发…

队列+宽搜_429. N 叉树的层序遍历_二叉树最大宽度

429. N 叉树的层序遍历 定义一个队列q&#xff0c;将一层的节点入队&#xff0c;并记录节点个数。根据节点的个数&#xff0c;出队列&#xff0c;并将其孩子入队列。出完队列&#xff0c;队列当前剩余节点的个数就是下次出队列的次数。直到队列为空 /* // Definition for a Nod…

语音芯片赋能可穿戴设备:开启个性化音频新体验

在科技日新月异的今天&#xff0c;语音芯片与可穿戴设备的携手合作&#xff0c;正引领我们步入一个前所未有的个性化音频时代。这一创新融合&#xff0c;用户可以享受到更加个性化、沉浸式的音频体验。下面将详细介绍语音芯片与可穿戴设备合作的优点和具体应用。 1. 定制化音效…

单片机学习笔记 18. IIC总线EEPROM(理论)

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

【机器学习】手写数字识别的最优解:CNN+Softmax、Sigmoid与SVM的对比实战

一、基于CNNSoftmax函数进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分析 二、 基于CNNsigmoid函数进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分析 三、 基于CNNSVM进行分类 1数据集准备 2模型设计 3模型训练 4模型评估 5结果分…

TOSUN同星TsMaster使用入门——2、使用TS发送报文,使用graphics分析数据等

在第一章里面已经介绍了关于同星工程的创建和最基础的总线分析&#xff0c;接下来看看怎么使用TS发送报文以及图形化分析数据。 目录 一、使用Graphics分析报文信号/变量&#xff08;对标CANoe Graphics&#xff09; 二、使用数值窗口统计信号值/变量 三、使用TS发送报文 3…

【老白学 Java】日期 / 时间格式化

日期 / 时间格式化 文章来源&#xff1a;《Head First Java》修炼感悟。 本篇文章&#xff0c;老白把日期和时间的格式化参数进行了整理&#xff0c;方便以后查阅&#xff0c;更加详细的说明请参考 Java API 文档。 一、语法解释 %&#xff0c;必要参数&#xff0c;用于引用参…

分布式 Paxos算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法&#xff08;含伪代码&#xff09;》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…

【嵌入式软件】跑开发板的前置服务配置

在嵌入式开发中,通常需要在 开发板和主机之间共享、传输和挂载文件。 这篇文章是关于如何在 Ubuntu 中配置 Samba、TFTP 和 NFS 协议的详细步骤。这些协议分别用于远程文件共享、文件传输和内核挂载文件系统。 如何安装协议: 参考:ubuntu18配置:详细的内容我手写了一份文档。…

IntelliJ IDEA 使用技巧与插件推荐

目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统&#xff08;VCS&#xff09; 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…

如何对小型固定翼无人机进行最优的路径跟随控制?

控制架构 文章继续采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#xff1a; { x ˙ p V a cos ⁡ γ cos ⁡ χ V w cos ⁡ γ w cos ⁡ χ w y ˙ p V a cos ⁡ γ sin ⁡ χ V w cos ⁡ γ w sin ⁡ χ…

VR虚拟展厅的实时互动是如何实现的?

VR虚拟展厅的实时互动是通过一系列技术和流程实现的&#xff0c;这些技术和流程共同确保了用户在虚拟环境中的互动体验能够及时响应和更新。 接下来&#xff0c;由专业从事VR虚拟展厅制作的圆桌3D云展厅平台为大家介绍一下实现VR虚拟展厅实时互动的几个关键要素&#xff1a; 高…

(三)FT2232HL高速调试器的接口定义与使用配置说明

&#xff08;特别声明&#xff1a;仅对FT2232HL_v0.2 20241125版本进行电路优化调整&#xff09; 如果FT2232HL板子是V0.2版本&#xff08;背面丝印FT2232HL_v0.2 20241125&#xff09;&#xff0c;类似下图这样的&#xff0c;说明已经对电路进行了优化调整。 1、接口定义 FT…

C++20 标准概念

1. 所有标准概念的概述 “类型和对象基本概念”表列出了类型和对象的基本概念。 “范围、迭代器和算法概念”表列出了范围、视图、迭代器和算法的概念。 “辅助概念”表列出的概念主要用作其他概念的构建块&#xff0c;通常不会让应用程序开发者直接使用。 头文件和命名空间 …

zookeeper的安装

zookeeper的安装 一.前言 zookeeper开源组件是为分布式应用&#xff0c;提供协调服务的一种解决方案。本文主要是介绍在Centos7的操作系统中&#xff0c;如何以单机&#xff0c;伪集群&#xff0c;集群的方式来安装部署zookeeper服务。zookeeper要求的jdk版本为1.6以上。本文假…

【经验分享】容器云运维的知识点

最近忙于备考没关注&#xff0c;有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源&#xff0c;但我以交流、交换为主&#xff0c;笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟&#xff0c;为了避免更多人花没必要的钱&#xff0c;所以决定公…

【docker】springboot 服务提交至docker

准备docker &#xff08;不是docker hub或者harbor&#xff0c;就是可以运行docker run的服务&#xff09;&#xff0c;首先确保docker已经安装。 本文以linux下举例说明&#xff1a; systemctl stats docker ● docker.service - Docker Application Container EngineLoaded…