saltstack的重要数据系统组件grains和pillar和jinja的使用

一、grains

1、grains的概念

grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的

2、设置grains的方法
  • 在server2的minion配置文件中打开grains
vim /etc/salt/minion
121 grains:
122   roles:
123     - apache

重启服务/etc/init.d/salt-minion restart
在server1(master)上:

[root@server1 salt]# salt -G 'roles:apache' cmd.run hostname	#查看角色为apache的主机名
server2:
    server2

也可以查看minion的各个角色
在这里插入图片描述

  • 在server3的/etc/salt目录下书写grains文件
vim /etc/salt/grains
roles: nginx	#由于是用python写的,应该注意语法格式
在master端查看的时候会发现还没有出现server3的角色,可以用
[root@server1 salt]# salt server3 saltutil.sync_grains		##刷新
这时查看就会出现server3的角色

在这里插入图片描述

  • 方法3
在server1上
[root@server1 ~]# cd /srv/salt
[root@server1 salt]# vim _grains
[root@server1 salt]# mkdir _grains
[root@server1 salt]# cd _grains/
[root@server1 _grains]# vim my_grains.py
#!/usr/bin/env python
def myfunction():
    grains = {}
    grains['hello'] = 'world'
    grains['salt'] = 'stack'
    return grains

在server1端将.py文件传给server3

[root@server1 _grains]# salt server3 saltutil.sync_grains
server3:
    - grains.my_grains

并且在server3的缓存目录下可以看到该文件

[root@server3 ~]# cd /var/cache/salt/minion/files/base/_grains
[root@server3 _grains]# cat my_grains.py 
#!/usr/bin/env python
def myfunction():
    grains = {}
    grains['hello'] = 'world'
    grains['salt'] = 'stack'
    return grains

在这里插入图片描述
在seever1上可以查看对应的键值
在这里插入图片描述

二、pillar (存放的是静态数据)

1、pillar的概念

pillar是salt用来分发全局变量到所有minions的一个端口
Pillar用于给特定的 minion 定义任何你需要的数据, 这些数据可以被Salt的其他组件使用!安全起见,有些数据是不可以共享出来的,需要指定。比如高度敏感的数据:通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。

2、配置pillar
(1)编辑/etc/salt/master打开pillar存储路径
[root@server1 _grains]# cd /etc/salt/
[root@server1 salt]# vim master
 694 pillar_roots:
 695   base:
 696     - /srv/pillar
 [root@server1 salt]# /etc/init.d/salt-master restart	#重启master服务
(2)刷新锁与节点的pillar
[root@server1 salt]# salt '*' saltutil.refresh_pillar

在这里插入图片描述

(3)编辑存储pillar键值对文件
[root@server1 salt]# cd /srv/
[root@server1 srv]# mkdir pillar
[root@server1 srv]# cd pillar/
[root@server1 pillar]# vim top.sls
base:
  '*':
    - web.install
[root@server1 pillar]# mkdir web
[root@server1 pillar]# cd web/
[root@server1 web]# vim install.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}

当出现如下情况,刷新一下所有节点即可

[root@server1 pillar]# salt -I 'webserver:nginx' test.ping
server3:
    Minion did not return. [No response]

在这里插入图片描述
查看所有pillar项
在这里插入图片描述

三、jinja模块的使用方法

1、方法一

在server1的httpd.install中编写jinja模版

[root@server1 apache]# cat install.sls 
apache-install:
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - php-mysql

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - mode: 644
    - user: root
    - group: root
    - template: jinja
    - context:
      bind: 172.25.66.2
      port: 8080		#以键值对的形式存储bind和port

在server1的httpd配置文件中编辑要更新的端口或接口

cd /srv/salt/apache/files
vim httpd.conf
 136 Listen {{ bind }}:{{ port }}

给server2端推送

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

推送成功
在这里插入图片描述
在server2端检验 vim /etc/httpd/conf/httpd.conf
在这里插入图片描述

2、方法二
vim /srv/salt/apache/lib.sls
{% set port = 8080 %}
{% set bind = '172.25.35.2' %}
vim /srv/salt/apache/files/httpd/conf
在首行添加
   1 {% from 'apache/lib.sls' import port with context %}
   2 {% from 'apache/lib.sls' import bind with context %}

推送测试,在server1中/srv/salt/apache/install.sls文件中注释

#    - context:
#      bind: 172.25.66.2
#      port: 8080		

推送salt server2 state.sls apache.install
在server2中查看,会看到前两行是空白,在接听端口处会看到效果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值