六、grains使用以及cmd.run

grains.items主要用来收集minion端的信息,方便进行信息采集,后续的pillar使用,根据硬件信息自动匹配配置文件等,基本用法:

#salt “*” grains.ls            #显示所有minionitem

#salt “*” grains.items         #显示所有minionitem

#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,在statestop文件也由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     优先级比requirewatch低,有order指定的state比没有order指定的优先级高

八、pillar的定义及使用

PillarSalt非常重要的一个组件,它用于给特定的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/