Ansible的模板

news/2025/1/17 0:26:36/文章来源:https://www.cnblogs.com/yinzhengjie/p/18675978

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

目录
  • 一.Ansible模板与Jinjia2快速入门
    • 1.模板概述
    • 2.Jinjia2语言概述
    • 3.Jinjia2的数据类型
    • 4.Jinjia2的运算符
    • 5.Jinjia2的if条件判断
    • 6.Jinjia的流程控制
  • 二.template的基本替换
    • 1.template的存放路径
    • 2.template的存放路径示例
  • 三.template的流程控制
    • 1.template的for循环和if判断
    • 2.for循环和if语句结合案例
    • 3.for循环嵌套

一.Ansible模板与Jinjia2快速入门

1.模板概述

模板的概念在很多技术栈都有用到,就是基于一个目标创造一个实体。有点类似于类和实例的关系。Ansible和helm一样,模板语法采用了Jinjia2语言,支持变量,变量文件,参数,条件判断,流程控制等特性。如上所示,Ansible默认使用的Jinja版本是3.0.3
[root@worker232 yinzhengjie]# ansible --version | grep jinjajinja version = 3.0.3
[root@worker232 yinzhengjie]# 

2.Jinjia2语言概述

Jinjia2是Python环境一个被广泛引用的模板引擎, 它的设计思想来源于Django的模板引擎,并扩展了其语法和系列强大的功能。Jinjia2的特点:- 沙箱中执行;- 强大的HTML自动转义系统保护免受XSS攻击;- 模板继承;- 及时编译最优的Python代码;- 可选提前编译模板的时间;- 易于调试,异常的行数直接指向模板中的对应行;- 可配置的语法;参考链接:https://docs.jinkan.org/docs/jinja2/

3.Jinjia2的数据类型

数据类型 描述
字符串 使用单引号或双引号引起来。
数值型 包括整数,浮点数,有小数点表示浮点数,在Python中,1和1.0含义是不一样的。
列表 [A,B,C,D]
元祖 (X,Y,Z)
字典
布尔 true|false
Jinjia2支持的数据类型如上表所示。	

4.Jinjia2的运算符

运算符种类 示例 描述
算数运算符 +、-、*、/、//、%、** 其中2**3表示2的3次方,结果为8。
比较运算符 ==、!=、>、>=、<、<= 一般用于比较。
逻辑运算符 or、and、not 与或非
布尔运算符 true、false 判断真假
如上表所示,表示Jinjia2常用的运算符。

5.Jinjia2的if条件判断

单分支语句:{% if EXPR %}...{% endif %}双分支语句:  {% if EXPR %}...{% else %}...{% endif %}多分支语句:{% if EXPR %}...{% elif EXPR %}...{% else %}...{% endif %}

6.Jinjia的流程控制

{% for i in EXPR %}
...
{% endfor %}

二.template的基本替换

1.template的存放路径

template文件建议存放在Playbook文件同级目录的templates目录下,且以".j2"结尾。这样Playbook中使用模板文件时,就不需要指定模板文件路径啦~

2.template的存放路径示例

	1.查看目录结果
[root@worker232 01-case-demo]# tree 
.
├── case-demo.yaml
└── templates└── test.j21 directory, 2 files
[root@worker232 01-case-demo]# 2.编写模板文件
[root@worker232 01-case-demo]# cat templates/test.j2 
string ---> {{ name }} --- {{ name * 3 }}int ---> {{ age }} --- {{ age + 5 }} --- {{ age - 5  }} --- {{ age * 5 }} --- {{ age / 5 }} --- {{ age % 5 }}float ---> {{ pi }} --- {{ pi*100 }}facts ---> {{ ansible_default_ipv4.address }}
[root@worker232 01-case-demo]# 3.编写Playbook
[root@worker232 01-case-demo]# cat case-demo.yaml 
- hosts: 10.0.0.231gather_facts: yesvars:name: "尹正杰"age: 20pi: 3.1415926tasks:- name: t1# 在"tmplates/test.j2"会加载我们定义的变量,并将输出结果放在远程主机的"/tmp/ansible-case-damo01.log"纹路下template: src=test.j2 dest=/tmp/ansible-case-damo01-template.log- name: t2# copy模块仅用于拷贝文件,并不会加载变量模板哟copy: src=./templates/test.j2 dest=/tmp/ansible-case-damo01-copy.log
[root@worker232 01-case-demo]# 4.执行剧本测试
[root@worker232 01-case-demo]# ansible-playbook case-demo.yaml5.远端主机观察数据文件
[root@master231 ~]# ll  /tmp/ansible-case-damo01*
-rw-r--r-- 1 root root 238 Jan 14 21:06 /tmp/ansible-case-damo01-copy.log
-rw-r--r-- 1 root root 162 Jan 14 21:06 /tmp/ansible-case-damo01-template.log
[root@master231 ~]# 

