0、学习目的
http://docs.saltstack.cn/topics/execution/index.html 官方文档
0.1 命令解释
[root@host-192-168-23-39 ~]# salt '*' cmd.run 'w' salt 命令 * 指定目标 cmd 模块 run 模块的方法 w 模块的参数
0.2 学习目的
1、目标Target
Targets也可以使用正则表达式: salt -E 'virtmach[0-9]' test.ping Targets也可以指定列表: salt -L 'foo,bar,baz,quo' test.ping
# Ip地址
# 或者在一个命令中混合使用多target类型:
2、模块Module
http://docs.saltstack.cn/ref/modules/all/index.html#all-salt-modules
2.1 network模块
# 活动的tcp
# 查看arp
# 查看网卡接口
# 测试连接性
salt '*' network.connect archlinux.org 80 salt '*' network.connect baidu.com 80
2.2 service
salt '*' service.get_all salt '*' service.get_all |grep sshd
# 服务开启着
# 获取所有服务
# 服务是否关闭
# 重新加载,重启,状态
# 停止服务
2.3 state模块
https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.state.html
2.4 file模块
批量文件分发
# cp文件目录 [root@linux-node1 salt]# salt-cp '*' /etc/passwd /tmp/hehe {'linux-node1.example.com': {'/tmp/hehe': True}, 'linux-node2.example.com': {'/tmp/hehe': True}} # ls [root@linux-node1 salt]# salt * cmd.run 'ls /tmp/hehe' linux-node1.example.com: /tmp/hehe linux-node2.example.com: /tmp/hehe
2.5 模块用户访问控制
http://docs.saltstack.cn/topics/eauth/access_control.html
1. 要求:redhat用户只能用这两个模块
2.[root@master ~]# vim /etc/salt/master
重启master服务
3.PERMISSION授权
[root@master ~]# chmod 775 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master
4. 创建redhat用户,切换用户,执行命令
[root@linux-node1 ~]# useradd redhat
[root@linux-node1 ~]# passwd redhat
5. 只在某个机器执行
6.问题:
错误,表明用户没有写log权限,
解决方式:
把test用户加到root用户组,
并对root用户组赋予/var/log/salt/master 文件的写权限
3、返回returners
https://docs.saltstack.com/en/latest/ref/returners/index.html
https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html
返回到Mysql
返回时minion返回的,返回命令,直接写入MySQL
1.minion端配置
(1)每个Minion都需要装MySQL
[root@linux-node1 ~]# salt * cmd.run 'yum install -y MySQL-python' Pkg模块 [root@linux-node1 ~]# salt * pkg.install MySql-python
(2)master端安装数据库,创建表结构
[root@linux-node1 ~]# yum install mariadb-server [root@linux-node1 ~]# systemctl restart mariadb [root@linux-node1 ~]# mysql
创建表结构
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;
查看表
授权
MariaDB [salt]> grant all on salt.* to salt@'%' identified by 'salt'; Query OK, 0 rows affected (0.00 sec)
(3)minion端,修改配置文件
[root@linux-node2 ~]# vim /etc/salt/minion
mysql.host: '192.168.194.131' mysql.user: 'salt' mysql.pass: 'salt' mysql.db: 'salt' mysql.port: 3306
重启
[root@linux-node1 ~]# systemctl restart salt-minion
(4)执行命令查看
[root@linux-node1 ~]# salt '*' cmd.run 'df -h' --return mysql
mysql查看
MariaDB [salt]> show tables; MariaDB [salt]> select * from salt_returns; MariaDB [salt]> select * from salt_returnsG;
2. job cache机制
(1)Master配置文件
[root@linux-node1 ~]# vim /etc/salt/master
保持24小时
(2) 重启
[root@linux-node1 ~]# systemctl restart salt-master
(3)执行命令,查看
[root@linux-node1 ~]# salt '*' test.ping
[root@linux-node1 ~]# salt '*' cmd.run 'uptime' -v
MariaDB [salt]> select * from salt_returnsG;