Saltstack系列4:Saltstack之Grains组件

grains说明

grains是Saltstack最重要的组件之一,grains的作用是手机被控主机的基本信息,这些信息通常都是一些静态类的数据,包括CPU、内核、操作系统、虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可以利用这些信息对不同业务进行个性化定制。

例:(janja模板)

{% if grains['os'] == 'Ubuntu' %}
host: {{ grains['host'] }}
{% elif grains['os'] == 'CentOS' %}
host: {{ grains['fqdn] }}
{% endif %}

 

 

grains常用操作命令

匹配内核版本为2.6.32-358.14.1.el6.x86_64的主机

salt -G 'kernelrelease:2.6.32-358.14.1.el6.x86_64' cmd.run 'uname -a'

获取所有主机的grains项信息

salt '*' grains.ls

 

定义grains数据

定义grains数据的方法有两种,一种为在被控主机定制配置文件:另一种是通过主控端扩展模块API实现。区别是模块更灵活,可以通过Python编程动态定义,而 
配置文件只适合相对固定的键与值。下面分别进行说明:

1、被控端主机定制grains数据

【/etc/salt/minion】

default_include:minion.d/*.conf #自定义grains配置文件路径

grains配置文件:【/etc/salt/minion.d/hostinfo.conf】

grains:
  roles:
    - webserver
    - memcache
  deployment: datacenter4
  cabinet: 13

重启salt-minion使之生效:service salt-minion restart
验证:

salt 'wx' grains.item roles deployment cabinet

结果:

复制代码

wx:
----------
  cabinet:
      13
  deployment:
  datacenter4
  roles:
    - webserver
    - memcache

复制代码

 

2、主控端扩展模块定制grains数据

首先在主控端编写python代码,然后将该python文件同步到被控端主机,最后刷新生效(即编译Python源码文件成字节码pyc)。

在主控端base目录(在/etc/salt/master中配置的file_roots项,默认在/srv/salt)下生成_grains目录执行install -d /srv/salt/_grains开始编写代码,实现获取被控主机系统允许最大打开文件数(ulimit -n)的grains数据

【/srv/salt/_grains/grains_openfile.py】

 

复制代码

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

import os,sys,commands

#定义一个获取最大打开文件数的函数,函数名称没有要求,符合python函数命名规则即可
def Grains_openfile():
    '''
        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_file'] = _open_file #将获取的ulimit -n的结果进行赋值,其中'max_open_file'就是grains项,——open_file就是grains的值
    return grains            

复制代码

 

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

salt 'wx' saltutil.sync_all

结果:文件同步到被控端的cache目录中

/var/cache/salt/minion/extmods/grains/grains_openfile.py
/var/cache/salt/minion/files/base/_grains/grains_openfile.py
#注:/var/cache/salt/minion/extmods/grains/为扩展模块文件最终存放位置,刷新模块后将在同路径下生产字节码pyc;/var/cache/salt/minion/files/base/_grains/为临时存放位置。

刷新模块:

salt 'wx' sys.reload_modules

#生成pyc字节码
/var/cache/salt/minion/extmods/grains/grains_openfile.py
/var/cache/salt/minion/extmods/grains/grains_openfile.pyc
/var/cache/salt/minion/files/base/_grains/grains_openfile.py

验证:

salt 'wx' grains.item max_open_file

结果:

wx:
----------
  max_open_file:
    1024

 

 


参考资料:

根据刘天斯《Python自动化运维技术与最佳实践》整理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是SaltStack常用命令: - salt '*' test.ping - salt-run manage.up - salt '*' state.highstate - salt '*' state.sls <sls_file> - salt-key -L - salt-key -A - salt '*' network.ip_addrs - salt '*' network.interfaces - salt '*' network.traceroute <hostname> - salt '*' network.ping <hostname> ### 回答2: SaltStack 是一个基于Python编写的运维工具,用于配置管理、远程执行命令、软件部署等任务。以下是一些常用的SaltStack命令: 1. salt 'minion_id' test.ping:检测指定minion是否在线,返回True或False。 2. salt 'minion_id' cmd.run 'command':在指定minion上执行命令,并返回输出结果。 3. salt 'minion_id' state.apply 'state_name':应用指定的state,用于执行配置管理任务。state文件定义了目标服务器的配置状态。 4. salt 'minion_id' pkg.install 'package_name':在指定minion上安装软件包。 5. salt 'minion_id' service.start 'service_name':启动指定minion上的服务。 6. salt 'minion_id' grains.get 'grain_name':获取指定minion的指定grain(系统信息)的值。例如,grains.get os 可以获取操作系统类型。 7. salt-key:用于管理SaltStack中minion的key。使用该命令可以接受(accept)、拒绝(reject)或删除(delete)minion的key。 8. salt-run manage.up:列出已连接的minion。 9. salt-run jobs.active:列出正在运行的SaltStack作业。 10. salt-run jobs.list_jobs:列出所有已完成的SaltStack作业。 这些命令只是SaltStack中的一小部分常见命令,SaltStack提供了非常丰富的命令和功能,可以根据具体需求来灵活运用。 ### 回答3: SaltStack 是一个开源的自动化运维工具,常用于配置管理和远程执行任务。下面是一些常用的 SaltStack 命令: 1. salt "*" test.ping:用于测试所有 Salt Minion 是否在线。返回值是一个布尔值,表示 Minion 是否可达。 2. salt "*" grains.items:获取所有 Minion 的 grains(系统信息),包括操作系统、CPU、内存等信息。 3. salt "*" cmd.run "hostname":在所有 Minion 上执行命令,此处是获取主机名。可以替换 `hostname` 为其他任意命令。 4. salt "*" state.apply <state_name>:应用某个状态文件。`<state_name>` 是状态文件的名称,可以是单个文件或者目录。 5. salt "*" pkg.install <package_name>:在所有 Minion 上安装指定的软件包。`<package_name>` 是软件包的名称。 6. salt "*" service.start <service_name>:启动指定的服务。`<service_name>` 是服务的名称。 7. salt "*" file.get <file_path>:获取某个文件的内容。`<file_path>` 是文件的路径。 8. salt "*" file.append <file_path> text=<text>:在某个文件的末尾追加文本。`<file_path>` 是文件的路径,`<text>` 是要追加的文本。 9. salt "*" cmd.script <script_path>:在所有 Minion 上执行指定的脚本。`<script_path>` 是脚本的路径。 10. salt "*" network.interfaces:获取所有 Minion 的网络接口信息。 以上是一些常用的 SaltStack 命令,可以帮助进行系统配置管理和任务自动化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值