def system_install_managed(request,id=None): """ Management host to be installed """ user = request.user if id: system_install = get_object_or_404(SystemInstall, pk=id) page_name = '编辑主机' else: system_install = SystemInstall() page_name = '添加主机' if request.method == 'POST': operate = request.POST.get('operate') form = SystemInstallForm(request.POST,instance=system_install) if form.is_valid(): if operate: if operate == 'update': form.save() db = db_operate() sql = 'select ip from installed_systeminstall where id = %s' % (id) ret = db.mysql_command(settings.OMS_MYSQL,sql) Message.objects.create(type='idc', action='install', action_ip=ret, content='主机信息已更新(macadd、system_version),准备装机') return HttpResponseRedirect(reverse('install_list')) else: pass else: form = SystemInstallForm(instance=system_install) return render_to_response('install_manage.html', {"form": form, "page_name": page_name, },context_instance=RequestContext(request))
def code_deploy(request): """ Pull code for building, pushed to the server """ ret = '' host = {'ga': 'test-01', 'beta': 'localhost.localdomain'} user = request.user if request.method == 'POST': action = request.get_full_path().split('=')[1] if action == 'push': pro = request.POST.get('project') url = request.POST.get('url') ver = request.POST.get('version') env = request.POST.get('env') capi = Code_Work(pro=pro,url=url,ver=ver) data = {pro:{'ver':ver}} obj = capi.work() #构建rpm包 if obj['comment'][0]['result'] and obj['comment'][1]['result'] and obj['comment'][2]['result']: json_api = BuildJson() json_api.build_data(host[env],data) #刷新pillar数据,通过deploy下发SLS执行代码发布 sapi = SaltAPI(url=settings.SALT_API['url'],username=settings.SALT_API['user'],password=settings.SALT_API['password']) if env == 'beta': jid = sapi.target_deploy('beta','deploy.'+pro) elif env == 'ga': jid = sapi.target_deploy('tg','deploy.'+pro) else: jid = sapi.target_deploy('beta','deploy.'+pro) time.sleep(8) db = db_operate() sql = 'select returns from salt_returns where jid=%s' ret=db.select_table(settings.RETURNS_MYSQL,sql,str(jid)) #通过jid获取执行结果 return render_to_response('code_deploy.html', {'ret': ret},context_instance=RequestContext(request))
def host_list_manage(request,id=None): """ Manage Host List """ user = request.user if id: host_list = get_object_or_404(HostList, pk=id) action = 'edit' page_name = '编辑主机' db = db_operate() sql = 'select ip from oms_hostlist where id = %s' % (id) ret = db.mysql_command(settings.OMS_MYSQL,sql) else: host_list = HostList() action = 'add' page_name = '新增主机' if request.method == 'GET': delete = request.GET.get('delete') id = request.GET.get('id') if delete: Message.objects.create(type='host', action='manage', action_ip=ret, content='主机下架') host_list = get_object_or_404(HostList, pk=id) host_list.delete() return HttpResponseRedirect(reverse('host_list')) if request.method == 'POST': form = HostsListForm(request.POST,instance=host_list) operate = request.POST.get('operate') if form.is_valid(): if action == 'add': form.save() return HttpResponseRedirect(reverse('host_list')) if operate: if operate == 'update': form.save() Message.objects.create(type='host', action='manage', action_ip=ret, content='主机信息更新') return HttpResponseRedirect(reverse('host_list')) else: pass else: form = HostsListForm(instance=host_list) return render_to_response('host_manage.html', {"form": form, "page_name": page_name, "action": action, },context_instance=RequestContext(request))
def get_server_asset(request): """ Get information service assets """ if request.method == 'GET': action = request.get_full_path().split('=')[1] if action == 'flush': hostlist_sql = 'select hostname from asset_hostlist' server_sql = 'select hostname from asset_serverasset' db = db_operate() host_ret = db.mysql_command(settings.OMS_MYSQL,hostlist_sql) server_ret = db.mysql_command(settings.OMS_MYSQL,server_sql) obj = [i for i in host_ret if i not in server_ret] #主机列表数据与服务器资产数据IP做差集,数据更新时只更新差集,避免一次性更新全部 ret = multitle_collect(obj) for i in ret: ServerAsset.objects.create(manufacturer=i[0], productname=i[1], service_tag=i[2], cpu_model=i[3], cpu_nums=i[4], cpu_groups=i[5],mem=i[6], disk=i[7], raid=i[8], hostname=i[9], ip=i[10], macaddress=i[11], os=i[12], virtual=i[13], idc_name=i[14]) Message.objects.create(type='server', action='manage', action_ip='扫描', content='录入%s服务器软件、硬件信息' % (obj)) return HttpResponseRedirect(reverse('server_asset_list'))
def module_deploy(request): """ deploy (nginx/php/mysql..etc) module """ ret = [] jid = [] user = request.user if request.method == 'POST': action = request.get_full_path().split('=')[1] if action == 'deploy': tgt = request.POST.get('tgt') arg = request.POST.getlist('module') tgtcheck = HostList.objects.filter(hostname=tgt) if tgtcheck: Message.objects.create(type='salt', action='deploy', action_ip=tgt, content='saltstack %s module depoy' % (arg)) sapi = SaltAPI(url=settings.SALT_API['url'],username=settings.SALT_API['user'],password=settings.SALT_API['password']) if 'sysinit' in arg: obj = sapi.async_deploy(tgt,arg[-1]) #先执行初始化模块,其他任意 jid.append(obj) arg.remove('sysinit') if arg: for i in arg: obj = sapi.async_deploy(tgt,i) jid.append(obj) else: for i in arg: obj = sapi.async_deploy(tgt,i) jid.append(obj) db = db_operate() for i in jid: time.sleep(10) sql = 'select `return` from salt_returns where jid=%s' result=db.select_table(settings.RETURNS_MYSQL,sql,str(i)) #通过jid获取执行结果 ret.append(result) #sapi.async_deploy('test-01','zabbix.api') #调用zabbix.api执行模块监控 else: ret = '亲,目标主机不对,请重新输入' return render_to_response('salt_module_deploy.html', {'ret': ret},context_instance=RequestContext(request))