Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1827478
  • 博文数量: 636
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3950
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-06 21:58
个人简介

博客是我工作的好帮手,遇到困难就来博客找资料

文章分类

全部博文(636)

文章存档

2024年(5)

2022年(2)

2021年(4)

2020年(40)

2019年(4)

2018年(78)

2017年(213)

2016年(41)

2015年(183)

2014年(66)

我的朋友

分类: 系统运维

2017-04-22 23:25:32

pillar 存储位置:master端,数据类型:动态数据 ,数据采集方式:

在master端定义,指定给对应的minion。可以使用saltuitl.refresh_pillar刷新。

应用:存储master指定的数据。只有指定的minion可以看到。用于敏感数据保存。


通过一个例子来了解:

###salt '*' pillar.items
###默认是没有显示的,需在打开配置选项,我们演示完后,把这一项还原回来
###vim /etc/salt/master
###552行,pillar_opts: True
###重启服务/etc/init.d/salt-master restart
###再次执行salt '*' pillar.items 就会有显示啦
 
 
  
########################定义pillar数据#######################################
 
vim /etc/salt/master
打开下面三行:
pillar_roots:
  base:
    - /srv/pillar
 
保存退出
 
mkdir /srv/pillar
 
/etc/init.d/salt-master restart
 
#################################################################################
 
 
vim /srv/pillar/apache.sls
 
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
 
##################################################################################
 
vim /srv/pillar/top.sls
 
 
base:
  '*':
   - apache
    
######################################################################################   
 
salt '*' saltutil.refresh_pillar  #刷新一下
 
 
salt '*' pillar.items
 
   
   
######################################pillar定位主机 ##############################
 
salt -I 'apache:httpd' test.ping


1、关于Pillar
Pillar:
存储位置:Master端

数据类型:动态数据

数据采集更新方式:在Master端定义,指定给对应的Minion,可以用saltutil.refresh_pillar刷新

应用:存储Master指定的数据,只有指定的Minion可以看到。用于敏感数据保存


Pillar的使用Grains不同,需要手动设置。配置方法与State管理。需要先在master配置文件中定义pillar_roots.

同时,默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效: 


2、配置pillar

a)定义pillar_roots:

[root@master ~]# vim /etc/salt/master
pillar_roots:
  base:
    - /etc/salt/pillar

[root@master ~]# mkdir -p /etc/salt/pillar

b)定义top.sls:

[root@master ~]# vim /etc/salt/pillar/top.sls
base:
  '*':
    - init.rsyslog

备注:所有的minion端都匹配init目录下的rsyslog.sls文件

默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。

c)编辑Pillar下的SLS文件:

[root@master ~]# mkdir -p /etc/salt/pillar/init

[root@master ~]# cd /etc/salt/pillar/init

[root@master init]# vim rsyslog.sls

{% if grains['osfinger'] == 'CentOS-6' %}
syslog: rsyslog
{% elif grains['osfinger'] == 'CentOS-5' %}
syslog: syslog
{% endif %}

说明:这个是使用Jiajia模板定义的Pillar。同时使用了Grains来进行条件判断。

注意:key与value之间需要用冒号加空格分隔,没有空格的话会出现报错

d)刷新Pillar数据:

在master上修改pillar文件后,需要用以下命令刷新minion上的数据:


[root@master ~]# salt '*' saltutil.refresh_pillar

node01.saltstack.com:
    True
node02.saltstack.com:
    True
[root@master ~]# salt '*' pillar.item syslog
node01.saltstack.com:
    ----------
    syslog:
        rsyslog
node02.saltstack.com:
    ----------
    syslog:
        rsyslog
[root@master ~]# salt '*' pillar.raw
node01.saltstack.com:
    ----------
    syslog:
        rsyslog
node02.saltstack.com:
    ----------
    syslog:
        rsyslog

使用pillar.raw查看的是目前正在使用的,存在于minion端的Pillar数据,使用pillar.items会刷新后重新加载的Pillar。所以你如果添加了Pillar,可以使用该方法查询


[root@master ~]# salt -I 'syslog:rsyslog' test.ping
node01.saltstack.com:
    True
node02.saltstack.com:
    True
