文档章节

saltstack入门系列(二)grains和pillar

一点相思怎堪离丶
 一点相思怎堪离丶
发布于 2017/06/27 18:20
字数 2001
阅读 152
收藏 0

点击此处进入---->saltstack入门系列(一) 安装和简单使用

点击此处进入---->saltstack入门系列(三)待续

 

接下来了解的是saltstack的数据系统grains和pillar。

grains:(可以做配置管理)

谷物的意思,它是一个组件,存放在minion端,主要用于minion启动时收集系统静态信息,运行过程中数据不会发生变化,只有再次重启,才会再次进行收集。利用它可以:在客户端自定义信息,然后自动汇报上来,场景应用:客户端某个脚本去定期改某个文件,服务器就能收集这些信息了;也可以从服务器端定义,然后推下去,采集完后,再汇报上来。

常用命令:

#salt 'centos' grains.ls            列出指定对象的所有grains项目。ps:上一章中由于我没有在配置文件里指定id,接下来我将用centos也就是我的客户端主机名代替client,具体情况视个人而定

#salt '*' grains.items              列出所有grains项目以及值,利用python思维来理解,ls只是列出了组的key,items可列出key及value

#salt '*' grains.get ip_interfaces        查看所有minion的ip

#salt '*' saltutil.sync_grains            内存,cpu等信息是相对固定的,所以saltstack对这些值做了cache,可以使用该命令来刷新grains的值

 

1.minion定义信息,master收集:

在Minion端我们可以在/etc/salt/minion配置文件中,查找grains,可以查看或修改到相关注释的示例。为了方便配置管理,我们不一般不会选择在该文件上直接进行修改,而是在default_include的目录下/etc/salt/minion.d目录下单独创建*.conf文件,*代表任意(合法)名字。

在client上自定义grains:         (ip:192.168.58.130  hostname:centos)

vim /etc/salt/minion

           //大概在12行的位置,将default_include: minion.d/*.conf前的#号去掉

#vim /etc/salt/minion.d/test.conf           //名字任取,添加或更改以下信息

grains:
  role:
    - nginx
  env: - test                                       //两种写法

#/etc/init.d/salt-minion restart               //重启minion服务

(其实可以不用重启minion,让更改的配置生效,这需要在master端执行刷新命令,操作如下:salt 'centos' saltutil.sync_grains;还可以touch /etc/salt/grains,将上文中的test.conf改添加到/etc/salt/grains中,这时就可以不用写test.conf中第一行的grains了)

在master上获取grains:             (ip:192.168.58.132  hostname:vmware)

#salt '*' grains.item role env

#salt 'centos' grains.get role

2.master定义信息,minion收集:

(1)通过grains模块来定义;主要有grains.append、grains.setval等方法,如:

#salt 'centos' grains.append env 'test01'

#salt 'centos' grains.setvals "{'role':'nginx01','info':'hello'}"

