一、jiaja模板简介
Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。通过jinja模板可以为不同服务器定义各自的变量。两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上
二、jinja模板使用方式
结合apache的部署来理解jiaja模板:
(1)install.sls文件
[root@server1 apache]# cat install.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
service.running:
- name: httpd
- relaod: True
- watch:
- file: install-apache
(2)推送:
[root@server1 apache]# salt server2 state.sls apache.install
1.在普通文件的使用
(1)更改文件
vim instsll.sls
- template: jinja
- context:
port: 80
(2)更改模板文件
vim files/httpd.conf
(3)推送
salt server2 state.sls apache.install
2.使用grains变量
(1) 在普通文件的使用grains变量
更改文件
vim /srv/salt/apache/instsll.sls
- template: jinja
- context:
port: 80
host: {{ grains['ipv4'][1] }}
更改模板文件
vim files/httpd.conf
salt server2 state.sls apache.install
(2) 直接引用grains变量
vim files/httpd.conf
Listen {{ grains['ipv4'][1] }}
salt server2 state.sls apache.install
3.使用pillar变量
vim /src/pillar/web/vars.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
ip: 172.25.60.2
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
(1)在普通文件的使用pillar变量
vim /srv/salt/apache/instsll.sls
- template: jinja
- context:
port: 80
host:{{ pillar['ip'] }}
vim files/httpd.conf
salt server2 state.sls apache.install
(2).直接引用pillar变量:
vim files/httpd.conf
Listen {{ pillar['ip'] }}
salt server2 state.sls apache.install
salt server2 state.sls apache.install
4.import方式,可在state文件之间共享:
(1)定义变量文件:
vim /srv/salt/apache/lib.sls
{% set port = 8080 %}
(2)导入模板文件:
vim httpd.conf
{% from 'apache/lib.sls' import port %}
...
Listen {{ prot }}
(3)推送
salt server2 state.sls apache.install
(4)在server2上查看
Import方式扩展: /srv/salt/nginx/install.sls