[root@master ~]# salt -I 'syslog:rsyslog' cmd.run 'df -h'
node02.saltstack.com:
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda5        14G  8.4G  4.5G  66% /
    tmpfs           932M   12K  932M   1% /dev/shm
    /dev/sda1       190M   42M  139M  23% /boot
    /dev/sda3       2.0G   18M  1.8G   1% /tmp
node01.saltstack.com:
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda5        14G  8.4G  4.5G  66% /
    tmpfs           932M   84K  932M   1% /dev/shm
    /dev/sda1       190M   42M  139M  23% /boot
    /dev/sda3       2.0G   18M  1.8G   1% /tmp
案例2:


[root@master init]# cd /etc/salt/pillar/
[root@master pillar]# mkdir -p packages
[root@master pillar]# cd packages/

[root@master packages]# vim packages.sls 

{% if grains['os'] == 'CentOS' %}
apache: httpd
git: git
{% elif grains['os'] == 'Debian' %}
apache: apache2
git: git-core
{% endif %}
[root@master init]# salt '*' grains.get os
node01.saltstack.com:
    CentOS
node02.saltstack.com:
    CentOS
[root@master packages]# cd ..
[root@master pillar]# ls
init  packages  top.sls
[root@master pillar]# vim top.sls 
base:
  '*':
    - init.rsyslog
    - packages.packages


说明:salt使用-I选项表示使用Pillar来匹配minion.


[root@master init]# salt -I 'apache:httpd' test.ping

node01.saltstack.com:
    True
node02.saltstack.com:
    True
[root@master init]# salt -I 'git:git' test.ping
node02.saltstack.com:
    True
node01.saltstack.com:
    True



grains 存储位置minion端,数据类型:静态数据,数据采集更新方式:

minion启动时采集,也可以使用saltutil.sync_grains 进行刷新。

应用:存储minion基本数据,比如用于匹配minion,自身数据可以用来做资 产管理。 



1、什么是Grains

  Grains是SaltStack的一个组件,存放着minion启动时收集的底层系统的静态信息。Grains是存储在minion端的,当minion启动时,会进行Grains的采集工作,然后保存下来。在以后的生命周期(再次重启minion,会重新收集)是不会发生变化的,所以是静态数据

Grains中包含诸如运行的内核版本、操作系统、CPU个数、内存、物理设备型号等信息。

  数据采集更新方式:Minion启动时收集,也可以使用saltutil.sync_grains


2、Grains的应用场景

Grains可以在state系统中使用,用于配置管理模块。

Grains可以target中使用,在用来匹配Minion,比如匹配操作系统,使用-G选项

Grains可以用于信息查询,Grains保存着收集到的客户端的详细信息。


3、Grains常用操作

a、列出Minion上所有可用的grains的名称


[root@master ~]# salt '*' grains.ls
node02.saltstack.com:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - gpus
    - host
    - hwaddr_interfaces
    - id
    - init
    - ip4_interfaces
    - ip6_interfaces
    - ip_interfaces
    - ipv4
    - ipv6
    - kernel
    - kernelrelease
    - locale_info
    - localhost
    - lsb_distrib_codename
    - lsb_distrib_id
    - lsb_distrib_release
    - machine_id
    - manufacturer
    - master
    - mdadm
    - mem_total
    - nodename
    - num_cpus
    - num_gpus
    - os
    - os_family
    - osarch
    - oscodename
    - osfinger
    - osfullname
    - osmajorrelease
    - osrelease
    - osrelease_info
    - path
    - productname
    - ps
    - pythonexecutable
    - pythonpath
    - pythonversion
    - saltpath
    - saltversion
    - saltversioninfo
    - selinux
    - serialnumber
    - server_id
    - shell
    - virtual
    - zmqversion
node01.saltstack.com:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - gpus
    - host
    - hwaddr_interfaces
    - id
    - init
    - ip4_interfaces
    - ip6_interfaces
    - ip_interfaces
    - ipv4
    - ipv6
    - kernel
    - kernelrelease
    - locale_info
    - localhost
    - lsb_distrib_codename
    - lsb_distrib_id
    - lsb_distrib_release
    - machine_id
    - manufacturer
    - master
    - mdadm
    - mem_total
    - nodename
    - num_cpus
    - num_gpus
    - os
    - os_family
    - osarch
    - oscodename
    - osfinger
    - osfullname
    - osmajorrelease
    - osrelease
    - osrelease_info
    - path
    - productname
    - ps
    - pythonexecutable
    - pythonpath
    - pythonversion
    - saltpath
    - saltversion
    - saltversioninfo
    - selinux
    - serialnumber
    - server_id
    - shell
    - virtual
    - zmqversion

