SaltStack(7)——saltstack之jinja模板调用grains、pillar实现keepalived

上一篇博客《SaltStack(6)——saltstack之jinja模块详解》已经对Jinja模板进行了解释,实验环境已经配置好master及minion的环境,创建好默认数据配置目录,并且编写好了apache和nginx自动安装部署脚本。

上一篇博客链接:https://blog.csdn.net/dghfttgv/article/details/104956264

目录

一、使用Jinja模板调用grains和pillar

       使用方法一

  •           步骤一:
  •              1、nja最基本的用法是使用控制结构包装条件
  •              2、测试
  •           步骤二:测试

       使用方法二

  •          步骤一:编辑httpd.conf文件
  •          步骤二:编辑apache主模板文件
  •          步骤三:测试

       使用方法三

  •          步骤一:创建变量文件
  •          步骤二:修改htpd.conf模板文件
  •          步骤三:编译
  •          步骤四:测试

      使用方法四:

  •         例:定义变量在httpd.con配置文件中监听主机的ip
  •        方法一:
  •             步骤一:配置变量文件
  •             步骤二:编辑httpd配置模板
  •             步骤三:测试
  •       方法二:
  •            1、编辑http.conf文件将监听端口的值改成grain变量的取值
  •            2、在init.sls文件中添加jinja模板
  •            3、在server2上查看配置文件的内容
  •      方法三:
  •           1、编辑http.conf文件将监听端口的值改成pillar变量的取值
  •           2、编辑init.sls文件
  •           3、编辑

二、pillar给不同节点不同的配置实现keepalived

  •     方法一:
  •         步骤一:
  •            1、创建实验目录
  •            2、创建init.sls文件安装keeplived软件
  •            3、编译
  •         步骤二:将keepalived.conf复制到当前的目录下
  •         步骤三:定义pillar变量
  •         步骤四:修改init.sls文件
  •         步骤五:测试
  •     方法二:
  •        步骤一:修改init.sls中的内容
  •        步骤二:
  •        步骤三:测试

 

一、使用Jinja模板调用grains和pillar

  • Jinja 是一种基于python的模板引擎,在sls文件中可以直接使用jinja模板开做一些操作
  • 通过jinja模板可以为不同的服务器定义各自的变量
  • 两种分隔符:{ %...% }和{ { ... } },前者用于执行诸如for循环或赋值的语句后者把表达式的结果打印在模板上

实验环境

主机名ip服务
server1172.25.6.1服务端 salt-master
server2172.25.6.2客户端 salt-minion
server3172.25.6.3客户端 salt-minion

 

使用方法一:

在sls文件中使用

步骤一:

1、jinja最基本的用法是使用控制结构包装条件

[root@server1 ~]# vim /srv/salt/test.sls
/mnt/testfile:
  file.append:
  {% if grains['fqdn'] == 'server2' %}       ##条件判断语句
  - text: server2                             ##如果是server2主机在后边追加一个纯文本信息,如果信息不存在则会新创建新的
  {% elif grains['fqdn'] == 'server3' %}
  - text: server3
  {% endif %}

 

2、测试 :

[root@server1 salt]# salt '*' state.sls test 

 

 

步骤二:

测试

1、在server2、server3上查看 /mnt/testfile下的内容

[root@server2 ~]# cat /mnt/testfile 
server2

追加的原理是 :如果testfile中存在要追加的内容则不会改变追加的值、如果testfile中不存在才会在下边追加

验证:

 

 

使用方法二:

在普通文件中使用

模块中变量的调用情况

步骤一:

编辑httpd.conf文件

[root@server1 ~]# vim /srv/salt/apache/httpd.conf 

...
 
Listen {{ port }}            ##修改配置文件中的端口为变量格式

...

 

 

步骤二:

1、编辑apache主模板文件

[root@server1 ~]# vim /srv/salt/apache/init.sls         ##编辑apache主模板文件 

install-apache:
  pkg.installed:
    - pkgs:
      - {{ pillar['webserver'] }}
      - httpd-tools
      - php

  service.running:
    - name: {{ pillar['webserver'] }}
    - enable: True
    - watch:
      - file: install-apache

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - template: jinja                                               ##调用的是jinja模板
    - context:
        port: 8080                                                  ##定义变量

(红色字体为修改的内容!!!)

 

步骤三:

测试

1、编译:

[root@server1 ~]# salt server2 state.sls apache     

 

2、测试:

在server2上查看端口的变量

[root@server2 ~]# netstat  -anltp                   ##查看端口信息 

 

 

 

使用方法三:

