运维管理平台开发思路
后端
Python3.7Django2.xCelery4.xSaltstackRestfulMysqlRedis前端
jquerybootstrapbootstrap-tablebootstrap-fileinput2 实现过程2.1 CMDB资产管理2.1.1 资产录入前端页面填写表单,提交数据到Django后台,通过Django Orm操作写入到Mysql数据库data_info = {'id':1,'ip':'192.168.56.1','hostname':'test'}OpServerM.objects.get_or_create(**data_info)
2.1.2 资产删除同上类似2.1.3 资产修改前端利用bootstrapTable编辑通过ajax提交修改数据到Django后台然后通过Orm操作更新入库
update_data = {'id':1,'ip':'192.168.56.101','hostname':'test01'}server = OpServerM.objects.filter(pk=update_data['id'])server.update(**update_data)
2.1.4 批量导入资产前端利用bootstrap-fileinput上传数据到Django后台Django后台用bulk_create批量操作写入Mysql数据库
response = HttpResponse()response['Content-Type'] = "text/javascript"hostsFile = request.FILES.getlist('uploadhosts')for i in hostsFile: filename = os.path.join(MEDIA_ROOT,i.name) file = open(filename, 'wb') for chrunk in i.chunks(): file.write(chrunk) file.close()
批量导入数据库bulk_create
def imp_hosts(filename,sheet_name,model_name):fileds = model_name._meta.get_fields(include_parents=False)flist = []for filed in fileds: flist.append(str(filed).split('.')[-1])wb = load_workbook(filename)##读取excel表sheet名称为sheet_name的数据ws = wb[sheet_name]List=[]for row in list(ws.rows)[1:]: cols = [] for col in row: cols.append(col.value) tab_dic = dict(map(lambda x, y: [x, y], flist, cols)) List.append(model_name(**tab_dic))model_name.objects.bulk_create(List)
2.2 服务器管理--Saltstack2.2.1 定义各种服务state.sls模块EG:文件同步
log-monitor: file.managed: - name: /data/shell/log-monitor.sh - source: salt://init/centos/files/log-monitor.sh - template: jinja
更多任务编排请参考官网2.2.2 配置Salt API
参考资料
Saltstack之Salt-api安装使用官方文档2.2.3 Salt Restful APISaltstack API
2.2.4 执行命令salt '192.168.56.101' cmd.run 'free -m'
2.2.5 系统初始化、基础服务安装、应用安装、用户管理通过CMDB录入资产Django后台配置定时任务读取CMDB数据利用state.sls模块将编排的saltstack任务分发到目标主机
参考资料
Saltstack任务编排stats.sls
2.3 文件分发2.3.1 文件上传前端利用bootstrap-fileinput上传到Django静态服务目录mediavim {django_root}/project/settings.pyMEDIA_URL='/media/'MEDIA_ROOT='media'
调用saltstack api的cp.get_url模块分发到目标服务器
salt '192.168.56.101' cp.get_url http://{django-server:port}/media/upload.file /tmp/upload.file
2.3.2 文件下载调用saltstack api,利用cp.push模块将目标文件拉取到Salt Master端
salt '192.168.56.101' cp.push /tmp/download.file
然后使用cp.get_file将Salt Master端的文件推送到Django的静态服务media目录下
salt 'django-server' cp.get_file salt://192.168.56.101/tmp/download.file /{DJANGO_ROOT}/media/download.file
最后前端下载Django后台的media目录下的文件
wget http://{django-server:port}/media/download.file
2.4 任务管理--Celery2.4.1 编写任务(task)定时检测CMDB的主机、基础服务、应用、用户
参考资料
Django2集成celery4执行异步任务、定时任务
2.4.2 启动Celery工作进程celery -A celery_tasks worker -l info
2.4.3 查看注册任务2.4.4 添加执行任务(task)利用Flower api对任务管理
官方文档
Celery管理和监控工具-Flower
Flower API
2.4.5 查看执行任务2.4.6 查看执行任务结果声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。