六、grains使用以及cmd.run
grains.items主要用来收集minion端的信息,方便进行信息采集,后续的pillar使用,根据硬件信息自动匹配配置文件等,基本用法:
#salt “*” grains.ls #显示所有minion的item
#salt “*” grains.items #显示所有minion的item值
#salt “*” grains.item osshell #显示os的相关信息,如果多个item,用空格分隔
除了salt自带的items可以获取到系统信息之外,我们还可以使用shell命令,我们可以借助salt另一个强大的命令:cmd.run,假如我们需要获取minion端的内存信息
#salt “*” cmd.run “free-m”
如果想要在minions执行脚本程序,可以使用cmd.script命令
#salt “*” cmd.scriptsalt://test.sh
其中salt://test.sh是脚本的存放路径
七、states文件
salt states的核心是sls文件,该文件使用YAML语法定义了一些K/V的数据,sls文件存放路径在master配置文件中定义,默认为/srv/salt,如果目录不存在,则手动创建,在salt中可以通过salt://代替根路径,例如,可以通过salt://top.sls访问/srv/salt/top.sls,在states中top文件也由master配置文件定义,默认为top.sls,该文件为states的入口文件。
一个简单的top.sls文件如下
base:
"*": #匹配所有minion主机
- httpd #定义state.sls的名字
minion: #通过分组名匹配,必须要定义match:nodegroup
- match:nodegroup
- httpd
"os:CentOS": #通过grains模块匹配,必须要定义match:grain
- match:grain
- httpd
接下来我们就可以编写httpd.sls文件了(注意每行的缩进和空格,缩进为2个空格,冒号后面一个空格)
httpd: #ID说明,表示可以被操作的名字
pkg: #包管理
- name: httpd #包的名称
- installed #包的状态(installed:安装;remove:卸载)
service: #服务管理
- name: httpd #服务名称
- running #服务状态
- reload: True #是否允许reload
- require: #依赖关系
- pkg: httpd
- watch: #监测是否发生改变
- file:/etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf: #定义文件
file:
- managed #文件管理
- source: salt://httpd.conf #源文件路径
- user: root #文件属主
- group: root #文件属组
- mode: 644 #文件权限
- backup: minion #更改前备份
强制执行下httpd.sls
[root@master salt]# salt"*" state.sls httpd
state的逻辑关系:
include: 包含某个文件,例如,我新建一个test.sls,就可以继承httpd相关配置而不必重新编写
match: 匹配某个模块 ,比如 之前定义top.sls时候的 match:grain match: nodegroup
require: 依赖某个state,在运行此state前,先运行依赖的state,依赖可以有多个 比如文中的httpd模块内,相关的配置必须要先依赖httpd的安装
watch: 在某个state变化时运行此模块,文中的配置,相关文件变化后,立即执行相应操作
order: 优先级比require和watch低,有order指定的state比没有order指定的优先级高
八、pillar的定义及使用
Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。这里可以看出Pillar的一个特点,Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据(在Salt的设计中,Pillar使用独立的加密session,也是为了保证敏感数据的安全性)。另外还可以在Pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在State中引用等。
默认情况下,master配置文件中的所有数据都添加到pillar中,且对所有minion可用,在master的配置文件中我们需要配置下,如果/srv/pillar目录不存在则手动创建,和state一样,pillar也是需要一个top.sls文件作为一个入口,用来指定对象,配置方式与state一样
编辑top.sls文件
base:
"*":
- test
编辑test.sls文件
test_path: "salt://httpd.conf"
test_user: root
test_group: root
可以在state文件中引用pillar数据
/etc/httpd/conf/httpd.conf:
file:
- managed
- source: {{ pillar['test_path'] }}
- user: {{ pillar['test_user'] }}
- group: {{ pillar['test_group'] }}
我们还可以在pillar中加入判断条件,这里就不多说了,
更多高级用法请参考官网文档中文地址:http://docs.saltstack.cn/zh_CN/latest/
转载于:https://blog.51cto.com/zhouxt/1626809