SaltStack Grains 详解

SaltStack Grains 详解简介 Grains 是 SaltStack 的重要组件之一 主要记录 minion 的静态信息 比如 CPU 内存 磁盘 网络信息等 Grains 信息是 minion 启动时汇报给 Master 的 刷新 grains 方法 1 重启 minion 2 Master 强制刷新 salt saltutil sync grainsGrains 相关方法 Grains

简介

  Grains 是SaltStack 的重要组件之一。主要记录minion的静态信息,比如CPU,内存,磁盘,网络信息等。Grains信息是minion启动时汇报给Master的。

刷新grains方法:
  (1)重启minion
  (2)Master强制刷新: salt ‘*’ saltutil.sync_grains




 

Grains 相关方法

SaltStack Grains 详解SaltStack Grains 详解

Grains: - grains.append # 向grains中添加key/value, 不存在则创建,存在则追加,被追加的key将有两个值,salt '*' grains.append key val. 特别注意:append 操作要时 key必须是个列表 - grains.delkey # 删除指定的grains key,value也会一起删除。salt '*' grains.delkey key - grains.delval # 删除指定的grains key 的 value值,并不会删除key,主要注意删除value后会将value变成None. salt '*' grains.delval key - grains.equals # 判断key/value 是否匹配,匹配返回True,反之则为False. salt '*' grains.equals key value - grains.fetch # 获取指定key的value值,如果不存在则返回空字符串,和get类似。 salt "*" grains.fetch key - grains.filter_by # 过滤查找 - grains.get # 获取, 和fetch类似 - grains.get_or_set_hash # salt '*' grains.get_or_set_hash 'django:SECRET_KEY' 50 - grains.has_value # salt '*' grains.has_value pkg:apache - grains.item # 获取指定grains item信息(也可以获取多个,多个用空格分隔),例如: grains.item wan, 获取wan的信息 [root@iz8vb7vqedcq5amxidjpaiz ~]# salt '*' grains.item wan  minion: ---------- wan: 41.2.2.2 - grains.items # 获取minion的所有grains item信息 - grains.ls # 获取grains的所有item key值  - grains.remove # 和append 对应,移除grains key 的value 列表中的一个。salt '*' grains.remove key val - grains.set # 设置key 为任意值,value是嵌套模式的。 # salt '*' grains.set 'apps:myApp:port' 2209  # salt '*' grains.set 'apps:myApp' '{port: 2209}' - grains.setval # 设置key . salt '*' grains.setval key val  # salt '*' grains.setval key "{'sub-key': 'val', 'sub-key2': 'val2'}" [root@iz8vb7vqedcq5amxidjpaiz ~]# salt '*' grains.setval key11 "{'sub-key': 'val', 'sub-key2': 'val2'}"  minion: ---------- key11: ---------- sub-key: val sub-key2: val2 [root@iz8vb7vqedcq5amxidjpaiz ~]# salt '*' grains.item key11:sub-key  minion: ---------- key11:sub-key: val [root@iz8vb7vqedcq5amxidjpaiz ~]# salt '*' grains.item key11:sub-key2  minion: ---------- key11:sub-key2: val2 - grains.setvals # 设置多个key/value,salt '*' grains.setvals "{'key1': 'val1', 'key2': 'val2'}" [root@iz8vb7vqedcq5amxidjpaiz ~]# salt '*' grains.setvals "{'key1': 'val1', 'key2': 'val2'}"  minion: ---------- key1: val1 key2: val2

Grains 方法说明

 

系统默认Grains 内容

SaltStack Grains 详解SaltStack Grains 详解

