saltstack自动化运维管理----------(grains、pillar)

saltstack自动化运维管理----------(grains、pillar)

1.grains

1.grains简介

Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。由于grains是静态数据,因此不推荐经常去修改它。
应用场景:信息查询,可用作CMDB。在target中使用,匹配minion。在state系统中使用,配置管理模块

2.信息查询

用于查询minion端的IP、FQDN等信息

  1. 默认可用的grains:
salt '*' grains.ls

saltstack自动化运维管理----------(grains、pillar)_第1张图片
2. 查看每一项的值:

salt '*' grains.items

saltstack自动化运维管理----------(grains、pillar)_第2张图片
3. 取单项的值:

salt server5 grains.item ipv4
salt server5 grains.item fqdn

saltstack自动化运维管理----------(grains、pillar)_第3张图片

3.自定义grains项

在server4中:

在server4的/etc/salt/minion中定义:

vim /etc/salt/minion
##写入
grains:
  roles: apache
  
重启salt-minion,否则数据不会更新:
systemctl  restart salt-minion

saltstack自动化运维管理----------(grains、pillar)_第4张图片

在server5中:

在server5的/etc/salt/minion中定义:

vim /etc/salt/minion
##写入
grains:
  roles: nginx

重启salt-minion,否则数据不会更新:
systemctl  restart salt-minion

saltstack自动化运维管理----------(grains、pillar)_第5张图片

4.编写grains模块

1。编写模块

在salt-master端创建_grains目录:

mkdir /srv/salt/_grains
vim /srv/salt/_grains/my_grain.py
##写入
def my_grain():
    grains = {}
    grains['linux'] = 'redhat'
    grains['hello'] = 'world'
    return grains
salt '*' saltutil.sync_grains	#同步grains到minion端

saltstack自动化运维管理----------(grains、pillar)_第6张图片
saltstack自动化运维管理----------(grains、pillar)_第7张图片

2。grains匹配运用

在target中匹配minion:

salt -G roles:apache cmd.run hostname
salt -G roles:nginx cmd.run hostname
salt -G hello:world cmd.run hostname

saltstack自动化运维管理----------(grains、pillar)_第8张图片

在top文件中匹配:

vim /srv/salt/top.sls
##写入
base:
  'roles: apache':
    - match: grain
    - apache
  'roles: nginx':
    - match: grain
    - nginx

saltstack自动化运维管理----------(grains、pillar)_第9张图片

2.pillar

1.pillar简介

pillar和grains一样也是一个数据系统,但是应用场景不同。
pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等,而且可以指定某一个minion才可以看到对应的信息。
pillar更加适合在配置管理中运用。

2.声明pillar

定义pillar基础目录:

vim /etc/salt/master
##修改
pillar_roots:
  base:
    - /srv/pillar
mkdir /srv/pillar


重启salt-master服务:
/etc/init.d/salt-master restart

注意:默认目录就是/srv/pillar,可以不用修改配置文件,服务业就不需要重启。

3.自定义pillar项

定义项:

vim /srv/pillar/top.sls
##写入
base:
  '*':
    - packages

vim /srv/pillar/apache.sls
##写入
{% if grains['fqdn'] == 'server5' %}
package: nginx
{% elif grains['fqdn'] == 'server4' %}
package: httpd
{% endif %}

注意: 这里会匹配所有minion,现在只有两台minion,所以endif后面不加参数,否则报错。如果有更多的minion,则需要写
刷新pillar数据:
salt '*' saltutil.refresh_pillar

查询pillar数据:
salt 'server4' pillar.items package
salt 'server5' pillar.items package

4.pillar数据匹配

命令行中匹配
salt -I package:nginx cmd.run hostname

state系统中使用

state系统中使用
vim /srv/salt/apache/init.sls

web:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}
      -php
  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf
  file.managed:
    - source: salt://apache/files/httpd.conf

在server2上安装了apache,在server3上安装了nginx

你可能感兴趣的:(企业实战)