自动化运维——Grains静态数据系统和Pillar动态数据系统

本文详细介绍了Saltstack中的Grains和Pillar模块。Grains用于收集被控主机基本信息,如操作系统、CPU等,便于进行个性化配置。Pillar则提供了一种在Master端存储和传递配置数据的方式,支持高级的条件判断和数据定制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. grains简介

(1)grains是Saltstack最重要的组件之一,grains的作用是收集被控主机的基本信息,这些信息通常都是一些静态的数据,包括CPU、内核、操作系统、虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可以利用这新信息对不同业务进行个性化配置。
(2)Grains是SaltStack当中的一个数据系统,当Minion启动时Grains会把Minion的数据收集起来,比如操作系统版本、CPU 位数等。由于采用的是静态收集,只有当Minion发生重启时数据才会发生变化,在Grains的实际运用中常用于对多台Minion做操作时进行一些条件匹配,比如有上百台Minion服务器,只需要对操作系统为CentOS的做一些操作等。

2. grains模块的应用

(1)罗列出所有Minion的所有信息,命令执行后可以看到出现了很多信息,我们可以用这些信息来作为一些过滤条件。

[root@server1 apache]# salt server2 grains.items
server2:
    ----------
    SSDs:
    biosreleasedate:
        01/01/2011
    biosversion:
        0.5.1
    cpu_flags:
        - fpu
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8 
         ...
         ...
[root@server1 apache]# salt server2 grains.item os
server2:
    ----------
    os:
        RedHat
[root@server1 apache]# salt server2 grains.item fqdn
server2:
    ----------
    fqdn:
        server2
[root@server1 apache]# salt server2 grains.item nodename
server2:
    ----------
    nodename:
        server2
[root@server1 apache]#

(2)jinja模板结合grains部署安装httpd服务

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

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - template: jinja   
    - context:
      port: 80
      host: {{ grains['ipv4'][-1] }}

  service.running:
    - name: httpd
    - reload: true 
    - restart: true
    - watch:
      - file: install-apache
[root@server1 apache]# 
推送部署:
salt server2 state.sls apache

[root@server2 zabbix]# netstat -antlp| grep 80
tcp        0      0 172.25.254.2:80         0.0.0.0:*               LISTEN      22320/httpd         
tcp        0      0 127.0.0.1:10050         127.0.0.1:35380         TIME_WAIT   -                   
[root@server2 zabbix]# 

3. pillar模块的应用

(1)pillar,只在master端

[root@server1 ~]# cd /srv/pillar/
[root@server1 pillar]# ls
top.sls  web.sls
[root@server1 pillar]# vim web.sls 
[root@server1 pillar]# cat web.sls 
{% if grains['fqdn'] == 'server3' %}
webserver: httpd
{% elif grains['fqdn'] == 'server2' %}
webserver: nginx
{% endif %}

port: 80
[root@server1 pillar]# 


[root@server1 pillar]# cat top.sls 
base:
  '*':
    - web
[root@server1 pillar]# 

刷新,并测试

[root@server1 pillar]# salt '*' saltutil.refresh_pillar
server2:
    True
server3:
    True
[root@server1 pillar]# salt '*' pillar.items
server2:
    ----------
    port:
        80
    webserver:
        nginx
server3:
    ----------
    port:
        80
    webserver:
        httpd
[root@server1 pillar]# 

(2)使用pillar部署httpd服务

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

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf
    - template: jinja   
    - context:
      port: {{ pillar['port'] }}
      host: {{ pillar['host'] }}

  service.running:
    - name: httpd
    - reload: true 
    - restart: true
    - watch:
      - file: install-apache
vim httpd.conf 
42	Listen {{ host }}:{{ port }}
[root@server1 pillar]# cat web.sls 
{% if grains['fqdn'] == 'server3' %}
host: 172.25.254.3
port: 80
{% elif grains['fqdn'] == 'server2' %}
host: 172.25.254.2
port: 80
{% endif %}

[root@server1 pillar]# cat top.sls 
base:
  '*':
    - web
[root@server1 pillar]# 
[root@server1 apache]# salt server2 state.sls apache
[root@server2 zabbix]# netstat -antlp| grep 80
tcp        0      0 172.25.254.2:80         0.0.0.0:*               LISTEN      22320/httpd         
tcp        0      0 172.25.254.2:59180      172.25.254.1:4506       TIME_WAIT   -                   
tcp        0      0 127.0.0.1:10050         127.0.0.1:38480         TIME_WAIT   -                   
[root@server2 zabbix]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值