[root@yw_home ~]# salt 192.168.0.100 grains.items 192.168.0.100: biosreleasedate: 03/11/2013 biosversion: 1.5.2 cpu_flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid cpu_model: Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz cpuarch: x86_64 defaultencoding: UTF8 defaultlanguage: en_US domain: localdomain external_ip: 192.168.0.100 fqdn: localhost.localdomain fqdn_ip4: 127.0.0.1 fqdn_ip6: ::1 gpus: { 
      'model': 'G200eR2', 'vendor': 'unknown'} host: localhost hwaddr_interfaces: { 
      'lo': '00:00:00:00:00:00', 'em1': '保密隐去', 'em2': '保密隐去'} id: 192.168.0.100 ip_interfaces: { 
      'lo': ['127.0.0.1'], 'em1': ['192.168.0.100'], 'em2': []} ipv4: 127.0.0.1 192.168.0.100 ipv6: ::1 fe80::92b1:1cff:fe50:d4ac kernel: Linux kernelrelease: 2.6.32-431.el6.x86_64 localhost: 192.168.0.100 manufacturer: Dell Inc. master: 192.168.0.100 mem_total: 64377 nodename: 192.168.0.100 num_cpus: 24 num_gpus: 1 os: CentOS os_family: RedHat osarch: x86_64 oscodename: Final osfinger: CentOS-6 osfullname: CentOS osmajorrelease: 6 5 osrelease: 6.5 path: /sbin:/usr/sbin:/bin:/usr/bin productname: PowerEdge R420 ps: ps -efH pythonpath: /usr/bin /usr/lib64/python26.zip /usr/lib64/python2.6 /usr/lib64/python2.6/plat-linux2 /usr/lib64/python2.6/lib-tk /usr/lib64/python2.6/lib-old /usr/lib64/python2.6/lib-dynload /usr/lib64/python2.6/site-packages /usr/lib64/python2.6/site-packages/gtk-2.0 /usr/lib/python2.6/site-packages /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info pythonversion: 2.6.6.final.0 saltpath: /usr/lib/python2.6/site-packages/salt saltversion: 2014.1.0 saltversioninfo: 2014 1 0 serialnumber: 保密隐去 server_id: 保密隐去 shell: /bin/sh virtual: physical

默认grains内容

 

自定义Grains

  当我们需求更多,默认grains不能满足时,可以自定义grains.

自定义Grains的方式

  (1)通过minion配置文件定义, 优先级1
  (2)通过Master端对Grains定义,优先级3
  (3)通过Master端python脚本定义, 优先级2




 

自定义grains优先级:

  minion配置文件定义 > master端自定义grains脚本 > master端grains模块定义。

特别注意:

  在 /src/salt/_grains目录下的自定义脚本,在执行完成后,建议移到一个Bak目录,确保_grains中没有残留文件,并在执行一次salt’*’saltutil.sync_grains操作。

使minion主机上自定义模块目录是干净的,这样做的好处是可以避免和另外两个文件有配置冲突,也避免脚本之间有重复的名字定义,造成取值结果错误。

 

