关于saltstack自动化平台的小总结

最近在配合php开发人员开发salt自动化平台,我负责后台Python的自动化任务处理,另一个同事负责前台页面和数据的下发。遇到了一点小小的问题,先总结下。

1、如何确保minion id 唯一

由于人为的去配置,可能导致mid重复,这样导致的结果是严重的。后来想了下,这个可以通过salt主动上报mid和ip的对应信息的。代码如下:

class CheckMid(object):
        def __init__(self):
                self.db = MySQL()
                self.tbname = ‘t_ip_mid_map‘
                self.local = salt.client.LocalClient()

        def check_mid(self):
                for data in self.local.cmd_iter(‘*‘,‘grains.get‘,[‘ipv4‘]):
                        for key in data:
                                if data[key].has_key(‘ret‘):
                                        iplist = data[key][‘ret‘]
                                        if ‘127.0.0.1‘ in iplist:
                                                iplist.remove(‘127.0.0.1‘)
                                        iplist.sort()
                                        ips = ‘,‘.join(iplist)
                                        self.insert_mid(key,ips)

        def insert_mid(self,mid,ips):
                try:
                        task_num = self.db.query("select * from %s where mid = ‘%s‘" % (self.tbname,mid))
                except Exception,e:
                        LOG.error_log(e)
                if not task_num:
                        try:
                                self.db.insert(self.tbname,{‘mid‘:mid,‘ip‘:ips})
                        except Exception,e:
                                LOG.error_log(e)

这段代码主要是将mid和ip对应关系上报到数据库的一张表中,字段mid是主键。前端页面就负责展示,当新增机器和以前的机器mid重复了,在前端页面可以知道这个机器不可用(资产表和mid/ip表比较产生的),此时就要修改mid了。这个还能避免人为填写mid造成的错误。

2、由于state.sls是串行的,就是说不能在同一个目标机上同时执行多个state.sls。

举个简单的例子:

salt ‘salt-centos‘ state.sls redis.stop &
salt ‘salt-centos‘ state.sls mysql.stop
此时就会报错:
The function "state.sls" is running as PID 31693 .... with jid 20141016052159481497

这样的话,最简单的方法就是将任务放到队列中执行,采用python的Queue队列。

3、由于任务放到队列执行,每次的执行结果存储到redis。采用一个死循环根据jid去匹配redis的结果,匹配到结果则退出循环,然后可以执行下个任务了。但是如果minion端挂了,就没有返回结果,此时就会堵塞在循环上,后面的任务无法执行。于是我加了个判断,就是每次执行任务时,去test.ping。代码如下:

try:
    for i in range(10):
        if self.salt.ping(self.mid): # 返回为真就下发任务
            jid = self.salt.state_run(self.mid, self.act)
            break
        else:
            jid = 0 
            raise Exception,‘{0} salt has problem,not return‘.format(self.mid)
except Exception,e:
    LOG.error_log(e)
    pass

4、最后一个问题就是salt 分布式架构的问题,由于网络问题,返回结果不稳定,怎么确保结果返回,这个就要自定以returner。这个我写了一个C/S结构的结果采集。master启用server,syndic启用client端,使用zmq socket。

最后附上前端展示图,这里效仿了zabbix的web模式。

时间: 2024-11-17 11:26:56

关于saltstack自动化平台的小总结的相关文章

实战:基于Python构建运维自动化平台

导语: 今天与大家一起探讨如何基于Python构建一个可扩展的运维自动化平台,也希望能与大家一起交流,共同成长. 此次分享将通过介绍OMServer.OManager具备的功能.架构设计.模块定制.安全审计.C/S结构的实现等几个方面的内容来展开. 为什么选择Python? 默认安装且跨平台 可读性好且开发效率高 丰富的第三方库(开发框架.各类API.科学计算.GUI等) 社区活跃&众多开发者. Python在腾讯的现状,根据去年内部提交组件语言统计,除去2.3.4前端技术,Python在高级编

如何基于Python构建一个可扩展的运维自动化平台

