一、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 }}