{"title": "Salt\u4f7f\u7528\u7b14\u8bb0", "update_time": "2014-04-15 18:03:41", "tags": "salt", "pid": "293", "icon": "python.png"}
## 实时管理 ### 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 ``` ## 参考文档 * http://blog.halfss.com/blog/2013/05/22/yun-wei-zi-dong-hua-zhi-saltxue-xi-bi-ji/ * http://www.saltstack.cn/projects/cssug-kb/wiki * http://salt.readthedocs.org/en/latest/topics/index.html [很不错的英文salt资料] * http://www.saltstack.cn/projects/cssug-kb/wiki/Using_pillar_data_in_saltstack [Salt中使用Pillar]