Salt使用笔记

     2014年04月15日       磊磊syh       非专业笔记->Python       salt 

实时管理

cmd.run的方式

执行命令

sudo salt '*' cmd.run 'uptime'

系统模块

系统自建的模块 参考salt文档 http://docs.saltstack.com/en/latest/ref/modules/all/index.html
例如查看minion的磁盘使用率,使用disk模块的usage函数

sudo salt '*' disk.usage

使用sys.doc模块查询salt模块的相关使用方法。sys.doc 相当于系统的man,可以查询salt模块的在线doc

sudo salt '*'  sys.doc disk

自定义模块

自定义模块的目录/srv/salt/_modules/,自定义模块路径一般为/srv/salt/_modules/custom.py 。 示例:

$cat /srv/salt/_modules/custom.py
def test():
  return 'i am test'

手动同步模块到minion

sudo salt '*' saltutil.sync_modules

执行模块

sudo salt '*' custom.test

Targetting

简单方式的匹配:Shell Style & Perl 正则匹配

模式 含义
* 匹配所有minion
web1 匹配web1
web* 匹配web开头的minion
web? 匹配web开头4个字符ID的minion
web[1-5] 匹配web1到web5
web[1,3] 匹配web1和web3
web1-(prod|devel) 匹配web1-prod和web1-devel

列表匹配

sudo salt -L 'web1,web2' test.ping

Grains匹配

sudo salt -G 'virtual:physical'  test.ping  #匹配所有物理机
sudo salt -G 'virtual:phy*'  test.ping  #grains匹配方式中同样可以使用 Shell Style & Perl正则方式

Pillar匹配

sudo salt -I 'master:ipv6:False' test.ping

SLS文件中的匹配方式

'virtual:physical':
    - match: grain

States

states用于实现对minion进行状态管理,官方参考文档 http://docs.saltstack.com/ref/states/all/index.html
states 定义路径/src/salt(在/etc/salt/master中的file_roots变量定义),states文件使用YAML格式定义
states文件的后缀是sls(Salt State),sls文件编写需要注意在:之后要保留一个空格,否则会导致解析错误

手动执行state的方式,以修改admin账号的bashrc为例

准备/src/salt/bashrc.sls,内容如下

/home/admin/.bashrc:
  file.managed:
      - source: salt://files/bashrc
      - user: admin
      - group: admin
      - mode: 644

准备好用于分发的bash文件,salt://files/bashrc 对应/srv/salt/files/bashrc
使bash.sls生效

sudo salt '*' state.sls 'bashrc'

Highstate的方式。其实是使用top.sls作为state的入口文件

/src/salt/top.sls文件如下,top.sls引用bashrc.sls

base:
    '*':
        - bashrc

手动执行highstate生效

sudo salt '*' state.highstate

使用schedule 让minion自动执行highstate

定义 /srv/pillar/top.sls

 base:
    '*':
        - schedule

定义 /srv/pillar/schedule.sls (30分钟为单位)

schedule:
    highstate:
        function: state.highstate
            minutes: 30

Pillar

官方文档 http://docs.saltstack.com/topics/tutorials/pillar.html
pillar数据定义路径/srv/pillar, 入口文件:/srv/pillar/top.sls
查看pillar信息

sudo salt '*' pillar.data

Grains

官方文档 http://docs.saltstack.com/topics/targeting/grains.html
查看grains分类

sudo salt '*' grains.ls

查看grains所有信息

sudo salt '*' grains.items 

查看grains某个信息

sudo salt '*' grains.item osrelease 

自定义grains

grains自定义目录/srv/salt/_grains/,自定义路径/srv/salt/_grains/grans_test.py,示例:

def grans_test():
  grains = {}
  grains['grans_test'] = 'this is a grans test!'
  return grains
if __name__ == '__main__':
  print grans_test()

同步grains

sudo salt '*' saltutil.sync_grains

查看机器grains信息

sudo salt '*' grains.item grans_test

Job管理

Salt实时管理的任务都是作为Job来执行

查看正在执行的Job

sudo salt-run jobs.active

查看Job列表(包括执行过的)

sudo salt-run jobs.list_jobs

查看指定Job的状态

sudo salt-run jobs.lookup_jid 20140408112045976162

Minion状态管理

查看minion的状态up or down

sudo salt-run manage.status  #查看所有状态
sudo salt-run manage.up        #只看up的
sudo salt-run manage.down  #只看down的

查看minion的版本,该命令会提示哪些minion的版本需要升级

sudo salt-run manage.versions

参考文档