设为首页 收藏本站
查看: 1189|回复: 0

[经验分享] python Saltstack

[复制链接]

尚未签到

发表于 2018-1-3 16:09:21 | 显示全部楼层 |阅读模式
一. 安装配置
  a. 环境准备





服务端:192.168.1.24    oldboy
客户端:192.168.1.147   oldgirl
客户端:192.168.1.119   olddog

官方文档:https://docs.saltstack.com/en/latest/
赵班长:https://github.com/unixhot/

#CentOS7  安装
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm  -y

#CentOS6 安装
https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el6.noarch.rpm
  b. 服务端安装





rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -qa | grep salt
yum install -y salt-master
service salt-master start
chkconfig salt-master on
vim /etc/salt/master
  c. 客户端安装





rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install salt-minion

vim /etc/salt/minion
master: 192.168.1.24

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         #以子网方式匹配
二 模块
  a. service模块





service.running    #确保服务处于运行状态,如果没有运行就启动
service.enabled    #确保服务开机自动启动
service.disabled   #确保服务开机不自动启动
service.dead       #确保服务当前没有运行,如果运行就停止
service.available  #查看服务是否开启

salt 'oldboy' service.available sshd      #查看sshd服务是否开启
salt 'oldboy' service.get_all     #显示所有启动的服务
  b. state模块





salt '*' state.show_top               #查看top.sls指定的模块
  c. return模块





#minion:

yum -y install MySQL-python  mysq   
vim /etc/salt/minion   
mysql.host: '192.168.8.130'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
/etc/init.d/salt-minion restart



#master:
  
yum -y install mysql-server MySQL-python
/etc/init.d/mysqld start
vim /etc/salt/master
master_job_cache: mysql
mysql.host: '192.168.8.130'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306
/etc/init.d/salt-master restart
/etc/init.d/salt-minion restart

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;                  #查看 
  d. pkg模块





pkg.installed      #确保软件安装,如果没有安装就安装。
pkg.latest         #确保软件包是最新版本,如果不是,进行升级
pkg.remove         #确保软件包已卸载,如果之前已安装,进行卸载
pkg.purge          #除remove外,也会删除其配置文件
  e. file模块





file.managed  #保证文件存在并且为对应的状态
file.recure   #保证目录存在并且为对应状态
file.absent   #确保文件不存在,如果存在就删除
  f. resquisites模块





require       #我依赖某个状态
recure_in     #我被某个状态依赖
watch         #我关注某个状态
watch_in      #我被某个状态关注
三. 数据系统Grains





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

import yaml
import sys

fd = open(sys.argv[1])

print yaml.load(fd)
#ls
parse_yaml.py  test.yaml
#chmod +x parse_yaml.py
# ./parse_yaml.py test.yaml
['penyao', 'oldboy']

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431214-1-1.html 上篇帖子: saltstack学习 下篇帖子: 黄梅大王的运维之路
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表