grains和pillar导入模块区别、jinja模板

一、Grains组件

Grains是saltstack记录minion的一些静态信息组件,可以简单的理解为grains里面记录着每台minion的一些常用的属性,比如cpu、内存、磁盘、网络信息等,可以通过grains.items查看某台minion的grains所有信息,minion的grains信息是minion启动的时候采集汇报给master的。

grains会在minion进程启动时进行加载,并缓存在内存中。这样salt-minion进程无需每次操作都要重新检索系统来获取grain,提升了minion性能。

通俗来讲:可以在minion端自定义 然后自动汇报上来 也可以从master端定义然后推下去 采集完后 再汇报上来

设置grains的方法

NO1. 方法1
[1] server2 minion的配置文件打开grains

[root@server2 ~]# vim /etc/salt/minion
120 grains:
121   roles:
122       - apache

[root@server2 ~]# /etc/init.d/salt-minion restart ##重启salt-minion

[2] server1 端查询信息

在这里插入图片描述

在这里插入图片描述

NO2. 方法2 (需要server1端刷新!)

[root@server3 ~]# cd /etc/salt
[root@server3 salt]# touch grains
[root@server3 salt]# vim grains     ##编写一个grains的配置文件
[root@server3 salt]# cat grains 
roles:
  nginx

在这里插入图片描述

NO3. 方法3 建立目录_grains,编写python方法

[root@server1 salt]# mkdir _grains
[root@server1 salt]# cd _grains/
[root@server1 _grains]# vim my_grains.py
[root@server1 _grains]# cat my_grains.py 
#!/usr/bin/env/python
def my_grains():
     grains = {}
     grains['mu'] = 'bai'
     grains['hello'] = 'world'
     return grains
[root@server1 _grains]# salt server2 saltutil.sync_grains    ## 将模块同步到server2
server2:
    - grains.my_grains

在这里插入图片描述

二、Pillar组件

它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。

Grains和Pillar的存储:

Grains : 用于存储minion的基本数据信息;存储的是静态、不常变化的内容;

Pillar : 用于存储master分配给minion的数据信息,与grains相反;

Grains和Pillar的存储区域:

Grains : 元数据存储在minion端;

Pillar : 元数据存储在master端。

Grains和Pillar的更新方式:

Grains : 在minion启动时进行更新;minion有权限操作自己的grains值,如增加、删除;

Pillar : 元数据存储在master端,使用 saltutil.refresh_pillar进行刷新,效率更高,更为灵活。minion只能查看自己的pillar,无权修改

pillar 配置

[root@server1 ~]# vim  /srv/salt/master
 694 pillar_roots:
 695   base:
 696     - /srv/pillar
 [root@server1 salt]# /etc/init.d/salt-master restart
[root@server1 ~]# mkdir /srv/pillar
[root@server1 ~]# cd /srv/pillar/
[root@server1 pillar]# mkdir web
[root@server1 pillar]# cd web/
[root@server1 web]# vim install.sls 
{% if grains['fqdn'] == 'server2' %}    //fqdn代表主机名
webserver: apache
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[root@server1 web]# cd ..
[root@server1 pillar]# vim top.sls 
base:
  '*':
  - web.install
[root@server1 web]# salt '*' saltutil.refresh_pillar   ##刷新

在这里插入图片描述

三、Jinja模板

为了实现不同机器的差异化配置
方式一:

[root@server1 salt]# cd apache/
[root@server1 apache]# ls
files  install.sls  service.sls
[root@server1 apache]# vim 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
    - template: jinja
    - context:
        bind: 172.25.254.2   
        port: 8080
[root@server1 apache]# vim files/httpd.conf 
 136 Listen {{ bind }}:{{ port }}

[root@server1 apache]# salt server2 state.sls apache.service    ## 推到server2端

在这里插入图片描述
查看server2的apache端口,被改为8080,ok!
在这里插入图片描述

方式二:

[root@server1 httpd]# vim files/httpd.conf
 136 Listen {{ port }}
[root@server1 apache]# salt server2 state.sls apache.service
[root@server2 salt]# cat /etc/httpd/conf/httpd.conf | head -n 136 | tail -n 1
Listen 8080

在这里插入图片描述

方式三:

[root@server1 httpd]# vim files/httpd.conf
 1 {% from 'apache/lib.sls' import port with context %}
 136 Listen {{ bind }}:{{ port }}
[root@server1 httpd]# vim lib.sls 
{% set port = 80 %}
[root@server1 httpd]# salt server2 state.sls apache.service

[root@server2 minion]# cat /etc/httpd/conf/httpd.conf | head -n 137 | tail -n 1
Listen 172.25.254.2:80

在这里插入图片描述

在这里插入图片描述

方式四:

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf 
Listen 172.25.254.2:80
[root@server1 apache]# vim install.sls     ## 修改bind
  - bind: {{ grains['ipv4'][-1] }} 
[root@server1 httpd]# vim files/httpd.conf 
136 Listen {{ bind }}:{{ port }}
[root@server1 httpd]# salt server2 state.sls apache.install
[root@server2 ~]# cat /etc/httpd/conf/httpd.conf | head -n 136 | tail -n 1
Listen 172.25.254.2:8080

在这里插入图片描述

方式五:

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf 
Listen 172.25.254.2:8080
[root@server1 apache]# vim install.sls 
[root@server1 apache]# vim install.sls 
[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.254.2
        port: 80
[root@server1 apache]#  vim files/httpd.conf 
 136 Listen {{ grains['ipv4'][-1] }}:{{ port }}
[root@server1 apache]# salt server2 state.sls apache.install
[root@server2 salt]# cat /etc/httpd/conf/httpd.conf | head -n 135 | tail -n 1
Listen  172.25.254.2:80

方式六:

[root@server1 httpd]# cd /srv/pillar/web
[root@server1 web]# vim install.sls 
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
bind: 172.25.254.2
port: 8080
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[root@server1 web]# cd ..
[root@server1 pillar]# cd ..
[root@server1 srv]# cd salt/httpd/
[root@server1 httpd]# vim files/httpd.conf 
 136 Listen {{ pillar['bind'] }}:{{ pillar['port'] }}
[root@server1 httpd]# salt server2 state.sls apache.install
[root@server2 conf]# cat /etc/httpd/conf/httpd.conf | head -n 136 | tail -n 1
Listen 172.25.254.2:8080
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值