saltstack (3) grains 与 pillar

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

1、使用自定义grains 

    grans的一些基本用法:

    salt object grains.ls   查看某台设备当前可用grains的key

    salt object  grains.items   查看某台设备当前可用 grains 的值 

    salt -G 'os:CentOS' test.ping   &&  salt -G 'os:Amazon' test.ping

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

    salt -G 'mem_total:32232'  test.ping  

    salt 'linux-node1*' grains.get fqdn   查询某个的信息

    salt -G os:CentOS cmd.run 'uptime'   使用granis来匹配主机 -G 参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[root@redis01-jp base] # pwd
/srv/salt/base
[root@redis01-jp base] # ls
apache  dns.sls  files  nginx.sls   top .sls
[root@redis01-jp base] # cat dns.sls
local_resolv:
   file .managed:
     source : salt: //files/resolv .conf
     - name:  /etc/resolv .conf
     - user: root
     - group: root
     - mode: 644
     - template: jinja
     - defaults:
       DNS_SERVER: 8.8.8.8        # 为变量传值 
[root@redis01-jp base] # cat files/resolv.conf
options timeout:2 attempts:5
search ap-northeast-1.compute.internal
nameserver 172.31.0.2
nameserver {{ DNS_SERVER }}      # 调用变量
[root@redis01-jp base] # salt 'redis02-jp' state.sls dns  #手工调用dns模块(首先加载dns.sls文件,如果没有此文件加载base/dns/init.sls 文件)
redis02-jp:
----------
           ID: local_resolv
     Function:  file .managed
         Name:  /etc/resolv .conf
       Result: True
      Comment: File  /etc/resolv .conf updated
      Started: 06:08:55.301324
     Duration: 59.928 ms
      Changes:
               ----------
               diff :
                   ---
                   +++
                   @@ -1,4 +1,4 @@
                    options timeout:2 attempts:5
                   -; generated by  /sbin/dhclient-script
                    search ap-northeast-1.compute.internal
                    nameserver 172.31.0.2
                   +nameserver 8.8.8.8
Summary  for  redis02-jp
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run  time :  59.928 ms
[root@redis01-jp base] # salt -G 'roles:cacheserver' cmd.run 'w'
redis02-jp:
      06:43:19 up  3:24,  1 user,  load average: 0.00, 0.00, 0.00
     USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
     ec2-user pts /0     static-ip-218-20 03:25    1:42m  0.01s  0.00s sshd: ec2-user
[root@redis01-jp base] #
[root@redis01-jp base] # vim /etc/salt/master
[root@redis01-jp base] # sed -n '680,682p' /etc/salt/master
pillar_roots:
   base:
     /srv/pillar
[root@redis01-jp base] #

  

2、使用pillar 调用变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
[root@redis01-jp ~] # vim /etc/salt/master
[root@redis01-jp ~] # sed -n '527,529p' /etc/salt/master
pillar_roots:
   base:
     /srv/pillar
[root@redis01-jp ~] # mkdir /srv/pillar
[root@redis01-jp ~] # service salt-master restart
Stopping salt-master daemon:                               [  OK  ]
Starting salt-master daemon:                               [  OK  ]
[root@redis01-jp pillar] # tree /srv/pillar/
/srv/pillar/
|-- pkg
|   `-- init.sls
`--  top .sls
1 directory, 2 files
[root@redis01-jp pillar] # cat /srv/pillar/pkg/init.sls
pkgs:
   {%  if  grains[ 'os_family' ] ==  'RedHat'  %}
   apache: httpd
   vim: vim-enhanced
   {%  elif  grains[ 'os_family' ] ==  'Debian'  %}
   apache: apache2
   vim: vim
   {%  elif  grains[ 'os' ] ==  'Arch'  %}
   apache: apache
   vim: vim
   {% endif %}
[root@redis01-jp pillar] # cat /srv/pillar/top.sls
base:
   '*' :
     - pkg         #调用pkg目录(模块),系统会自动到该目录(模块)下加载init.sls
[root@redis01-jp pillar] # salt '*' pillar.items   #查看各minion获得到的 pillar变量值 
redis02-jp:
     ----------
     pkgs:
         ----------
         apache:
             httpd
         vim:
             vim-enhanced
 
[root@redis01-jp base] # pwd
/srv/salt/base
[root@redis01-jp base] # tree apache/
apache/
`-- init.sls
0 directories, 1  file
[root@redis01-jp base] # cat apache/init.sls
apache:
   pkg.installed:
     - name: {{ pillar[ 'pkgs' ][ 'apache' ] }}     #调用pillar变量
[root@redis01-jp base] # cat top.sls
base:
   '*' :
     - apache                    #调用apache模块,自动加载apache/init.sls
[root@redis01-jp ~] # salt 'redis02-jp' state.highstate
[root@redis01-jp ~] # salt '*' saltutil.refresh_pillar     刷新pillar,grains是需要重启minion端,pillar是需要刷新
redis02-jp:
     True
[root@redis01-jp ~] # salt -I 'apache:httpd' test.ping
redis02-jp:
     True
[root@redis01-jp ~] #


3、Grains与pillar 的区别总结:

    Grains        静态         minion启动时收集      目标选择、配置管理、数据查询              minion

    pillar           动态         master定义                   目标选择、配置管理、敏感数据              maste











本文转自 meteor_hy 51CTO博客,原文链接:http://blog.51cto.com/caiyuanji/1885091,如需转载请自行联系原作者
目录
相关文章
|
关系型数据库 Linux Python
|
Web App开发 应用服务中间件 Shell
|
Web App开发 存储 应用服务中间件
|
消息中间件 监控 网络协议
SaltStack安装Apache/Mysql/PHP部署Wordpress
SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。 SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。 master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受
182 0