jinja1模版有多种应用方式,以apache的端口和ip为例:
1.调用jinja
1.编辑配置文件添加jinja模版
[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# ls
files install.sls service.sls
[root@server1 apache]# vim install.sls
httpd-install:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- context:
port: 80
host: 172.25.254.2
2.在配置文件中引入可变参数host及其port
[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# vim files/httpd.conf
42 Listen {{host}}:{{port}}
进行推送测试:
在server2上查看配置文件看是否发生变化:
3.可以在一个文件中定义变量并且在httpd的配置文件中将变量进行导入,操作如下:
//设定变量:
[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# vim lib.sls
{% set host = '172.25.254.2' %}
//编辑安装文件删掉导入模版后context下定义的主机host
[root@server1 apache]# vim install.sls
httpd-install:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- context:
port: 80
//将变量导入到httpd的配置文件中
[root@server1 apache]# vim files/httpd.conf
//推送发现推送成功
在server2上查看配置文件发现会自动删除所导入变量的一行:
[root@server2 salt]# vim /etc/httpd/conf/httpd.conf
2.jinja结合grains的使用
1.在jinja模块中引入grains
[root@server1 apache]# vim install.sls
httpd-install:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- context:
port: 80
host: {{ grains['ipv4'][1] }}
2.编辑httpd的配置文件,注释已经做过的通过文件导入变量的内容并且重新编写定义Listen端口的变量
[root@server1 apache]# vim files/httpd.conf
3.推送
推送成功说明jinja和grains可结合使用
3.jinja模版结合pillar
1.在安装的脚本文件中引入pillar
[root@server1 apache]# vim install.sls
httpd-install:
pkg.installed:
- pkgs:
- httpd
- php
- httpd-tools
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- context:
port: {{ pillar['port'] }}
host: {{ pillar['ip'] }}
2.在pillar的默认文件中添加写入进即阿所需信息
[root@server1 apache]# vim /srv/pillar/web/vars.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
state: master
ip: 172.25.254.2
port: 80
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
state: backup
ip: 172.25.254.3
port: 80
{% endif %}
3.推送
推送成功说明jinja可结合pillar模块使用