【2】Saltstack handbook:Grains and Pillar

写在前面的话

上一节谈及了 Saltstack 的安装和初始化配置,本节将谈谈 Saltstack 中两个重要的东西,Grains 和 Pillar。

数据系统 Grains 入门

Grains 是静态数据,其数据来源于 Minion 启动的时候收集的有关客户端本地的相关信息。

包括操作系统,内核,CPU,内存,硬盘,设备型号等等。这就意味着我们可以使用 Saltstack 做资产管理。

这些静态数据除非是  Minion 重启或者 Master 端主动同步更新,否则不会改变。

1. 查看 grains 默认支持的 Key:

salt ‘saltstack-node-01‘ grains.ls

结果如下:

我们可以看到超级多的 Key。我这里只截图了一小部分。grains.ls 这其实就是 python 里面引用 grains 模块中的 ls 方法。

2. 查看所有 Key 的值:

salt ‘saltstack-node-01‘ grains.items

结果如图:

返回的结果其实就是 YAML 格式,后面会单独的提到 YAML 语法特点。这里我们只需要知道其实就是 K/V 结构就行。

3. 查看单独某个 Key 的值:

salt ‘saltstack-node-01‘ grains.item os

结果如图:

这里区别查看所有,item 采用单数的形式,如果该 Key 不存在或者没值,那么就不会有下面绿色部分的显示。

4. 此时,我们就可以根据这里的 KV 来就行选择特定的机器,类似 K8S 中的标签选择器(Label Selector):

salt -G ‘os:CentOS‘ cmd.run ‘uptime‘

结果如图:

注意,如果我们用 KV 选择需要使用 -G 参数。且这里的冒号后面没空格。

5. 当然,默认的 grains 可能无法满足我们的需求,我们可以自定义,一共有两种方法:

方法 1:在 /etc/salt/minion 配置文件的 129 行 有关于 grains 的配置(不同版本可能不一样)

可以添加一下配置进行测试:

grains:
  roles: app-server

注意 roles 前面空格 2 个,roles 后面 : 后面空格 1 个,这是 YAML 语法要求。

然后我们重启 minion 测试一下:

systemctl restart salt-minion

在 Master 查看:

salt ‘*‘ grains.item roles

结果如图:

可以发现刚刚添加的 node3 节点已经能够看到我们新添加的 KV 配置了。

方法 2:通过方法 1 我们发现,如果都写到 minion 配置文件,不便于我们管理,所有我们可以抽离出来:

我们可以新建 /etc/salt/grains 文件,该文件能够自动被 salt 识别,直接在内部写 KV:

server_env: product
server_name: mall-server

注意冒号后面有个空格。我们也可以不重启 minion,直接在 Master 端同步,然后再度查看:

# 不重启直接同步
salt ‘*‘ saltutil.sync_grains

# 查看多个
salt ‘*‘ grains.item server_env server_name 

结果如下:

6. 或者某个 Key 的值我们还可以使用如下方法:

salt ‘*‘ grains.get os

对比 grains.item 查看结果:

我们发现使用 item 相对于使用 get 多显示了 Key

7. 自己用 Python 开发一个 grains: 方法就是写个脚本,返回一个字典即可。

首先我们需要修改 master 的配置文件:/etc/salt/master 在当前版本的 658 行有关于 file_roots 的配置,我们把配置放开。

file_roots:
  base:
    - /srv/salt

该目录同时也用于我们之后写 YAML 文件使用。当然这个目录不存在,还需要我们在 Master 节点手动建立。

# 重启 Master
systemctl restart salt-master

# 创建目录
mkdir /srv/salt

我们存放 Python 脚本的目录为:_grains

cd /srv/salt/ && mkdir _grains

我们在下面新建一个获取时间的 Python 脚本:get_time.py

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import time

def get_time():
    grains = {}
    grains[‘year‘] = time.localtime().tm_year
    grains[‘month‘] = time.localtime().tm_mon
    grains[‘day‘] = time.localtime().tm_mday
    return grains

然后同步到所有 Minion 节点:

salt ‘*‘ saltutil.sync_grains

结果如图:

我们可以查看同步之后的脚本在 Minion 节点放到了什么位置:

tree /var/cache/salt/

结果如图:

我们需要知道的是 /var/cache/salt 目录相当重要,从 Master 端同步的都会放到该目录下,其中红色部分就是能够执行的代码。

此时我们可以直接查看刚刚我们定义的那些 Key:

salt ‘*‘ grains.item year

结果如图:

如果这过程中出现问题,我们都可以查看日志:/var/log/salt/minion

当然,在我们定义 grains 的时候,可能会和系统的名称出现一样的情况,这就牵扯到一个优先级:

系统自带 > grains 文件中 > minion 中写的 > 自己写的

数据系统 Pillar 入门

Pillar 相比于 Grains,首先 Pillar 是动态的数据。其次 Pillar 定义在 Master 上面,只有特定的节点能看到,所以安全。

