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

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]# 

你可能感兴趣的:(saltstack)