b、列出Minion上所有grains的的名称及内容


[root@master ~]# salt 'node01.saltstack.com' grains.items
node01.saltstack.com:
    ----------
    SSDs:
    biosreleasedate:
        07/02/2015
    biosversion:
        6.00
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - sep
        - mtrr
        - pge
        - mca
        - cmov
        - pat
        - pse36
        - clflush
        - dts
        - mmx
        - fxsr
        - sse
        - sse2
        - ss
        - syscall
        - nx
        - rdtscp
        - lm
        - constant_tsc
        - up
        - arch_perfmon
        - pebs
        - bts
        - xtopology
        - tsc_reliable
        - nonstop_tsc
        - aperfmperf
        - unfair_spinlock
        - pni
        - pclmulqdq
        - ssse3
        - cx16
        - pcid
        - sse4_1
        - sse4_2
        - x2apic
        - popcnt
        - tsc_deadline_timer
        - aes
        - xsave
        - avx
        - f16c
        - rdrand
        - hypervisor
        - lahf_lm
        - ida
        - arat
        - epb
        - pln
        - pts
        - dts
        - fsgsbase
        - smep
    cpu_model:
        Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
    cpuarch:
        x86_64
    domain:
        saltstack.com
    fqdn:
        node01.saltstack.com
    fqdn_ip4:
        - 10.10.10.141
    fqdn_ip6:
    gpus:
        |_
          ----------
          model:
              SVGA II Adapter
          vendor:
              unknown
    host:
        node01
    hwaddr_interfaces:
        ----------
        eth0:
            00:0c:29:98:68:91
        lo:
            00:00:00:00:00:00
        pan0:
            f6:aa:1f:cb:87:f0
    id:
        node01.saltstack.com
    init:
        upstart
    ip4_interfaces:
        ----------
        eth0:
            - 10.10.10.141
        lo:
            - 127.0.0.1
        pan0:
    ip6_interfaces:
        ----------
        eth0:
            - fe80::20c:29ff:fe98:6891
        lo:
            - ::1
        pan0:
    ip_interfaces:
        ----------
        eth0:
            - 10.10.10.141
            - fe80::20c:29ff:fe98:6891
        lo:
            - 127.0.0.1
            - ::1
        pan0:
    ipv4:
        - 10.10.10.141
        - 127.0.0.1
    ipv6:
        - ::1
        - fe80::20c:29ff:fe98:6891
    kernel:
        Linux
    kernelrelease:
        2.6.32-573.el6.x86_64
    locale_info:
        ----------
        defaultencoding:
            UTF8
        defaultlanguage:
            en_US
        detectedencoding:
            UTF-8
    localhost:
        node01.saltstack.com
    lsb_distrib_codename:
        Final
    lsb_distrib_id:
        CentOS
    lsb_distrib_release:
        6.7
    machine_id:
        5bd0d598c3ad4f78b38c6e7600000020
    manufacturer:
        VMware, Inc.
    master:
        master.saltstack.com
    mdadm:
    mem_total:
        1863
    nodename:
        node01.saltstack.com
    num_cpus:
        1
    num_gpus:
        1
    os:
        CentOS
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        Final
    osfinger:
        CentOS-6
    osfullname:
        CentOS
    osmajorrelease:
        6
    osrelease:
        6.7
    osrelease_info:
        - 6
        - 7
    path:
        /sbin:/usr/sbin:/bin:/usr/bin
    productname:
        VMware Virtual Platform
    ps:
        ps -efH
    pythonexecutable:
        /usr/bin/python2.6
    pythonpath:
        - /usr/bin
        - /usr/lib64/python26.zip
        - /usr/lib64/python2.6
        - /usr/lib64/python2.6/plat-linux2
        - /usr/lib64/python2.6/lib-tk
        - /usr/lib64/python2.6/lib-old
        - /usr/lib64/python2.6/lib-dynload
        - /usr/lib64/python2.6/site-packages
        - /usr/lib64/python2.6/site-packages/PIL
        - /usr/lib64/python2.6/site-packages/gst-0.10
        - /usr/lib64/python2.6/site-packages/gtk-2.0
        - /usr/lib64/python2.6/site-packages/webkit-1.0
        - /usr/lib/python2.6/site-packages
        - /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
    pythonversion:
        - 2
        - 6
        - 6
        - final
        - 0
    saltpath:
        /usr/lib/python2.6/site-packages/salt
    saltversion:
        2015.5.10
    saltversioninfo:
        - 2015
        - 5
        - 10
        - 0
    selinux:
        ----------
        enabled:
            False
        enforced:
            Disabled
    serialnumber:
        VMware-56 4d e6 9b 20 1f b4 60-77 5d 03 1d 1d 98 68 91
    server_id:
        1356238538
    shell:
        /bin/sh
    virtual:
        VMware
    zmqversion:
        3.2.5
