saltstack中的grains组件&& jinjia模板 && pillar模块

saltstack中的grains组件

学习指南:https://docs.saltstack.com/en/latest/topics/grains/

grains简介

  • 除了运行远程命令,SaltStack允许管理员使用“grain”。grain可以在SaltStack仆从运行远程查询,因此收集仆从的状态信息并允许管理员在一个中央位置存储信息

  • Grains是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息。 grains其实是一系列的服务器信息,从信息里可以看到服务器是一台dell r420型号的物理机器,系统是centos6.5,cpu是E5-2420 24核。

saltstack中grains应用

  • 通常我们进行采购都是一批次的产品,所以使用grains可以轻易的进行批量管理。当然,也可以通过自定义grains来分组管理我们的服务器

  • 在执行salt的sls时候可以根据Grains信息的不同对服务器进行匹配分组,例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。

saltstack中grains的三种设定方法

方法一:设定minion端主配置文件

minion端设定

[root@server2 ~]# vim /etc/salt/minion
129 grains:
130   roles: nginx  ##设定角色

[root@server2 ~]# systemctl restart salt-minion  ##修改了主配置文件所以需要重启服务

在server1获取

[root@server1 ~]# salt server2 grains.item roles
server2:
    ----------
    roles:
        nginx

方法二:在minion端编辑grains文件
minion端设定

[root@server3 salt]# pwd
/etc/salt
[root@server3 salt]# vi grains
roles: apache

在这里插入图片描述
master端同步更新

[root@server1 ~]# salt server3 saltutil.sync_grains ##/etc/salt/grains默认生效 不用重启,但须重新同步
server3:

在这里插入图片描述
grains获取

[root@server1 ~]# salt server3 grains.item roles
 server3:
    ----------
    roles:
        apache

在这里插入图片描述
方法三:在master端使用扩展模块_grains

master端设定

[root@server1 ~]# mkdir /srv/salt/_grains
[root@server1 salt]# cd _grains/
[root@server1 _grains]# ls
[root@server1 _grains]# pwd
/srv/salt/_grains
[root@server1 _grains]# vi my_grains.py
#!/usr/bin/env python
def my_grains():
     # initialize a grains dictionary
     grains = {}
     # Some code for logic that sets grains like
     grains['roles'] = 'haproxy'
     grains['salt'] = 'stack'
     return grains

刷新同步

[root@server1 _grains]# salt server4 saltutil.sync_grains   ##刷新
server4:
    - grains.my_grains

grains获取

[root@server1 _grains]# salt server4 grains.item roles
server4:
    ----------
    roles:
        haproxy

在这里插入图片描述

saltstack中grains的两种使用方法

(1)命令行中使用,salt 命令中使用grains

#对cpu架构是x86_64的服务器显示CPU的个数
salt -G 'cpuarch:x86_64' grains.item num_cpus

#测试rles为apache的主机连通性
[root@server1 _grains]# salt -G "roles:apache" test.ping
server3:
    True

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

(2)在SLS中使用grains

不同角色有不同任务,通过角色不同或相同进行主机批量处理

[root@server1 salt]# cat top.sls 
base:
  'roles:nginx':
    - match: grain
    - nginx.service
  'roles:apache':
    - match: grain
    - apache.apache
  'server4':
    - haproxy.install

saltstact中的 jinjia模板

jinja模板与静态变量的传递

需求:

比如我们有这样一个需求,就是需要apache监听自己服务器的ip地址.

这个可以用jinjia模板来实现的.

实现jianjia模板需要三步:

(1)file状态使用template参数

(2)模板文件里面变量使用{{名称}} {{PORT}}

(3)变量列表

-default:

PORT:8080

具体实现:

[root@server1 apache]# cd files/
[root@server1 files]# pwd
/srv/salt/apache/files
[root@server1 files]# ls
httpd.conf
[root@server1 files]# vi httpd.conf
    42 Listen {{ grains['ipv4'][-1] }}:{{ PORT }}
