Linux-saltstack-4 jinjia模板得基本使用

2024-01-13 09:32

本文主要是介绍Linux-saltstack-4 jinjia模板得基本使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、简介
  • 二、jinja2语法
      • 1.jinja2变量
        • 1.1 配置文件中使用jinja变量
        • 1.2在脚本中定义jinja变量
        • 1.3在脚本中设置grains变量
          • 例子1:单值
          • 例子2:多值
          • 例子3:多层取值
            • (1)在命令中多层取值
            • (2)在脚本中多层取值
      • 2.表达式
          • 1.1 if判断
          • 1.2for循环

一、简介

jinja2是一个强大的pyton模板引擎,可以使用代码动态生成内容 创建文件内容。
可以用jinja2 配置grain和pillar扩展sls配置文件
可以用jinja2 配置grain和pillar动态下发文件(服务配置文件、shell脚本等等)

在saltstack中 jinji模板其实就是一个带有salt变量的文件:
这个文件可以是服务的配置文件 也可以是脚本

二、jinja2语法

本文档中salt得版本

[root@salt-master shell_scripts]# salt --version
salt 3002.2
因为可能因为版本问题 在编写Jinja模板时 语法可能会有些许区别

1.jinja2变量

引用变量中的方法{{ 变量名 }},引用了jinja变量的文件后缀一定是j2

1.1 配置文件中使用jinja变量
[root@salt-master ~]# mkdir -p /srv/salt/httpd#这里准备一个配置文件和一个sls文件
[root@salt-master httpd]# ls
httpd.conf.j2  httpd.sls#在httpd.conf中引用变量
[root@salt-master httpd]# grep -i "^listen" httpd.conf 
Listen {{ http_port }}

在sls文件中定义jinja变量

#定义jinja变量
[root@salt-master httpd]# vim httpd.sls
copy httpd config file:file.managed:- source: salt://httpd/httpd.conf.j2- name: /etc/httpd/conf/httpd.conf- template: jinja- defaults:http_port: 8081解释: - template:jinja 说明发送的文件是一个jinja模板- defaults: 定义了http_port变量

执行结果:

[root@salt-master httpd]# salt '*' state.sls httpd.httpd查看客户端内容是否发生变化:
[root@salt-client ~]# grep -i "^listen" /etc/httpd/conf/httpd.conf 
Listen 8081
1.2在脚本中定义jinja变量

我们可以将jinja变量直接定义在脚本中,语法如下:

{% set 变量名 =%} :在脚本中替换后会变成空行
或者
{% set 变量名 =-%}:在脚本中替换后不会变成空行
[root@salt-master ~]# mkdir -p /srv/salt/shell_scripts
[root@salt-master ~]# cd /srv/salt/shell_scripts/
[root@salt-master shell_scripts]# ls
shell.sls  test.sh.j2[root@salt-master shell_scripts]# cat shell.sls 
send_shell:file.managed:- source: salt://shell_scripts/test.sh.j2- name: /root/test.sh- user: root- group: root- mode: 644- template: jinja [root@salt-master shell_scripts]# cat test.sh.j2 
#!/bin/bash{% set name = 'zhangsan' %}
echo "my name is {{name}}"

执行

[root@salt-master shell_scripts]# salt '*' state.sls shell_scripts.shell

在客户端查看test.sh

[root@salt-client ~]# cat test.sh 
#!/bin/bashecho "my name is zhangsan"
1.3在脚本中设置grains变量

在前边文章中讲过grains的用法

[root@salt-master ~]# salt '*' grains.item os
salt-client:----------os:CentOS
或者
[root@salt-master ~]# salt '*' grains.get os
salt-client:CentOS
例子1:单值
[root@salt-master shell_scripts]# cat test.sh.j2 
#!/bin/bash
{% set system_name = grains['os'] -%}
echo "system version = {{system_name}}"执行结果如下:
[root@salt-master shell_scripts]# salt '*' state.sls shell_scripts.shell在客户端查看
[root@salt-client ~]# cat test.sh 
#!/bin/bash
echo "system version = CentOS"
例子2:多值

在例子1中 os项的值只有1个,如果有多个值得项应该如何取值,比如

[root@salt-master shell_scripts]# salt '*' grains.get ipv4
salt-client:- 127.0.0.1- 192.168.1.211- 192.168.122.1
[root@salt-master shell_scripts]# cat test.sh.j2 
#!/bin/bash{% set ip = grains['ipv4'][0] -%}
echo "ip address = {{ ip }}"
[root@salt-client ~]# cat test.sh 
#!/bin/bashecho "ip address = 127.0.0.1"

或者

[root@salt-master shell_scripts]# cat test.sh.j2 
#!/bin/bash{% set ip = salt['grains.get']('ipv4')[0] -%}
echo "ip address = {{ ip }}"
例子3:多层取值
[root@salt-master shell_scripts]# salt '*' grains.item ip_interfaces
salt-client:----------ip_interfaces:----------ens32:- 192.168.1.211- fe80::2da7:41c7:9e01:82c1lo:- 127.0.0.1- ::1virbr0:- 192.168.122.1virbr0-nic:
(1)在命令中多层取值
[root@salt-master shell_scripts]# salt '*' grains.item ip_interfaces:ens32:0
salt-client:----------ip_interfaces:ens32:0:192.168.1.211
[root@salt-master shell_scripts]# salt '*' grains.item ip_interfaces:ens32:1
salt-client:----------ip_interfaces:ens32:1:fe80::2da7:41c7:9e01:82c1
(2)在脚本中多层取值
[root@salt-master shell_scripts]# cat test.sh.j2 
#!/bin/bash{% set ip = grains['ip_interfaces']['ens32'][0] -%}
echo "ip address = {{ ip }}"或者
#!/bin/bash{% set ip = salt['grains.get']('ip_interfaces:ens32:0') -%}
echo "ip address = {{ ip }}"

2.表达式

在模板中使用表达式的格式是:

{% 表达式 -%}
设置变量也是表达式得一种
1.1 if判断
[root@salt-master shell_scripts]# vim test.j2 
#!/bin/bash
{% if grains['os'] == 'CentOS' -%}echo "hello world"
{% else -%}echo "HELLO WORLD"
{% endif -%}

执行结果

[root@salt-master shell_scripts]# salt 'salt-client' state.sls shell_scripts.shell
[root@salt-client ~]# cat test.sh 
#!/bin/bash
echo "hello world"
1.2for循环
#!/bin/bash
{% for i in grains['ipv4'] -%}
iptables -A INPUT -s {{ i }} -j ACCEPT
{% endfor %}

执行结果

[root@salt-client ~]# cat test.sh 
#!/bin/bash
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s 192.168.1.211 -j ACCEPT
iptables -A INPUT -s 192.168.122.1 -j ACCEPT

这篇关于Linux-saltstack-4 jinjia模板得基本使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/600990

相关文章

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib