孤独雪鹰 发表于 2018-7-31 12:02:47

运维自动化之Saltstack( 三)Saltstack的数据信息采集者Grains和Pillar

  Saltstack的数据信息采集者Grains和Pillar
  一、SaltStack 的配置文件格式及写法
  在谈到grains和pillar之前,要和大家先谈一下SaltStack的配置文件写法
  因为下面谈到的自定义grains和如何配置pillar需要涉及到。
  关于SaltStack的所有配置文件都是YAML格式的,编写归则有以下几点:
  1.1 配置文件中用空格来表示层级之间的关系,每层每次都递增2个空格,不是Tab键。
  每次每组的配置首层必须顶头没有缩进。
  1.2 配置文件中用冒号(:)及其后面跟和一个空格来表示其是一个含有值的父层;
  就是其下面还有其他值。
  1.3 用短横杠(-)和其后紧跟一个空格来表示后面跟的是一个值。
  下面具体看下图的说明:

  二、Grains
  grains 是在minion端定义的,其数据信息相对是静态的。
  就是说当master/minion互相建立连接的时刻开始,在master 端
  通过 grains 所获取的minion端的主机信息是固定不变的,就是在minion端主机配置发生改变时,这种数据仍然不会发生改变;除非重启服务;当然还有给命令可以刷新,使之生效,那是后话了;
  值得一提的是我们可以利用grains 采集的数据信息,用来做资产管理。
  2.1. 查看目标主机的所有 grains 信息
  在master端执行
  salt'minion1.saltstack.com'grains.items
  实例应用:
  2.1.1 获取目标主机的操作系统信息

  2.1.2 用 grains 在远程执行上来匹配目标minion;(grains的内容是不区分大小写的)

  2.1.3 你也可以利用 grains模块的get方法来获取目标的grains信息
  # salt 'minion1.saltstack.com' grains.get fqdn
  minion1.saltstack.com:
  minion1.saltstack.com
  2.2. 自定义 grains
  自定义的 grains 是在minion端的主配置文件中定义的
  2.2.1 方法一: # vi /etc/salt/minion
  653 ######      Grainssetings         ######
  654 ############################################
  655 grains:
  656   roels: nginx
  657   env: prod
  修改后,要重启minion服务
  重启客户端服务成功后,在master端测试一下:
  # salt -G 'env:prod' test.ping
  minion1.saltstack.com:
  True
  2.2.2 方法二:
  这也是建议的方法,这样看着比较清晰,好管理
  就是把自定义的grains 配置文件单独的放在 /etc/salt/minion.d/目录下
  2.2.2.1 首先在 minion端的主配置文件 /etc/salt/minion 里设置如下选项:
  default_include: minion.d/*.conf
  2.2.2.2 在目录 /etc/slat/minon.d/下创建 grains.conf文件;添加如下内容:
  # cat grains.conf
  ######      Grainssetings         ######
  ############################################
  grains:
  roles: nginx
  env: prod
  2.2.2.3 重启minion端服务
  # service salt-minion restart
  Stopping salt-minion daemon:                              
  Starting salt-minion daemon:                              
  2.2.2.4 在 master 端测试
  # salt -G 'roles:windows' test.ping
  minion1.saltstack.com:
  True
  2.3. 同步 grains 数据
  你也许很讨厌修改grains数据后,必须重启才能生效的方式;现在你有更好的方法:
  刷新granins数据
  2.3.1 在minion端修改grains数据
  # cat grains.conf
  ######      Grainssetings         ######
  ############################################
  grains:
  roles: windows
  env: prod
  test: salt
  2.3.2在master测试:
  # salt -G 'test:salt' test.ping
  No minions matched the target. No command was sent, no jid was assigned.
  ERROR: No return received                     # 没执行刷新命令前
  # salt '*'saltutil.sync_grains      # 执行刷新命令
  minion1.saltstack.com:
  minion2.saltstack.com:
  Minion did not return.          # 这个minion2是没有启动的情况
  # salt -G 'test:salt' test.ping
  minion1.saltstack.com:
  True                              # 刷新后的返回状态为真
  三、 Pillar
  pillar 数据系统是在master端对minion主机进行任何数据参数的定义,可动态匹配minion端的主机特性。
  而且在 pillar 中定义的参数,可以被其他组件使用,如模板、state、API等,这也是其价值的体现
  3.1. 如何定义和是使用 pillar
  3.1.1 首先在 /etc/salt/master 中定义 pillar 的根目录
  内容如下:
  pillar_roots:
  base:
  - /srv/pillar
  # service salt-master restart# 重启 master 服务
  3.1.2在master主机上创建以上目录
  # install -d /srv/pillar/
  3.1.3在上面的目录里创建入口文件: top.sls 添如下内容
  # cat /srv/pillar/top.sls
  base:    # 定义环境
  '*':# 匹配的minion目标
  - init.rsyslog# 在/srv/pillar/init目录下,有个rsyslog.sls文件
  3.1.4 在 /srv/pillar/目录下创建init目录,
  mkdir /srv/pillar/init
  之后在 init目录下创建文件rsyslog.sls文件,内容如下
  # cat rsyslog.sls
  {% if granis['osfinger'] == 'CentOS-6' % }# 用grains判断系统发行版本是CentOS-6
  syslog: rsyslog                           # pillar的参数syslog的名字就是 rsyslog
  {% elif grains['osfinger'] == 'CentOS-5'%}# 用grains判断若是Centos-5
  syslog: syslog                              # pillar的参数syslog的名字就是 syslog
  {% endif %}                                 # if语句的结束语句
  3.1.5 在master端刷新 pillar 数据
  # salt '*' saltutil.refresh_pillar
  minion2.saltstack.com:
  True
  minion1.saltstack.com:
  True
  3.1.6 测试 pillar
  # salt '*' pillar.data syslog
  minion1.saltstack.com:
  ----------
  syslog:
  rsyslog
  minion2.saltstack.com:
  ----------
  syslog:
  rsyslog
  3.1.7 在远程执行中使用自定义的 pillar
页: [1]
查看完整版本: 运维自动化之Saltstack( 三)Saltstack的数据信息采集者Grains和Pillar