grains与pillar
grains是记录minion的一些静态信息的组件,是minion第一次启动的时候采集的静态数据
pillar是数据管理中心,主要是存储和定义配置管理中的一些数据(比较灵活)。
定义的属性值是经常变化的,那请采用pillar,如果是很固定、不易变的那请用grains。
1、grains存储的是静态、不常变化的内容,pillar则相反
2、grains是存储在minion本地,而pillar存储在master本地
3、minion有权限操作自己的grains值,但minion只能查看自己的pillar值,无权修改。
4、pillar中定义的数据与不同业务特性的被控主机相关联,这样不同被控主机只能看到自己匹配的数据,安全性较高,使用与一些比较敏感的数据
++++++++++++++++++++++++++++++++++++++++++++++++++++++
grains
①、被控端定义的grains可以放在/etc/salt/grains中,重启minion即生效
或者修改/etc/salt/minion文件,打开参数default_include:minion.d/*.conf
定义的内容放在*.conf
②、主动端定义grains
根据/etc/salt/master配置file_roots项,base(/data/salt)的配置下生成_grains
eg:
salt '*' grains.items
salt '*' grains.item fqdn
salt '*' grains.get fqdn
salt '*' sys.doc pillar # 查看与pillar有关的帮助信息 salt '*' pillar.items # 获取所有pillar items值 salt '*' pillar.data # 等价于pillar.items salt '*' saltutil.refresh_pillar # 刷新pillar值 salt '*' saltutil.sync_all # 刷新pillar值,与refresh_pillar操作类似,但范围更大 salt '*' sys.list_functions pillar # 列出所有的pillar相关函数方法 salt '*' pillar.get xxx # 获取某项的值,类似于python字典的get函数 salt '*' pillar.raw # 内存中获取 salt '*' state.highstate pillar={'test': 'abc'} # 在命令设置pillar 数据
vim openfile.py
import os
import commands
import sys
def Grains_openfile():
grains = {}
_open_file=65535
try:
getulimit = commands.getstatusoutput('source /etc/ptofile;ulimit -n')
except Exception,e:
pass
if getulimit[0] == 0:
_open_file = int(getulimit[1])
grains['max_open_file_liu'] = _open_file
return grains
salt 'ios_001' saltutil.sync_all //同步到被控制端
salt 'ios_001' sys.reload_modules //使之生效
----------------------------------------------------
pillar
eg:
cat /data/pillar/top.sls
base:
'ios_001':
- data
cat /data/pillar/data.sls
appname: website
flow:
macxonn:2222
maxmem:333333
salt '*' pillar.data para1 para2 //查看对应参数的值
salt '*' saltutil.refresh_pillar //使之生效
在top.sls中引用二级配置有两种方式:
①、直接引用如上例子
②、创建data目录,在引用init.sls文件
为了规范,建议采用第二种
/data/pill/data/init.sls
====================================================
state
state的入口文件与pillar一样,文件名都是top.sls,但是state的sls文件必须是存放在saltstack base定义的目录下 eg: /data/salt/top.sls。
state描述配置.sls支持jinjia模板、grains及pillar引用等。
通过salt ‘*’ state.hightstate [test=True] 执行生效
salt ‘*’ state.sls nginx [test=True] 单独执行某一个
http://blog.itpub.net/30129545/viewspace-1458706/
http://blog.csdn.net/wjacketcn/article/details/50853604
EG:
base: '*': #通过正则去匹配所有minion - nginx #这里都是我自己写的state.sls模块名 这里可以无视 后面会提到 my_app: #通过分组名去进行匹配 必须要定义match:nodegroup - match: nodegroup - nginx 'os:Redhat': #通过grains模块去匹配,必须要定义match:grain - match: grain - nginx
nginx: pkg: #定义使用(pkg state module) - installed #安装nginx(yum安装) service.running: #保持服务是启动状态 - enable: True - reload: True - require: - file: /etc/init.d/nginx - watch: #检测下面两个配置文件,有变动,立马执行上述/etc/init.d/nginx 命令reload操作 - file: /etc/nginx/nginx.conf - file: /etc/nginx/fastcgi.conf - pkg: nginx
match: 配模某个模块
require: 依赖某个state,在运行此state前,先运行依赖的state,依赖可以有多个
watch: 在某个state变化时运行此模块,文中的配置,相关文件变化后,立即执行相应操作
order: 优先级比require和watch低,有order指定的state比没有order指定的优先级高,假如一个state模块内安装多个服务,或者其他依赖关系,可以使用
nginx: pkg.installed: - order:1
====================================================
salt-minion -l debug 客户端进行调试
salt-run manage.status 查看所有minion状态
salt-run manage.up 查看所有在线的minion
salt-run manage.down 查看所有不在线的minion
salt-run manage.down removekeys=true 删除所有不在线的minion
salt-key -L 查看所有minion_key
salt-key -d 删除指定的minion-key
salt-key -a 添加指定的minion-key
salt-key -A 添加所有的minion-key
salt-key -D 删除所有的minion-key
salt-cp 'ios_001' test1 /tmp/ ==>只能是文件
salt-ssh
默认指定文件路径/etc/salt/roster,其他文件文件使用-c参数
hudong:
host: 192.168.22.23
user: root
port: 22
passwd: 12345678
salt-ssh '*' -r 'uptime' -i
-r 执行shell
-i 第一次连接机器时,添加到knows host
-------------------------
salt '*' sys.list_functions grains 查看grains支持的功能
salt '*' sys.doc grains 查看grains的具体用法
salt '*' sys.list_modules 查看所有modules列表
salt ‘*’ grains.items
salt '*' grains.tien os
salt '*' grains.ls
states是saltstack中的配置语言
salt '*' sys.list_state_modules 查看minion支持的所有states列表
salt '*' sys.list_state_functions file 查看file.states的所有功能
salt '*' sys.state_doc file
return组件,是saltstatck系统对执行minion返回后的数据进行存储或者返回给其他程序,支持多种存储方式。
https://docs.saltstack.com/en/latest/ref/returners/index.html
salt '*' sys.list_returners
salt '*' cmd.run 'hostname' --return redis //就把返回信息存储到redis中了
##################
vim /etc/salt/minion
redis.db: '0' #redis数据库
redis.host: 'vps' #redis 主机(ip or 域名)
redis.port: 6379 #redis port
------------------------------------
确保redis Python Client文件已安装
#################
job管理
salt-run -d|grep jobs (还不支持kill某个job)
jobs.active 查看当前运行的jobs
eg: salt-run jobs.active
jobs.list_job 指定jid查看jobs详细信息
jobs.list_jobs 查看所有jobs信息
jobs.lookup_jid 指定jid查询jobs结果
jobs.print_job 指定jid查询jobs详细信息
使用saltstatck Module来管理job
salt '*' sys.doc saltutil|grep job
saltutil.find_cached_job 查询job cache 信息
saltutil.find_job 查询job信息
saltutil.kill_job 杀掉job
saltutil.signal_job 发送指定信号
eg :salt '*' saltutil.signal_job jid 15 #15是信号
saltutil.term_job 删掉job
Event和reactor
event是saltstatck里面的对每个事件的一个记录,它相比job更加底层,event能记录更加详细的事件,如minion服务启动后请求master签发证书或者校验的过程,都能通过event事件来看整个过程。
salt-run state.event pretty=true 查看event事件
Reactor是基于event的每个事件来做相应的操作,是一直监听着event,然后触发states事件。
mine组件
salt '*' sys.doc mine
是saltstack收集minion数据存储到master的一个组件,功能与grains相似。
主要应用场景是配合前端负载均衡动态获取mine汇报信息,来动态生成配置文件。
支持两种方式:
1、通过在minion配置文件中定义
vim /etc/salt/minion
mine_functions:
network.ip_address:
interface: eth0
2、通过模板的方式去下发mine采集任务。
salt '*' mine.send network.ip_address interface=docker0
salt '*' mine.get '*' network.ip_address
peer组件
peer是minion向master发布任务的一个组件,使用peer可以直接在minion上向master发布一些任务,和我们在master上执行一样的效果。默认peer是没有配置的,配置只需修改master文件即可。
eg:
peer:
minion:
- test.ping
peer_run:
minion:
- manage.up
在minion上测试
salt-call publish.publish 'minion' test.ping
local:
----------
minion:
True
API调用
import salt.client
client = salt.client.LocalClient()
ret = client.cmd('hosts','test.ping',['para'])
print ret
eg:
cmd(self, tgt, fun, arg=(), timeout=None, expr_form='glob', ret='', jid='', kwarg=None, **kwargs)
client.cmd('*', 'test.arg', ['arg1', 'arg2'], kwarg={'foo': 'bar'})
client.cmd('ios_00[234]','cp.get_file',['salt://path/to/file','/minion/dest'])