- Saltstack远程执行
语法例:salt '*' cmd.run 'w'
- 命令:salt
- 目标:'*'
- 模块:cmd.run,自带150+模块,也可以自己写模块
- 返回:执行后结果返回,Returnners组件
1、指定目标(targeting)
官网文档:
两种定位方法:一种和minion ID有关,一种和monion ID无关
1)minion ID有关的方法
指定具体的minion ID
salt 'linux-node2.example.com' test.ping
通配符
salt '*' test.ping salt 'linux-node2*' test.pingsalt 'linux-node[1|2].example.com' test.pingsalt 'linux-node[1-2].example.com' test.pingsalt 'linux-node[!2].example.com' test.pingsalt 'linux-node?.example.com' test.ping
列表
salt -L 'linux-node1.example.com,linux-node2.example.com' test.ping
正则表达式
salt -E 'linux-(node1|node2)*' test.pingsalt -E 'linux-(node1|node2).example.com' test.ping
备注: 所有匹配目标的方式,都可以用到top file里面来指定目标。
minion ID设置方案:IP地址、根据业务来进行设置
例:redis-node1-redis04-idc04-h5web.example.comredis-node1 # redis第一个节点redis04 # 集群idc04 # 机房h5web # 业务线
2)minion ID无关的方法
IP地址、子网
salt -S 192.168.137.12 test.pingsalt -S 192.168.137.0/24 test.ping
分组,需要配置master文件
vim /etc/salt/master
重启systemctl restart salt-master
salt -N web test.ping
混合匹配
官方文档
批处理 ,可用于重启所有主机或进程场景,百分比或固定数量的一点一点重启主机或进程
官方文档
2、执行模块
官网文档
列出salt所有模块,以及如何使用的帮助文档
通过yum默认安装salt所有模块存放路径 /usr/lib/python2.7/site-packages/salt/modules(centos 7)
例:
salt '*' network.active_tcp # 列出所有主机运行的tcp连接salt '*' network.arp # 列出所有主机arpsalt '*' service.available sshd # 列出所有主机sshdsalt '*' service.get_all # 列出所有主机的所有运行服务salt '*' service.status sshd # 列出所有主机sshd运行状态salt-cp '*' /etc/hosts /tmp/test # 将master上/etc/hosts文件拷贝到所有主机的/tmp/testsalt '*' state.show_top # 查看topsalt '*' state.single pkg.installed name=lsof # 所有主机安装lsof
3、返回程序
官方文档
1)将返回写入mysql库,是由minion直接写入mysql库
所有minion安装python mysql模块
salt '*' state.single pkg.installed name=MySQL-python或salt '*' cmd.run 'yum install MySQL-python -y'
创建salt库
CREATE DATABASE `salt` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
USE `salt`;
创建表
---- Table structure for table `jids`--DROP TABLE IF EXISTS `jids`;CREATE TABLE `jids` ( `jid` varchar(255) NOT NULL, `load` mediumtext NOT NULL, UNIQUE KEY `jid` (`jid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE INDEX jid ON jids(jid) USING BTREE;
---- Table structure for table `salt_returns`--DROP TABLE IF EXISTS `salt_returns`;CREATE TABLE `salt_returns` ( `fun` varchar(50) NOT NULL, `jid` varchar(255) NOT NULL, `return` mediumtext NOT NULL, `id` varchar(255) NOT NULL, `success` varchar(10) NOT NULL, `full_ret` mediumtext NOT NULL, `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, KEY `id` (`id`), KEY `jid` (`jid`), KEY `fun` (`fun`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
---- Table structure for table `salt_events`--DROP TABLE IF EXISTS `salt_events`;CREATE TABLE `salt_events` (`id` BIGINT NOT NULL AUTO_INCREMENT,`tag` varchar(255) NOT NULL,`data` mediumtext NOT NULL,`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,`master_id` varchar(255) NOT NULL,PRIMARY KEY (`id`),KEY `tag` (`tag`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
授权
grant all on salt.* to salt@'%' identified by 'salt@pw';FLUSH PRIVILEGES;
exitmysql -h192.168.137.11 -usalt -psalt@pw saltshow tables;
配置minion文件
vim /etc/salt/minionmysql.host: '192.168.137.11'mysql.user: 'salt'mysql.pass: 'salt@pw'mysql.db: 'salt'mysql.port: 3306
重启 systemctl restart salt-minion
测试
salt '*' test.ping --return mysql
salt '*' cmd.run 'df -h' --return mysql
4、编写执行模块
1)放置路径
cd /srv/saltmkdir _modules
2) 命名
文件名就是模块名
例: my_disk.py
vim /srv/salt/_modules/my_disk.pydef list(): cmd = 'df -h' ret = __salt__['cmd.run'](cmd) return ret
3)刷新
salt '*' saltutil.sync_modules
会放到指定目标的/var/cache/salt/minion下
4)执行
salt '*' my_disk.list