import方式,可在satate之间共享

定义变量文件——>引用变量文件

步骤一:

1、创建变量文件

[root@server1 ~]# vim /srv/salt/lib.sls 
{% set port = 80 %}                           ##定义一个变量 

 

步骤二:

1、修改htpd.conf模板文件

[root@server1 ~]# vim /srv/salt/apache/httpd.conf     

在文件的第一行插入 

{% from 'lib.sls' import port %}        ##从lib.sls文件调用变量  

 

步骤三:

编译:

[root@server1 apache]# salt server2 state.sls apache

 

 

步骤四:

测试:

在server2上:

[root@server2 ~]# netstat  -anltp  

(变量调用成功!!!)

 

 

使用方法四:

直接引用gain变量 :

  • Linten {{ grains['ip']}}

直接引用pillar变量

  • Linten {{ pillar['ip']}}

在state文件中引用:

-  template: jinja

    - context:

      bind: {{ pillar['ip']}}

 

例:定义变量在httpd.con配置文件中监听主机的ip

方法一

步骤一:

1、配置变量文件

[root@server1 ~]# vim  /srv/salt/apache/init.sls       

install-apache:
  pkg.installed:
    - pkgs:
      - {{ pillar['webserver'] }}
      - httpd-tools
      - php

  service.running:
    - name: {{ pillar['webserver'] }}
    - enable: True
    - watch:
      - file: install-apache

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - template: jinja
    - context:
      port: 8080
      bind: {{ grains['ipv4'][1] }}                            ##变量的值 切片取第二个值

 

2、查看server2的ipv4

[root@server1 apache]#  salt server2 grains.item ipv4     ##查看server2 ipv4的值
server2:
    ----------
    ipv4:
        - 127.0.0.1
        - 172.25.6.

 

步骤二:

编辑httpd配置模板

[root@server1 ~]#  vim  /srv/salt/apache/httpd.conf    
...

Listen {{ bind }}:{{ port }}            ##端口的变量信息 

...

 

步骤三:

测试

1、编译

[root@server1 apache]# salt server2 state.sls apache   

 

2、在server2上查看配置文件的内容

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf  

 

 

方法二:

通过grain取变量值

在http.conf模板中定义grians变量

在init.sls模板中引用jinja模板

1、编辑http.conf文件将监听端口的值改成grain变量的取值

[root@server1 ~]#  vim  /srv/salt/apache/httpd.conf 
...

Listen {{ grains['ipv4'][1] }}:{{ port }}               ##通过grain取从ipv4的值 

...

 

2、在init.sls文件中添加jinja模板

[root@server1 ~]#  vim  /srv/salt/apache/init.sls 

install-apache:
  pkg.installed:
    - pkgs:
      - {{ pillar['webserver'] }}
      - httpd-tools
      - php在server2上查看配置文件的内容

  service.running:
    - name: {{ pillar['webserver'] }}
    - enable: True
    - watch:
      - file: install-apache

  file.managed:

[root@server1 ~]# salt server2 state.sls apache

 

    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - template: jinja                ##t添加jin'ja模板
    - context:
      port: 8080

 

3、在server2上查看配置文件的内容

在http.conf模板中定义grians变量

在init.sls模板中引用jinja模板

 

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf  

 

方法三:

通过pillar取变量值

  • 在http.conf模板中定义grians变量
  • 在init.sls模板中引用jinja模板
  • 在方法二的基础上

1、编辑http.conf文件将监听端口的值改成pillar变量的取值

[root@server1 ~]# salt server2 state.sls apache

 

2、编辑init.sls文件

[root@server1 ~]# salt server2 state.sls apache

 

install-apache:
  pkg.installed:
    - pkgs:
      - {{ pillar['webserver'] }}
      - httpd-tools
      - php

  service.running:
    - name: {{ pillar['webserver'] }}
    - enable: True
    - watch:
      - file: install-apache

[root@server1 ~]# salt server2 state.sls apache

 

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - template: jinja
    - context:
      port: {{ pillar['port'] }}                                       ##通过pillar提取端口的变量值
      bind: {{ grains['ipv4'][1]}}                                 ##通过grains提取端口的变量值

 

3、编辑

[root@server1 ~]# salt server2 state.sls apache

 

 

二、pillar给不同节点不同的配置实现keepalived

例:用过pillar实现高可用

  • 方法一

步骤一:

1、创建实验目录

[root@server1 ~]# mkdir /srv/salt/keepalived/

2、创建init.sls文件安装keeplived软件