c、查看虚拟化的类型
[root@master ~]# salt '*' grains.get virtual
node01.saltstack.com:
    VMware
node02.saltstack.com:
    VMware


d、查询eth0所有IP地址


[root@master ~]# salt '*' grains.get ip_interfaces

node01.saltstack.com:
    ----------
    eth0:
        - 10.10.10.141
        - fe80::20c:29ff:fe98:6891
    lo:
        - 127.0.0.1
        - ::1
    pan0:
node02.saltstack.com:
    ----------
    eth0:
        - 10.10.10.142
        - fe80::20c:29ff:fead:83d
    lo:
        - 127.0.0.1
        - ::1
    pan0:

e、查询eth0所有IP地址


[root@master ~]# salt '*' grains.get ip_interfaces:eth0

node02.saltstack.com:
    - 10.10.10.142
    - fe80::20c:29ff:fead:83d
node01.saltstack.com:
    - 10.10.10.141
    - fe80::20c:29ff:fe98:6891

4、自定义grains

a)在minion上的/etc/salt/minion直接配置grains

[root@node01 ~]# vim /etc/salt/minion
grains:
  roles: IT
  dept: system
[root@master ~]# salt -G 'roles:IT' test.ping
node01.saltstack.com:
    True
[root@master ~]# salt -G 'dept:system' test.ping
node01.saltstack.com:
    True

b)通过/etc/salt/grains进行定义