原文地址:https://www.cnblogs.com/Dy1an/p/11105991.html

时间: 2024-10-09 11:31:43

【2】Saltstack handbook:Grains and Pillar的相关文章

【Linux】文件查找:find

Linux下有多种查找文件指令:find.whereis.which和locate. ● which:查看可执行文件的位置 ● whereis:查看文件的位置 ● locate:配合数据库查看文件 ● find:实际搜寻硬盘查询 其中find是最常用和最强大的查找命令.它能做到实时查找,精确查找,但速度慢.下面主要对find指令相关用法进行详细介绍. ●●●find指令: [格式]find  [指定查找目录]  [查找规则]  [查找完后执行的action] 默认路径为当前目录:默认表达式为 -

【学术报告】【2015-05-08】Big Data:A Practitioner's Perspective

应本科母校数计学院院长陈明玉老师的邀请,下周五(2015年5月8日),将回泉州师范学院作一个学术报告,对大数据相关的技术.应用.八卦作一个相对全面和完整的介绍. 希望感兴趣的老师和同学们参加.以下是相关poster. [学术报告][2015-05-08]Big Data:A Practitioner's Perspective

【C#】编程点滴:关于Static的思考

在ADO.NET数据访问层我们通常会将数据库连接字符串写成这样private static readonly string _conStr = "server=.;database=Product;uid=sa;pwd=sa";.这样的情况很多,比如单例模式.可能是出于约定俗成吧,也可能是习惯了"海淘"人家的,很多东西也没深入去考虑为什么要这样写(说我自己).或许是看人家都这么写.那么为什么要用static来修饰?为什么还要加上readonly?又为什么说静态的是线

【转】 HTML解析:基于XPath的C#类库HtmlAgiliytyPack

[转] HTML解析:基于XPath的C#类库HtmlAgiliytyPack 最近处于毕业设计开始阶段,前期工作需要去国外的一些专业数据库网站比对一些所需TF家族信息,为了快捷方便,想到用程序去帮助实现.前期实现了一系列的尝试,使用C#的的网络编程类库,获取查询结果,但是为了分析其中的结果并进行比对,我最开始尝试了两天之久的正则表达式,最后发现在解析这样的HTML文档的时候,花费时间太多,因此开始改变策略,最后得知MSHTML和HAP这两个.NET解析html的类库,出于对HAP这个轻量级类库

<28>【了解】10-枚举类型介绍及定义+【掌握】11-枚举变量变量定义和使用+【掌握】13-typedef定义新的类型+【掌握】15-宏的概念及无参宏定义方法+【掌握】16-有参宏定义和使用方法+【掌握】17-应用:使用有参宏求最大值+【掌握】18-typedef和#define的区别

[了解]10-枚举类型介绍及定义 枚举类型: C语言提供了一个种类型,这种类型的变量的取值被限定在一定的范围之内了 枚举类型的定义: enum 枚举类型名{ 枚举值1,枚举值2,.... }; 举例: 定义一个变量,保存一周的第几天 enum weekday{ zhouyi,zhouer,zhousan,zhousi,zhouwu ,zhouliu,zhouri }; 定义iPhone手机的颜色 关于枚举类型元素的命名习惯 enum iColor{kIcolorWhite,kIcolorBlac

#查找算法#【1】简单查找:顺序、折半查找

•顺序查找 从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号:若将线性表中所有记录都比较完,仍未找到关键字与给定值相等的记录,则表示查找失败,返回一个失败值. •折半查找 又称为二分查找.这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字由小到大有序排列. 顺序查找比较简单,依次用数组中的每个元素和要查找的元素进行对比即可.不再贴代码说明 折半查找是一种递归过程,每折半一次,可使查找范围缩小一半,当查

【图像算法】图像特征:GLCM灰度共生矩阵,纹理特征

[图像算法]图像特征:GLCM SkySeraph Aug 27th 2011  HQU Email:[email protected]    QQ:452728574 Latest Modified Date:Aug 27th 2011 HQU ------------------------------------------------------------------------------------------------------------------------------

【Mysql】—— 报错:Can't call commit when autocommit=true

java.sql.SQLException: Can't call commit when autocommit=true at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:934) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:931) at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.jav

【转】Markus Persson:Minecraft 游戏背后的奇才

转自酷勤网 Markus Persson是沙盒游戏Minecraft的开发者,在游戏中以Notch的名字为众多玩家所知,是游戏界绝对的巨星.美国<滚石>杂志的专栏作家David Peisner日前对Persson进行了专访,带我们一起走近这位奇才的游戏人生. Persson 有些秃顶,体型庞大,留着棕色蓬乱的胡子.他待人和善,但是经常看起来有所保留,笑起来的时候几乎像抽过去了一样. 他在 2009 年独立开发了 Minecraft,后来与 Jakob Porser 联合成立了 Mojang,这