[root@server1 ~]# vim /srv/salt/keepalived/init.sls   
install-keepalived:                                    ##安装keeplived软件
  pkg.installed:
    - name: keepalived              

 

3、编译

[root@server1 keepalived]# salt '*' state.sls keepalived     ##编译

 

步骤二

修改keepalived配置文件的模

1、将keepalived.conf复制到当前的目录下

[root@server1 keepalived]# scp server2:/etc/keepalived/keepalived.conf .    ##复制文件至当前目录下
[root@server1 keepalived]# vim keepalived.conf            ##编辑文件模板

! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost                                                          ##邮件的接受者
   }
   notification_email_from keepalived@localhost           ##系统提示接受的邮件来源
   smtp_serv

! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1                                           ##服务端口改为本机的
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state {{ STATE }}                                                 ##状态采用变量的格式
    interface eth0
    virtual_router_id 51
    priority {{ PRI }}                                                 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        {{ VIP }}                                                            ##ip改成变量的形式
    }
}

 

步骤三:

定义pillar变量

[root@server1 ~]# cd /srv/pillar/           ##进入pillar目录中 
[root@server1 pillar]# 
[root@server1 pillar]# ls
top.sls  web.sls
[root@server1 pillar]# 
[root@server1 pillar]# vim web.sls          ##编辑pillar主配置文件

{% if grains['fqdn'] == 'server3' %}
webserver: nginx             
state: BACKUP                                                     ##状态变量的设定将server3时设置为BACKUP
pri: 50                                                                    ##设置优先级

{% elif grains['fqdn'] == 'server2' %}
webserver: httpd           
state: MASTER                                                     ##将server2设置为master
pri: 100                                                                   ##设置优先级

{% endif %}keepalived

port: 80

vip: 172.25.6.100                                                  ##设置vip变量

 

步骤四:

修改init.sls文件

[root@server1 ~]# vim  /srv/salt/keepalived/init.sls 

install-keepalived:
  pkg.installed:
    - name: keepalived
  file.managed:                                                           ##模板的编译
    - name: /etc/keepalived/keepalived.conf               ##配置文件所在的路径
    - source: salt://keepalived/keepalived.conf            ##模板文件所在的位置
    - template: jinja                                                       ##调用jinjia模板
    - context:                                                                ##调用变量的值
      STATE: {{ pillar['state'] }}                                      
      PRI: {{ pillar['pri'] }}
      VIP: {{ pillar['vip'] }}

  service.running:
    - name: keepalived                                               ##开启keepalived服务
    - watch:
      - file: install-keepalived

 

步骤五:

测试:

1、编译

[root@server1 keepalived]# salt '*' state.sls keepalived

 

2、在server2上查看

[root@server2 ~]# ip addr          ##查看vip  

在server3上查看ip addr 

[root@server3 ~]# ip addr       ##查看主机的ip a    

 

3、master节点飘移测试

在server2上关掉keepalived服务模拟宕机的情况

[root@server2 ~]# systemctl stop keepalived.service      ##关掉keepalived服务模拟宕机的情况 

3.1、在server2上查看vip

 

3.2、在server3上查看vip是否已经转移过去

 

3.3、在浏览器上访问vip

在浏览器上输入:http://172.25.6.100

(访问到的是server3上的内容 !!!)

 

4、重新开启server2的keepalived服务

[root@server2 ~]# systemctl start keepalived.service    ##重启服务    

(vip又重新迁回到server2节点上 !!!)

4.2、在浏览器上进行测试

(访问到的是server3和server4端的内容因为之前在server2上做了haproxy的实验 !!!)

 

  • 方法二

不用在pillar目录下定义pillar变量值,直接将变量值写到init.sls文件中

步骤一 :

1、修改init.sls中的内容

[root@server1 ~]# vim /srv/salt/keepalived/init.sls      

install-keepalived:
  pkg.installed:
    - name: keepalived
  file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://keepalived/keepalived.conf
    - template: jinja
    - context:
      {% if grains['fqdn'] == 'server3' %}
      webserver: nginx
      STATE: BACKUP
      PRI: 50
      {% elif grains['fqdn'] == 'server2' %}
      webserver: httpd
      STATE: MASTER
      PRI: 100
      {% endif %}
      VIP: 172.25.6.200                                             ##将vip设置为172.25.6.200

  service.running:
    - name: keepalived
    - watch:
      - file: install-keepalived

 

步骤二:

keepalived.conf文件中的内容不变详见方法一

 

步骤三:

测试

1、编译:

[root@server1 keepalived]# salt  server2 state.sls keepalived

2、测试

在server2上查看vip

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值