[root@node01 ~]# vim /etc/salt/grains 
virtual: openstack
[root@node01 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion daemon:                               [确定]
Starting salt-minion daemon:                               [确定]

[root@node02 ~]# cat /etc/salt/grains 
virtual: xen

[root@node02 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion daemon:                               [确定]
Starting salt-minion daemon:                               [确定]

[root@master ~]# salt -G 'virtual:xen' test.ping

node02.saltstack.com:
    True

在minion端添加一个mysqlversion的信息

[root@node01 ~]# cat /etc/salt/grains 
virtual: openstack
mysqlversion: 5.5
测试,发现存在报错信息
[root@master ~]# salt -G 'mysqlversion:5.5' test.ping
No minions matched the target. No command was sent, no jid was assigned.
ERROR: No return received
使用saltutil.sync_grains进行刷新测试
[root@master ~]# salt '*' saltutil.sync_grains
node02.saltstack.com:
node01.saltstack.com:
[root@master ~]# salt -G 'mysqlversion:5.5' test.ping
node01.saltstack.com:
    True


grains收集信息:

salt '*' grains.ls
  
salt 'web13*' grains.items
 
也可以单个显示
 
salt '*' grains.item fqdn

salt '*' grains.item server_id

salt '*' grains.get ip_interfaces:eth0


grains匹配minion

#比如查看所有centos的机器上执行uptime命令:
 
salt -G os:centos cmd.run 'uptime'
 
web12.limingyu.com:
     02:24:36 up  5:45,  1 user,  load average: 0.06, 0.11, 0.08
web13.limingyu.com:
     02:24:37 up  5:45,  1 user,  load average: 0.19, 0.09, 0.06
 
#自定义grains:  vim /etc/salt/minion


#打下面几行
 
 88 grains:
 89   roles:
 90     - webserver
 91     - memcache
  
 保存退出,重启minion

/etc/init.d/salt-minion restart
 
salt -G 'roles:memcache' cmd.run 'echo hehe'
 
或者
 
vim /etc/salt/grains
web: nginx
 
保存退出,重启minion
 
salt '*' grains.item web
 
web12.limingyu.com:
    ----------
    web:
        nginx
web13.limingyu.com:
    ----------
    web:
     
salt -G web:nginx cmd.run 'echo hehe'
 
web12.limingyu.com:
    hehe


在top.sls里匹配:  vim /srv/salt/top.sls
 
base:
  'web:nginx' :
    - match: grain
    - apache
 
 
保存,重启服务
 
salt -G web:nginx cmd.run 'w'


pillar的数据是跟特定的minion关联的,可以用来传递minion自己的信息。管理员也可以自定义自己的pillar来对minion进行管理。


默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:

pillar_opts: False

自定义Pillar数据  


在Master的SLS文件中定义

假设使用默认pillar_roots配置 /srv/pillar 

vim /srv/pillar/top.sls

## 编辑pillar 的 top.sls 文件添加下面内容
base : 
  '*':
    - data
    - git
dev  :
  'os:CentOs':
    - git    
 
vim /srv/pillar/data/init.sls

## 添加下面内容
roles:webserver
 
 
vim  /srv/pillar/git.sls

## 添加下面内容
{% if grains['os'] == 'CentOs' %} 
git: git
{% elif grains['os'] == 'Debian' %} 
git: git-core
{% endif %}


pillar 跟sls一样拥有自己的top.sls文件,通过top.sls文件作为入口,组织其它的pillar文件

data定义了一个roles的值,如果不使用详细的data.init声明,则默认会使用data下的init.sls作为声明文件,如果同时存在data.sls跟data/init.sls文件,则会优先使用data.sls文件来访问。

git是使用grains的系统类型来进行不同的pillar定义。


在master上修改Pilla文件后,需要用以下命令刷新minion上的数据

salt '192.168.0.100' saltutil.refresh_pillar

怎么使用Pillar ?

Targeting :


Salt使用-I 选项来使用


salt -I 'roles:webserver' test.ping


SLS文件中使用

需要根据系统环境安装一个git软件

vim /srv/salt/git_env.sls

## 添加下面内容
git : 
  pkg.installed:
    - name : {{pillar['git']}}
     
## 或是添加成下面样式,设置默认的pillar值
git:
  pkg.installed:
    - name: {{ salt['pillar.get']('git', 'git') } 


Minion ID : 每个minion都有独立的ID,可以直接使用minion id 对对象进行操作,例如:

salt '192.168.0.100'  test.ping


通配符(*): salt的匹配规则跟shell差不多,通配符的使用也跟shell的用法一样


## 匹配所有的minion

# salt '*'  test.ping
 
## 匹配ID开头为192.168.0.的mimion 
# salt '192.168.0.*'  test.ping
 
## 匹配web1,web2,web3,web4,web5
# salt 'web[1-5]' test.ping
 
## 匹配web-x ,web-y, web-z
# salt 'web-[x-z]' test.ping


正则表达式

# 匹配id为web1-prod ,web1-devel 的minion

salt -E 'web1-(prod|devel)' test.ping


# 在state文件中也可以这么配置minion的匹配

base:
  'web1-(prod|devel)':
    - match: pcre
    - webserver

列表方式匹配
对一些特殊要求的minion对象,也可以手动指定一系列ID作为目标

salt -L 'web1,web21,web30' test.ping

Grains方式匹配

Grains 匹配是简单易用的操作方式,可以非常方便的对minion进行分类管理。

# 测试所有系统是CentOS的minion

salt -G ’os:CentOS’ test.ping


# 查询CPU架构是x84的minion的CPU个数:


salt -G ’cpuarch:x86_64’ grains.item num_cpus


在top.sls文件中使用grains匹配 


'node_type:web':
  - match: grain
  - webserver
'node_type:postgres':
  - match: grain
  - database

Pillar进行匹配

# pillar的匹配方式跟grains差不多,不过key/value换成pillar对象

salt -I 'somekey:specialvalue' test.ping

Node Group 匹配

节点分组匹配需要预先在top.sls文件中定义好minions的分组信息,例如可以在top.sls添加下面的group进行定义

nodegroups:
  group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
  group2: 'G@os:Debian and foo.domain.com'


备注:L@开头表示分组使用列表匹配,G@开头表示分组使用grains匹配

# 可以使用这样在salt中调用分组

salt -N group1 test.ping


# 在top.sls中可以使用下面定义来使用分组
base:
  group1:
    - match: nodegroup
    - webserver

最后,有时候匹配到的minion会有很多,如果同时执行可能导致master直接挂机,所以salt很贴心得给了个分批执行的功能,例如下面的操作:

# 分10个minion一批进行执行,直到执行完毕

salt '*' -b 10 test.ping
 
# 分成25%一批进行执行,直到执行完毕

salt -G 'os:RedHat' --batch-size 25% apache.signal restart







怎么运用Grains


第一种,命令行中使用,salt 命令中使用grains


#对系统是CentOS的服务器进行ping测试操作


#os:CentOS ; 就是对应上面grains.items显示出来的os值是CentOs的对象进行匹配 


salt -G 'os:CentOS' test.ping
 
#对cpu架构是x86_64的服务器显示CPU的个数


salt -G 'cpuarch:x86_64' grains.item num_cpus
 
#对字典值的对象进行匹配


salt -G 'ip_interfaces:em1:192.168.0.*'




第二种,在SLS中使用grains


# 在top.sls中使用grais
 
'os:CentOS':
    - match: grain
    - webserver

上面是在top.sls中定义对系统是CentOs的服务器执行webserver.sls定义的状态信息. 


进阶,自定义Grains


Grains的四种存在形式


Core grains.


在 /etc/salt/grains 自定义grains。


在 /etc/salt/minion 自定义grains。

在 _grains 目录自定义grain,同步到minions。

自定义的grains编写格式参考上面grains.items显示出来的格式
直接值对应 

os:CentOS
字典格式


ip_interfaces: {'lo': ['127.0.0.1'], 'em1': ['192.168.0.100'], 'em2': []}
分多行值的列表格式


osmajorrelease:
      6
      5


Core Grains : 是salt定义好的grains,后面三种自定义的grains,如果名称跟Core grains定义的一样,将会覆盖掉Core grains定义的值.


/etc/salt/grains  : 单独的grains来放置自定义的grains可以更加好的独立***。 

roles:
  - webserver
  - memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15


* 上面的内容定义了四个grain。 roles是一个列表,还有deployment,cabinet,cab_u三个值


*  需要重启minion才能生效


/etc/salt/minion : 这个的定义跟在/etc/salt/grains中的定义一样,只不过要多个grains的声明

grains : 
  roles:
    - webserver
    - memcache
  deployment: datacenter4
  cabinet: 13
  cab_u: 14-15


*  需要重启minion才能生效


_grains 目录自定义grain : 
假设使用默认的master 的file_roots配置路径 /srv/salt ,那么_grains的位置是/srv/salt/_grains 


# mkdir /srv/salt/_grains
# vim /srv/salt/_grains/my_grain.py
## 添加下面内容
    def my_grains():
        grains = {'roles' : ['phpserver','webserver']}
        return grains
         
# salt '192.168.0.100' saltutil.sync_grains


# salt '192.168.0.100' grains.item roles


这里是通过定以一个grains模块注入给minion一个roles信息。

如果查询grains.items roles无法查出相关信息,可以重启下master,再重新测试

下面给给出一个Core grains定义的一个例子,使用了比较复杂的方式来定义grains,更多的信息点击这里

saltutil.sync_grainsdef _windows_cpudata():
    '''
    Return some CPU information on Windows minions
    '''
    # Provides:
    # num_cpus
    # cpu_model
    grains = {}
    if 'NUMBER_OF_PROCESSORS' in os.environ:
        # Cast to int so that the logic isn't broken when used as a
        # conditional in templating. Also follows _linux_cpudata()
        try:
            grains['num_cpus'] = int(os.environ['NUMBER_OF_PROCESSORS'])
        except ValueError:
            grains['num_cpus'] = 1
    grains['cpu_model'] = platform.processor()
    return grains



分发自定义的grains到客户端


### 下面的三个操作均会将自定义的grains分发到192.168.0.100上

#salt '192.168.0.100' state.highstate

#salt '192.168.0.100' saltutil.sync_all

#salt '192.168.0.100' saltutil.sync_grains

阅读(1582) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~