从上面两图中可以发现,如果/minion.d/*.conf中(默认定义目录)已经存在自定义的items,再通过执行grains.append或grains.setvals去执行时,还是会以/minion.d/*.conf中的为准,并不会覆盖掉原来的信息,事实上,执行这样的操作会在minion端/etc/salt/生成配置文件grains,如下图:

换一句话说,/etc/salt/minion.d/*.conf(或/etc/salt/minion)的优先级大于/etc/salt/grains的优先级。

该处也适用通过分发文件到minion的/etc/salt/grains,不过分发文件和命令执行的区别是,分发文件必须要minion端重启salt-minion服务器后才能生效,而通过grains内置模块来定义则是立即生效的。

(2)在master编写然后推送到minion端;在/srv/salt/创建_grains目录,编写grains文件,需要返回一个key和value方式的字典。如下图做一个简单示例:

执行同步命令后,自定义脚本会上传到minion的/var/cache/salt/minion/extmods/grains目录下.

再在master写一个脚本,实现获取被控主机系统允许最大打开文件数(ulimit -n)的数据#vim /srv/salt/_grains/file.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#上面两行可以不写

import os,sys,commands

#定义一个获取最大打开文件数的函数
def openfiel():
  '''
     return os max open file of grains value
  '''
  grains = {}    #初始化一个字典,变量名一定要用grains,以便saltstack识别
  _open_file = 65535                #初始化一个默认值
  
  try:
      getulimit = commands.getstatusoutput('source /etc/profile;ulimit -n')
  except Exception,e:
      pass

  if getulimit[0] == 0:
      _open_file = int(getulimit[1])
  grains['max_open_fiel'] = _open_file    #将获取的ulimit -n的结果进行赋值
  return grains

最后同步模块到指定被控主机并刷新生效,因为grains比较适合采集静态类的数据,比如硬件、内核信息等,当有动态类的功能需求时,需要进行刷新。同步操作:

#salt 'centos' saltutil.sync_all               或#salt 'centos' saltutil.sync_grains

验证:

 

grains其实在远程执行命令时,很方便。我们可以按照grains的一些指标来操作。

#salt -G ’role:nginx’ cmd.run 'hostname'

#salt -G ‘os:CentOS’ cmd.run 'df -h'     匹配所有系统是Centos的客户端运行命令df -h

grains组件在saltstack中是一个非常重要的组件,我们执行的时候主机的正则匹配,主机端信息的获取等都会用到该组件,不过grains也有自身的局限性,就是主要存储静态、不常变化的数据。

 

--------------------分割线--------------------

pillar:

pillar是一个字典,和grains不一样,是完全在master上定义的,用于给特定的minion定义任何你需要的数据(数据是动态的),产生特定于minions的任意数据的接口,这些数据可以被salt的其他组件如state使用,如定义用户和uid相关的变量,操作系统与软件包相关的变量等。看不懂没关系,往下继续

通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,像一些比较重要的数据(如密码)可以存在pillar里,还可以定义变量等。

查看指定minion的pillar值(默认为空):#salt 'centos' pillar.items

配置自定义pillar:

#vim /etc/salt/master               //修改或增加以下信息

pillar_roots:
  base:
    - /srv/pillar

#mkdir /srv/pillar

#vim /srv/pillar/top.sls                  //配置格式、入口文件top.sls

base:
  'centos':
    - test

#vim /srv/pillar/test.sls

info: Here are some test data!

保存退出后,指定minion的pillar将会被更新:#salt '*' pillar.items

完成pillar配置后接下来介绍简单使用方法。

eg:      操作目标主机:#salt -I 'info:Here are some test data!' test.ping

是不是发现pillargrains很像,比如上面的示范中,我们也可以用grains自定义的信息来做:

#salt -G 'env:test' test.ping

先来看下他们的区别

    1、grains是静态数据;pillar则是动态数据

    2、grains是存储在minion本地,而pillar存储在master本地

    3、minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改

    4、grains是在minion启动时收集,可以用saltutil.sync_grains刷新;pillar是在master端定义,指定给对应的minion,可以使用saltutil.refresh_pillar刷新

如果你想定义的属性值是经常变化的,那请采用pillar,如果是很固定、不易变的那请用grains。

实际上,pillar是可以引用grains的,比如我们写一个apache.sls的jinja2模板

#vim /srv/pillar/apache.sls

{% if grains['os'] == 'CentOS' %}

apache: httpd

{% elif grains['os'] == 'Debian' %}

apache: apache2

{% endif %}

上面的意思就是:

如果机器是 centOS ,那么看到的 Apache 名称就叫做 httpd

如果机器是 Debian ,那么看到的 Apache 名称就叫做 Apache2

然后在top.sls中添加apache即可。

 

接下来用pillar做一些更复杂的数据

(参考文献:http://blog.csdn.net/cnweike/article/details/12746399)

我们可以在state、模板文件中引用,模板格式为:{{ pillar变量 }}

示例1:创建一个带有UID的用户:

 

当更改完pillar配置文件后,可以通过刷新pillar配置来获取新的pillar状态:

#salt '*' saltutil.refresh_pillar

验证:#salt '*' pillar.item test

pillar同样可以用来作为salt的匹配对象

#salt -l 'conf:/etc/123.conf' test.ping

默认情况下,master配置文件中的内容是被载入到每个minion的pillar中的。这使得master的配置文件可以作为所有minions的全局配置。

未完待续

© 著作权归作者所有

一点相思怎堪离丶
粉丝 5
博文 24
码字总数 14747
作品 0
成都
运维
私信 提问
运维自动化之Saltstack( 三)Saltstack的数据信息采集者Grains和Pillar

Saltstack的数据信息采集者Grains和Pillar 一、SaltStack 的配置文件格式及写法 在谈到grains和pillar之前,要和大家先谈一下SaltStack的配置文件写法 因为下面谈到的自定义grains和如何配置...

xiguatian
2016/09/02
0
0
自动化运维工具之Saltstack

一、简介 what is Saltstack? Saltstack是一个具备puppet与func功能为一身的集中化管理平台,saltstack基于python实现,功能十分强大,适合大规模批量管理服务器,并且它比 Puppet 更容易配置...

SoulMio
2017/11/22
0
0
saltstack state模块-状态管理

一、说明 本文基于前两篇的salstack的安装部署和使用的基础上,又一个常用的功能, State模块是saltstack核心的功能,状态管理包括:Package,File,Network, Service, User等常用功能,其...

dyc2005
2017/09/29
0
0
saltstack的安装与常见模块的使用

Salt 是一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出...

blackfoxya
2018/07/02
786
0
saltstack第二波《数据系统》

第2章 saltstack数据系统 2.1 Grains 2.1.1 什么是Grains? Grains是saltstack的一个组件,它存放着minion启动时收集到的系统底层的详细信息,每次minion启动时,就会进行Grains的采集并保存...

陈发哥007
2016/08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Handler消息传递机制分析

Handler的用途和用法 写过Android程序的人大概都会遇到ANR(Application Not Responding)。如果程序在一段时间内没有响应,系统就会弹出一个对话框,让用户选择继续等待还是强制关闭应用。为...

tommwq
今天
5
0
JS前端MD5加密

Bootstrap官网获得md5 js地址:https://www.bootcdn.cn/blueimp-md5/ <!--MD5加密--><script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script> 使用方法: md5(pwd)......

被毒打的程序猿_先瑞
今天
8
0
BigDecimal 去后面无用的0的方法

BigDecimal a=new BigDecimal("0.1000"); System.out.println(a.stripTrailingZeros().toPlainString());...

xiaodong16
今天
7
0
JAVA--高级基础开发

[集合版双色球] 十二、双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码...

李文杰-yaya
昨天
27
0
聊聊rocketmq broker的CONSUMER_SEND_MSG_BACK

序 本文主要研究一下rocketmq broker的CONSUMER_SEND_MSG_BACK CONSUMER_SEND_MSG_BACK rocketmq/common/src/main/java/org/apache/rocketmq/common/protocol/RequestCode.java public class......

go4it
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部