[root@server1 salt]# vi apache.sls 
[root@server1 apache]# cat apache.sls 
apache-install: ##唯一性声明
  pkg.installed: ##调用模块
    - pkgs:
      - httpd-tools
      - httpd

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - template: jinja  ##使用jinja模板
    - default:
      PORT: 8080

  service.running:
    - name: httpd
    - reload: true
    - watch:
      - file: apache-install

推送执行

或者

[root@server1 apache]# vi files/httpd.conf
   42 Listen {{ HTTP_HOST }}:{{ PORT }}
[root@server1 apache]# vi apache.sls 
apache-install: ##唯一性声明
  pkg.installed: ##调用模块
    - pkgs:
      - httpd-tools
      - httpd

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - template: jinja
    - context:
      PORT: 8080
      HTTP_HOST: {{ grains['ipv4'][-1] }}

  service.running:
    - name: httpd
    - reload: true
    - watch:
      - file: apache-install

执行推送

在这里插入图片描述

pillar模块

学习指南:https://docs.saltstack.com/en/latest/topics/pillar/

pillar简介

  • Pillar是在salt 0.9.8版本后才添加的功能组件。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion,所以Pillar可以用来传递敏感的数据,更适合于生产环境,更加安全例如ssh-key,加密证书等。

  • pillar 针对指定的客户端,不用触发,直接推送就生效;只在该目录下生效/srv/pillar,不会同步到minion端;不同于grains ,grains会同步到minion端

pillar模块的使用——动态参数传递

使用步骤:
(1)saltstack中pillar模块的开启

[root@server1 apache]# vi /etc/salt/master ##开启pillar模块

    834 pillar_roots:
    835   base:
    836     - /srv/pillar  ##该配置目录不存在需要自行建立

[root@server1 salt]# mkdir /srv/pillar 

在这里插入图片描述
(2)利用pillar模板对变量的设定

[root@server1 salt]# cd /srv/pillar/
[root@server1 pillar]# ls
[root@server1 pillar]# vim web.sls  ##编写pillar相应sls文件
{% if grains['fqdn'] == 'server2' %}
webserver: nginx
port: 80
{% elif grains['fqdn'] == 'server3' %}
webserver: httpd
port: 8080
{% else %}
lb: haproxy
{% endif %}

[root@server1 pillar]# vim top.sls  ##编辑顶级sls文件
base:
  '*':
    - web  ##让所有主机去匹配web.sls中的变量

在这里插入图片描述
(3)刷新

[root@server1 pillar]# salt '*' saltutil.refresh_pillar  ##刷新同步
server4:
    True
server2:
    True
server3:
    True

在这里插入图片描述
(4)参数的调用

[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# vi apache.sls 
apache-install: ##唯一性声明
  pkg.installed: ##调用模块
    - pkgs:
      - httpd-tools
      - httpd

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - template: jinja   ##使用jinjia模板
    - context:
      PORT: {{ pillar['port'] }}  ##调用pillar参数
      HTTP_HOST: {{ grains['ipv4'][-1] }}

  service.running:
    - name: httpd
    - reload: true
    - watch:
      - file: apache-install

(5)执行推送

[root@server1 apache]# salt '*' state.highstate

在这里插入图片描述
推送结果:
在这里插入图片描述

同一变量优先级的比较

同一变量可能有多种设定方式,那当我们使用多种方式定义变量后,最终变量取什么值呢?我们可以通过实验来看看变量优先级到底是如何确定的

先前的实验我们已经知道设定变量的方式有两种:(1)jinjia模板直接定义变量
(2)pillar模块针对不用客户端变量的选择定义
还有一种变量方法如下:

[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# vi lib.sls 
{% set PORT = '80' %}
[root@server1 apache]# vi files/httpd.conf
	1 {% from 'apache/lib.sls' import http_port with context %}

在这里插入图片描述

推送执行

在这里插入图片描述
在这里插入图片描述
我们可以发现,不管用什么方法,变量优先级与设定方法无关,与设定顺序有关,最后配置的设定优先级高

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值