service salt-minion start
chkconfig salt-minion on
d. 服务端增加客户端
salt-key
salt-key -L #两个都是查看
salt-key -A #增加所有
salt-key -a olddog #把olddog、oldgirl加入通信
salt-key -a oldgirl
salt-key -D . #删除所有
salt-key -d olddog #删除某个IP
e. salt的常用命令
salt '*' test.ping #ping服务器
salt '*' cmd.run 'echo Hello world!' #输出Hello world
salt '*' cmd.run 'df -h' #查看磁盘
salt 'old*' cmd.run 'w'
salt '*' pkg.install httpd #远程命令安装httpd
salt '*' service.stop httpd #命令关闭服务
salt '*' service.available sshd #查看服务是否开启
f. 匹配minion_id(IP和子网不是匹配minion_id)
salt -L 'olddog,oldgirl' test.ping #列表方式匹配
salt -E 'old(dog|girl)' test.ping #正则方式匹配
salt 'old*' cmd.run 'w' #以通配符匹配
salt -S 172.16.77.100 test.ping #以IP地址匹配
salt -S 172.16.77.0/24 test.ping #以子网方式匹配
mysql #连接Mysql创建数据库和表
CREATE DATABASE `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
USE `salt`;
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;
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;
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'; #确定客户机能连上mysql
flush privileges;
salt '*' test.ping --return mysql #将过程结果返回mysql
mysql
use salt
select * from salt_returns; #查看
salt '*' grains.ls #列出所有查询的目标
salt '*' grains.items #查看所有item和值
salt '*' grains.get ip4_interfaces:eth0 #查看eth0的Ip
salt '*' grains.get saltversion #查看salt的版本
salt '*' grains.get os #查看操作系统
a. example
客户机oldgirl上执行:
vim /etc/salt/grains
cloud: openstack
/etc/init.d/salt-minion restart
服务器上执行:
salt 'oldgirl' grains.get cloud
salt -G cloud:openstack cmd.run 'uptime' #执行有cloud:openstack的服务器
salt -G os:CentOS cmd.run 'uptime' #执行所有系统是CentOS的服务器
四 pillar的介绍
vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar #定义目录
state_top: top.sls #定义top
mkdir -p /srv/pillar
cd /srv/pillar
vim packages.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
git: git
{% elif grains['os'] == 'Debian' %}
apache: apache2
git: git-core
{% endif %}
vim top.sls
base:
'*':
- packages
salt '*' saltutil.refresh_pillar #刷新所有客户端的缓存
salt '*' pillar.get git #查看上面定义的git
salt '*' pillar.get apache #查看上面定义的apache
五 自定义组配置文件
cd /etc/salt/
mkdir master.d && cd master.d/
vim nodegroups.conf
nodegroups:
web-cluster: 'old*' #定义组,组里面增加主机,可以写多个组
salt -N web-cluster test.ping #根据定义的组执行命令
salt -N web-cluster -b 20% service.start httpd #每次重启20%的主机,直到重启完
六 上传文件
vim /etc/salt/master
# file_roots:
# base:
# - /srv/salt/ #上传文件的目录
#state_top: top.sls #定义top
cd /srv/salt/ && mv /etc/hosts .
salt '*' cp.get_file salt://hosts /mnt/hosts #把hosts文件上传到其它服务器上
salt-cp '*' /tmp/hosts /tmp/ #上传其它目录下的文件用salt-cp
七. YAML用法
mkdir /scripts && cd /scripts
vim test.yaml
- penyao
- oldboy
vim parse_yaml.py
#!/usr/bin/env python