SaltStack -----(三)Grains的应用

1 Grains概述

Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
由于grains是静态数据,因此不推荐经常去修改它。

1.1 Grains的应用场景

  • Grains可以在state系统中使用,用于配置管理模块。
  • Grains可以在target中使用,用来匹配minion,比如匹配操作系统,使用-G选项
  • Grains可以用于信息查询,Grains保存着收集到的客户端的详细信息。

2 Grains的应用示例

2.1 Grains信息查询

  • 用于查询minion端的IP、FQDN等信息
  • 查看server2中grains每一项的值:salt server2 grains.items

在这里插入图片描述

  • 取单项的值
salt server2 grains.item ipv4  ##取server2ip地址
salt server2 grains.item fqdn  ##取server2主机名

在这里插入图片描述

2.2 自定义grains项

(1) 在/etc/salt/grains中定义(master):vim /etc/salt/grains

roles:
 - nginx
  • 同步数据:salt server3 saltutil.sync_grains
  • 查询自定义项:salt server3 grains.item roles

在这里插入图片描述

(2) 在/etc/salt/minion中定义(minion):vim /etc/salt/minion

在这里插入图片描述
(3) 重启salt-minion,否则数据不会更新:

systemctl  restart salt-minion
  • 测试server2可以正常连接:salt server2 test.ping

在这里插入图片描述
(4) 查询自定义项:salt server2 grains.item roles

在这里插入图片描述

2.3 编写grains模块

(1) 在salt-master端创建_grains目录:mkdir /srv/salt/_grains/

(2) 编辑模块文件(python):vim /srv/salt/_grains/mygrains.py

def my_grain():
    grains = {}
    grains['salt'] = 'stack'
    grains['hello'] = 'world'
    return grains

(3) 同步: salt '*' saltutil.sync_grains

在这里插入图片描述
(4) 测试

salt '*' grains.item hello  ##查询模块中的hello item
salt '*' grains.item salt  ##查询模块中的salt item

在这里插入图片描述

  • 在sale-minion端查看_grains模块已经同步

在这里插入图片描述

在这里插入图片描述

2.4 grains匹配运用

(1) 在target中匹配minion

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

在这里插入图片描述

(2) 在top文件中匹配
在这里插入图片描述

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

在这里插入图片描述

  • 编辑apache的sls文件:vim /srv/salt/apache/init.sls
apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
  file.managed:
    - source: salt://apache/files/index.html
    - name: /var/www/html/index.html
  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

在这里插入图片描述

  • 编辑nginx的sls文件:vim /srv/salt/nginx/init.sls
nginx:
  pkg.installed:
    - pkgs:
      - gcc
      - pcre-devel
      - openssl-devel
  file.managed:
    - source: salt://nginx/files/nginx-1.18.0.tar.gz
    - name: /mnt/nginx-1.18.0.tar.gz
  cmd.run:
    - name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-threads --with-file-aio --with-http_stub_status_module &> /dev/null  && make &> /dev/null  && make install &> /dev/null
    - creates: /usr/local/nginx
/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf
nginx-service:
  user.present:
    - name: nginx
    - shell: /sbin/nologin
    - home: /usr/local/nginx
    - createhome: false
  file.managed:
    - source: salt://nginx/files/nginx.service
    - name: /usr/lib/systemd/system/nginx.service
  service.running:
    - name: nginx
    - enable: true
    - reload: true
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

  • 测试:
salt '*' state.highstate

在这里插入图片描述

在这里插入图片描述

server2成功安装并启动了appache服务

在这里插入图片描述
server2成功安装并启动了nginx服务
在这里插入图片描述
在server3只安装nginx,不启动服务(将安装的sls文件写进init.sls)

cd /srv/salt/nginx
cp init.sls install.sls

在这里插入图片描述

  • 编辑init.sls文件:vim /srv/salt/nginx/init.sls

在这里插入图片描述

  • 编辑init.sls文件:vim /srv/salt/nginx/install.sls

在这里插入图片描述

  • 测试:salt server3 state.sls nginx.install

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值