云计算自动化运维——saltstack之jinja模块详解

一、jinja模板讲解

1.1 jinja引入

对于同一文件,推送到不同主机上时,需要改动的内容不一定相同。比如web中我们需要监听对应minion端自己的一个网卡IP、某个端口,就不可以直接配置文件指定IP,需要涉及到一些变量进行获取后更改操作。现在Saltstack使用Jinja模板进行文件管理,在jinja中使用grains、pillar等标识并加上一些变量,就可以实现上述操作,同时可以使得文件管理更灵活,使用jinja可以减少人为操作,提升工作效率。

1.2 什么是jinja

jinja是state(即.sls)文件中默认模版语言,基于python
用来定义类似变量或者表达式
state文件中使用 “- template:jinjia” 声明

1.3 jinja使用归纳为三个地方

(1)- file状态使用template参数

 template:jinja

(2)模板文件里边使用变量名称{{ 变量 }} 。比如 {{ HOST }} {{PORT}}

(3)变量列表(变量列表和default对齐):

如果使用模板,用户定义的模板变量,必须通过defaults或者context参数,才能传递给source中定义的文件。就是说source文件必须通过defaults或者context参数传递模板变量,才可以在文件中使用

 default:
   http_host: {{ grains['ipv4'][-1]}}   
   http_port: 80

例:在apache/install.sls文件中定义变量列表

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://files/httpd.conf
    - template: jinja
    - defaults:
      http_port: 80
      http_host: {{ grains['ipv4'][-1]}}

1.4 jinjia语法

【1】jinja取变量使用{{ 变量 }},表达式使用{% 表达式 %}

设置变量
{% set var = 'good' %}
取变量值
{{ var }}
{{ grains['id'] }}

【2】判断语句

{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache:apache2
{% endif %}

【3】for 循环

{% for user in users%}
  {{ user }}
{{ endfor }}
发布了170 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CapejasmineY/article/details/103485021
今日推荐