三.template的流程控制

1.template的for循环和if判断

template的流程控制主要针对的是if多分支语句和for循环。参考链接:https://docs.jinkan.org/docs/jinja2/templates.html#ifhttps://docs.jinkan.org/docs/jinja2/templates.html#for

2.for循环和if语句结合案例

	1.文件目录组织结构
[root@worker232 02-case-demo]# tree 
.
├── case-demo.yaml
└── templates└── test.j21 directory, 2 files
[root@worker232 02-case-demo]# 2.编写模板文件
[root@worker232 02-case-demo]# cat templates/test.j2 
{% if name == 'yinzhengjie' %}
My name is YinZhengJie
{% endif %}{% if age > 18 %}大于18岁,做你想做的事情。
{% elif age == 18 %}18岁,恭喜你成年啦~
{% else %}未成年,要听妈妈的话~
{% endif %}{% for i in range(5,10) %}{{ i }} x 2 = {{ i*2 }}
{% endfor %}{% for i in cluster %}{% if i.master == true %} {{ i.ip }}:{{ i.port }} 角色:  leader {% else %} {{ i.ip }}:{{ i.port }} 角色:  follower {% endif %}
{% endfor %}[root@worker232 02-case-demo]# 3.编写剧本
[root@worker232 02-case-demo]# cat case-demo.yaml 
- hosts: 10.0.0.231gather_facts: novars:name: "yinzhengjie"age: 20cluster:- {id: 91, ip: 10.0.0.91, port: 2181, master: false}- {id: 92, ip: 10.0.0.92, port: 2181, master: true}- {id: 93, ip: 10.0.0.93, port: 2181, master: false}tasks:- name: t1template: src=test.j2 dest=/tmp/ansible-case-damo02-template.log
[root@worker232 02-case-demo]# 4.执行剧本
[root@worker232 02-case-demo]# ansible-playbook case-demo.yaml 5.远端主机查看文件
[root@master231 ~]# ll /tmp/ansible-case-damo02-template.log 
-rw-r--r-- 1 root root 257 Jan 14 22:02 /tmp/ansible-case-damo02-template.log
[root@master231 ~]# 

3.for循环嵌套

	1.目录组织结构
[root@worker232 03-case-demo]# tree 
.
├── case-demo.yaml
└── templates└── test.j21 directory, 2 files
[root@worker232 03-case-demo]# 
[root@worker232 03-case-demo]# cat templates/test.j2 
{% for city in province %}{% for i in city  %}
城市名称: {{ i }}{% endfor %}
{% endfor %}{% for i in xiuxian %}{% for j in i  %}
动漫名称: {{ j }}{% endfor %}
{% endfor %}{% for i in hobby %}{{ i.name }}的爱好: {% for j in i.hobby %} {{ j }} {% endfor %}
{% endfor %}[root@worker232 03-case-demo]# 2.编写剧本
[root@worker232 03-case-demo]# cat case-demo.yaml 
- hosts: 10.0.0.231gather_facts: novars:province: [ [北京,上海,深圳], [西安,武汉,成都]]xiuxian:- ["凡人修仙传","仙逆"]- ["一念永恒","完美世界","斗破苍穹","遮天"]hobby:- {id: 1001, name: 孙悟空, hobby: [桃子,七仙女,打妖怪]}- {id: 1002, name: 猪八戒, hobby: [高老庄,嫦娥,吃饭]}tasks:- name: t1template: src=test.j2 dest=/tmp/ansible-case-damo03-template.log
[root@worker232 03-case-demo]# 3.执行剧本
[root@worker232 03-case-demo]# ansible-playbook case-demo.yaml 4.查看远程主机文件内容
[root@master231 ~]# ll /tmp/ansible-case-damo03-template.log
-rw-r--r-- 1 root root 420 Jan 14 22:36 /tmp/ansible-case-damo03-template.log
[root@master231 ~]# 

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

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

相关文章

NLP-自然语言处理基础

