Salt - Grains和Pillar

Grains VS Pillar

Grains

静态数据,当Minion启动的时候收集的MInion本地的相关信息。不重启minion,这些信息数据是不会改变的。

数据查询

  • 列出主机的详细信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [root@Automation ~]# salt 192.168.* grains.items
    192.168.244.130:
    ----------
    SSDs:

    biosreleasedate:
    07/02/2015
    biosversion:
    6.00
    cpu_flags:
    - fpu
    - vme
    - de
    - pse
    - tsc
    - msr
    - pae
    - mce
    ......

  • 列出所有主机的系统版本:

    1
    2
    3
    4
    5
    [root@Automation salt]# salt '*' grains.item os
    192.168.244.130:
    ----------
    os:
    CentOS
  • 直接获得内容

    1
    2
    3
    [root@Automation salt]# salt '*' grains.get os
    192.168.244.130:
    CentOS

目标选择

1
2
3
[root@Automation salt]# salt -G 'os:Centos' test.ping 
192.168.244.130:
True

配置管理

  1. 修改minion - /etc/salt/minion

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Custom static grains for this minion can be specified here and used in SLS
    # files just like all other grains. This example sets 4 custom grains, with
    # the 'roles' grain having two values that can be matched against.
    grains:
    roles:
    - webserver
    - memcache
    deployment: datacenter4
    cabinet: 13
    cab_u: 14-15

    重启服务验证:

    1
    2
    3
    4
    5
    [root@Automation salt]# salt '*' grains.item deployment
    192.168.244.130:
    ----------
    deployment:
    datacenter4
  2. 基于文件 - /etc/salt/grains

    1
    2
    [root@Automation salt]# cat grains 
    centos: minion

    重启服务验证:

    1
    2
    3
    4
    5
    [root@Automation salt]# salt '*' grains.item centos
    192.168.244.130:
    ----------
    centos:
    minion
  3. _grains目录自定义grain
    grains脚本目录,必须是base下创建_grains目录(如:/srv/salt/_grains)
    创建一个python脚本在/srv/salt/_grains目录下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@Automation _grains]# cat my_grains 
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-

    def my_grains():
    # 初始化grains字典
    grains = {}
    # 设置字典中的key-value
    grains['eb'] = 'eb'
    grains['add'] = 'beijing'
    # 返回字典
    return grains

    通过master同步脚本文件至每台minion

    1
    salt '*' saltutil.sync_grains

    文件放在minion主机的/var/cache/salt/minion/extmods/grains目录下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@Automation salt]# tree minion
    minion
    ├── extmods
    │   └── grains
    │   ├── my_grains.py
    │   └── my_grains.pyc
    ├── files
    │   └── base
    │   └── _grains
    │   └── my_grains.py
    ├── module_refresh
    └── proc

    6 directories, 4 files

    在Master上验证:

    1
    2
    3
    4
    5
    [root@Automation salt]# salt '*' grains.item add
    192.168.244.130:
    ----------
    add:
    beijing

grains优先级(item名称相同的情况下): 系统自带 > grains文件写到 > minion配置文件写的 > 自己写的脚本

Pillar

Pillar在salt中是非常重要的组成部分,利用它可以完成很强大的功能,它可以指定一些信息到指定的minion上,不像grains一样是分发到所有Minion上的,它保存的数据可以是动态的,Pillar以sls来写的,格式是键值。

文件路径设置

1
2
3
4
5
6
7
8
# Salt Pillars allow for the building of global data that can be made selectively
# available to different minions based on minion grain filtering. The Salt
# Pillar is laid out in the same fashion as the file server, with environments,
# a top file and sls files. However, pillar data does not need to be in the
# highstate format, and is generally just key/value pairs.
pillar_roots:
base:
- /srv/pillar

并创建

1
mkdir /srv/pillar

创建Pillar

  1. 创建一个pillar文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@Automation pillar]# mkdir qa
    [root@Automation pillar]# cd qa
    [root@Automation qa]# ls
    [root@Automation qa]# vi init.sls
    [root@Automation qa]# cat init.sls
    {% if grains['os'] == 'CentOS' %}
    vm: vm1
    {% elif grains['os'] == 'Debian' %}
    vm: vm2
    {% endif %}
  2. 创建TOP FILE文件

    1
    2
    3
    4
    5
    6
    [root@Automation qa]# cd ..
    [root@Automation pillar]# vi top.sls
    [root@Automation pillar]# cat top.sls
    base:
    '192.168.244.130':
    - qa.init
  3. 验证

    1
    2
    3
    4
    5
    6
    7
    8
    [root@Automation pillar]# salt '*' saltutil.refresh_pillar
    192.168.244.130:
    True
    [root@Automation pillar]# salt '*' pillar.items vm
    192.168.244.130:
    ----------
    vm:
    vm1

目标选择

1
2
3
4
5
[root@Automation pillar]# salt -I 'vm:vm1' grains.item os
192.168.244.130:
----------
os:
CentOS
唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!