(1)minion配置文件定义

  在minion端,grains 默认的配置文件路径写在minion文件中:default_include: minion.d/*.conf , 需要自己创建 *.conf 这个文件。并在文件中按照YAML格式编写grains配置文件。

需要重启Minion后 Master才能获取最新的grains信息(或者Master主动去刷新)。

# cat grains.conf # 特别注意 :和 - 后面需要接一个空格,段落开头是2个空格间距 grains: roles: - webserver - memcache deployment: datacenter4 cabinet: 13 cab_u: 14-15 serverid: 1001 # Master 查看grains信息 [root@saltmaster salt]# salt 'salt-min*' grains.item serverid salt-minion-1: ---------- serverid: 1001

 

(2)Master端对Grains定义

  通过Master 直接给minion 设定Grains数据,而且不需要重启minion,即可生效。通过Master设定的Grains数据保存在minion端的/etc/salt/grains 文件中。格式依旧遵循YAML。

# Master 向 Minion 添加一个name变量,内容为node1 [root@saltmaster salt]# salt 'salt-min*' grains.append name 'node1' salt-minion-1: ---------- name: - node1 # 在次向name变量添加内容时,并不会覆盖,而是追加,name将有2个值 [root@saltmaster salt]# salt 'salt-min*' grains.append name 'node2' salt-minion-1: ---------- name: - node1 - node2 # Master 向 Minion 添加多个数据,通过grains.setvals 内容则是一个字典的形式 [root@saltmaster salt]# salt 'salt-min*' grains.setvals "{'serverid':'1002','other':'hi'}"  salt-minion-1: ---------- other: hi serverid: 1002 # Master 获取指定Minion 中 grains数据值, grains.item 直接加变量名(一个或多个皆可) [root@saltmaster salt]# salt 'salt-min*' grains.item name serverid salt-minion-1: ---------- name: - node1 - node2 serverid: 1001 # Master 直接获取 Minion 的Grains变量内容 [root@saltmaster salt]# salt 'salt-min*' grains.get name salt-minion-1: - node1 - node2

 

(3)Master端python脚本定义

  默认自定义脚本需要放在 Master 的 /srv/salt/_grains 目录下, 这个目录需要自己创建。同步到Minion的脚本会被放在 minion 的 /var/cache/salt/minion/extmods/grains/ 。

# 自定义grains python脚本格式,类似于创建一个grains空字典并添加一对key/value: def 自定义函数名(): grains = {} grains['需要添加的grain item 名字'] = 命令行获取方法 return grains # 获取系统时间的示例 [root@salt-minion-1 salt]# cat /var/cache/salt/minion/extmods/grains/get_time.py #!/usr/bin/python env # coding=utf-8 from datetime import datetime def get_server_time(): grains = {} grains['server_time'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') return grains # 使用 sync_grains 命令同步脚本到Minion主机上,并通过grains.item 命令获取相关信息即可。 [root@saltmaster salt]# salt "*" saltutil.sync_grains saltmaster: - grains.get_time salt-minion-1: - grains.get_time [root@saltmaster salt]# salt '*' grains.item server_time salt-minion-1: ---------- server_time: 2017-06-08 16:56:55 saltmaster: ---------- server_time: 2017-06-08 16:56:54 # Minion 存放 Master 同步来的脚本目录 [root@salt-minion-1 salt]# ll /var/cache/salt/minion/extmods/grains/ total 8 -rw-------. 1 root root 197 Jun 8 16:56 get_time.py -rw-------. 1 root root 443 Jun 8 16:56 get_time.pyc

 

转载于:https://www.cnblogs.com/wang-yc/p/8006542.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214882.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:13
下一篇 2026年3月18日 下午3:13


相关推荐

  • html css制作404页面,CSS3绘制404页面

    html css制作404页面,CSS3绘制404页面标题有点噱了…最近在做一个交通有关的项目,想做一个类似标志牌的404,所以就有了这个.只用的CSS3中的旋转,效果如下上代码:Error.circle{width:200px;height:200px;border-radius:200px;border:15pxsolid#B22727;}.circle>div{color:#B22727;font:bol…

    2022年7月27日
    9
  • MNIST 手写数字识别(一)

    MNIST 手写数字识别(一)MNIST 手写数字识别模型建立与优化本篇的主要内容有 TensorFlow 处理 MNIST 数据集的基本操作建立一个基础的识别模型介绍 SoftmaxSoftm 回归以及交叉熵等 MNIST 是一个很有名的手写数字识别数据集 基本可以算是 HelloWorld 级别的了吧 我们要了解的情况是 对于每张图片 存储的方式是一个 28 28 的矩阵 但是我们在导入数据进

    2026年3月17日
    2
  • ubuntu20.04主题美化_ubuntu优化工具

    ubuntu20.04主题美化_ubuntu优化工具用了这么长时间ubuntu了,也该让自己的老婆漂亮点了。对吧。 于是搜之,找到资料记录一下: 资料链接:http://www.ubuntuhome.com/ubuntu-10-04-install-themes.html 主要步骤:添加ppa源,然后下载好看的主题,具体见资料链接。 记录一下添加源:首先打开终端并依次输入:sudoadd-apt-r…

    2026年2月26日
    3
  • React 高阶组件示例

    React 高阶组件示例react 中组件经常会重复使用 所以我们可以封装组件进行多功能的复用 常用的组件复用模式有 renderprops 模式和高阶组件模式高阶组件使用步骤 创建一个以 with 开头函数 目前我们约定 with 开头的组件为高阶组件 指定一个函数参数 首字母大写 作为渲染组件的组件名函数内部创建一个类组件 用来提供用于复用的逻辑代码并返回在高阶组件内渲染参数组件 将状态通过 props 传递给参数组件调用高阶组件 传入想要增强的组件 通过返回值拿到新组建 并渲染到页面中注意 react 组件默认用组件名称为

    2026年3月18日
    2
  • Ping test

    Ping test

    2021年8月8日
    82
  • Gradle build.gradle配置

    Gradle build.gradle配置Gradlebuild gradle 配置每个构建脚本 build gradle 都有一个默认的 Project 的实例 脚本中所有的操作都在 project 实例的作用域 1 项目信息项目信息指项目的坐标 groupversion 为 project 的方法 项目名称 name 在 settings gradle 中 group com kepus version 1

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号