人工智能是建立可智能化处理事物的系统,让机器能够像人类一样完成智能任务。NLP(自然语言处理)是人工智能的一个分支,其主要任务包括命名实体识别、关系抽取、情感分析、机器翻译、问答系统、信息抽取、文本分类、机器阅读理解、智能对话和自动文摘等。NLP的发展历史经历了…

做题小结-未完成的二分写法

好像身不由己 不能自己很失败 细细品味这一首歌 又记起来了hjk。 https://www.luogu.com.cn/problem/CF2024B这个题也是逆天了 总结 我没做出来 然后我讲下我补题的思路吧 不知道和正解一样不一样 首先最基本的思路 就是我们先对所有的取一个min 这个就是一开始要拿的 再剔除最…

java环境安装

java安装链接[https://www.oracle.com/java/technologies/downloads/#java8-windows] 1 点击程序直接一直下一步下一步就好 注意安装的时候记得把第一次出现的地址保存一下 后面会用到 会安装两次 第一次安装的是jdk 第二次安装的是jre 其中jdk是java开发工具包 jre是java运行环…

NLP-题-Bilibili

NLP-题-Bilibili ​#国科大#​ ​#复习#​ ​#nlp#​ ‍ ‍ 有错题 一、题型填空题20道,每道1分; 简答题6道,每道7分; 综合题38分(计算、设计等)二、考试内容填空题(1)卷积层作用是什么?通过卷积操作减少参数(2)池化层作用是什么? 通过采样减少网络规模(3)Prompt…

1.16 java项目

今天主要进行了后端的搭建,html页面还并未完善另外,在进行安卓程序测试时出现了问题,AVD模拟器中HAXM总是安装失败,正在查找问题解决方法

Linux系统中 ping 的平均时间

在 Linux系统中提取 ping 的平均时间使用 ping 命令可以测试网络连接的质量,包括延迟和丢包率。在 Linux 系统中,计算 ping 命令的耗时可以通过以下方法进行: ping -c 5 域名 | grep rtt min/avg/max/mdev | awk -F[ /] {print $8, $NF}ping -c 5 域名: 向 域名 发送 5 次 I…

G1原理—9.如何优化G1中的MGC

大纲 1.大对象导致频繁Mixed GC的案例 2.Mixed GC到底是在优化什么(从避免到提速) 3.Mixed GC相关参数详解之堆内存分配参数 4.Mixed GC其他相关的参数详解及优化1.大对象导致频繁Mixed GC的案例 (1)案例背景 (2)问题现场 (3)Redis缓存有什么问题 (4)缓存同步服务有什么问题 (5…

Java 中的 ZoneOffset

介绍 在我们的这个世界上因为地球是圆的,所以每个国家都会有自己特定的时区。 时区在我们对时间的使用上扮演了非常重要的角色。但又因为时区的存在,又给我们带来了很多的麻烦,比如北美地区使用的夏令时和中国统一使用东 8 区的时间等。当这些时间在我们计算机中进行体现的时…

转:gunicorn相关配置

转自:https://blog.csdn.net/xu710263124/article/details/118975404一、gunicorn的简介Gunicorn是基于unix系统,被广泛应用的高性能的Python WSGI HTTP Server。用来解析HTTP请求的网关服务。它通常是在进行反向代理(如nginx),或者进行负载均衡(如 AWS ELB)和一个web 应…

Microsoft Office 2024 下载安装教程 ,超详细教程(建议新手收藏)

大家好,我是你们的效率小专家!今天给大家带来一篇非常实用的教程——**如何安装 Microsoft Office 2024 Professional Plus**!这款软件升级不仅让我们平时常用的 Word、Excel、PowerPoint 等工具变得更加强大,还新增了很多酷炫的功能,比如数据分析、动画创作、音视频编辑等…

2025年员工绩效考核指南

为什么要进行年度绩效评估? 评估用于形式化和记录员工与其工作期望相比的工作方式。这样,可以增强或指出性能需要更改或改进。此正式评估支持薪酬决定或人员行动,例如重新分类,永久性额外关税和纠正措施。 谁需要接受评估? 作为最佳实践,任何定期工作且处于预期继续职位的…

.NET 项目如何管理资源及配置文件

.NET/WPF 项目如何管理资源及配置文件.NET项目如何管理资源及配置文件_哔哩哔哩 .NET 项目的资源及配置文件(视频中的思维导图)本文为以上视频的笔记🍉 生成操作 Build actions for files - Visual Studio (Windows) | Microsoft Learn复制到输出目录 这个是跟生成操作独立…