嘉宾简介 刘天斯 从事互联网运维工作已13年,目前就职于腾讯-互动娱乐部,负责游戏大数据的运营,曾就职于天涯社区,担任首席架构师/系统管理员. 热衷开源技术的研究,包括系统架构.运维开发.负载均衡.缓存技术.数据库.NOSQL.分布式存储.消息中间件.大数据及云计算.Mesos.Docker.DevOps等领域.擅长大规模集群的运维工作,尤其在自动化运维方面有着非常丰富的经验.同时热衷于互联网前沿技术的研究,活跃在国内社区.业界技术大会,充当一名开源技术的传播与分享者. 导言 受 Reboot

运维自动化平台思路

⑴客户端初始化: info collect  信息收集  CMDB 配置管理工具 ⑵服务端 ①资产管理simplecmdb ②配置管理(软件安装.配置同步) puppet.saltstack.ansible ③代码发布(自动化部署) jenkins.svn.python xml RPC ④监控报警  nagios(关乎状态) graphite(关乎性能和趋势) ⑤日志搜集  kibana logstash  elasticasearch 运维自动化平台思路

Android WebApp & NativeApp 适配测试自动化平台GoGo实现 东海陈光剑

Android WebApp & NativeApp 适配测试自动化平台GoGo实现 东海陈光剑 2014年3月6日 18:27:55 源代码: https://github.com/universsky/AndroidAutomationTestUniverssky.git GoGo平台架构: 运行结果: http://10.73.72.122:88/report.html?run_stamp=20140306052855&sec=336&min=5 http://10.125.

saltstack 自动化运维安装

saltstack --自动化运维 saltstack-master 安装:yum -y install salt-mastersaltstack-master配置:如下图,修改 salt-master本身监听地址sed -i 's/#interface: 0.0.0.0/interface: 192.168.1.26/g' /etc/salt/mastersed -e '/^$/d;/^#/d' /etc/salt/master #查看配置 可以在master 端使用自动认证(可选)vim /

企业应用部署自动化平台——Electric Flow

尽管当前敏捷开发模式或云计算的应用大大地提高了软件应用系统的开发速度,但目前对于应用的部署仍是不断调试和耗时的过程,有些甚至需花费工程师数天时间将应用产品部署上线成功.另外部署过程往往频繁的发生在整个软件的开发周期中,在开发过程中的测试部署,在QA阶段的功能测试部署,在PreProduction环境中的验收测试部署和最后的生产环境的部署. 而反观如今的软件应用系统,其往往由好几层架构,前端应用层.数据接口层.应用逻辑层.数据库层等等,可能在每一层架构中还涉及到若干模块,同时还有对于这些模块和层相

关于phoenixframe自动化平台在Linux环境下执行用例说明

phoenixframe自动化平台支持在Linux环境下使用phantomjs,Firefox,chrome执行测试用例.但有以下几个问题需要注意: 1.若无法启动phantomjs,Firefox,chrome的驱动,则请检查存放drivers的目录是否有读写权限.使用一下命令添加一下权限即可: 假如目录为:.../webapps/phoenix_node/WEB-INF/classes/drivers 则cd到drivers目录下执行:chmod 777 * 再次启动即可. 在Linux环境

phoenixframe自动化平台在Linux环境下执行用例的说明

phoenixframe自动化平台支持在Linux环境下使用phantomjs,Firefox,chrome执行测试用例.但有以下几个问题需要注意: 1.若无法启动phantomjs,Firefox,chrome的驱动,则请检查存放drivers的目录是否有读写权限.使用一下命令添加一下权限即可: 假如目录为:.../webapps/phoenix_node/WEB-INF/classes/drivers 则cd到drivers目录下执行:chmod 777 * 再次启动即可. 在Linux环境

Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解

说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括了用户登入.数字签名.数据传输等多个场合.今天我把常见的加密算法全部整理在这里,供大家学习参考. 首先,大家要知道加密算法能干什么,利用加密算法来对数据通信的过程进行加密传输是一种最常见的安全手段.利用该手段能够达到一下三个目的: 1.数据保密性,防止用户数据被窃取或泄露: 2.数据完整性,防止用户传输的数据被篡改: 3.通信双方身份确认,确保数据来源合法: 常见