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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