def service_list(request, format=None): """ List all order, or create a server assets order. """ if request.method == 'GET': snippets = Service_Assets.objects.all() serializer = serializers.ServiceSerializer(snippets, many=True) return Response(serializer.data) elif request.method == 'POST': del request.data['project_name'] try: service = Service_Assets.objects.create(**request.data) except Exception, ex: return Response({"msg": str(ex)}, status=status.HTTP_400_BAD_REQUEST) try: snippet = Service_Assets.objects.get(id=service.id) serializer = serializers.ServiceSerializer(snippet) recordAssets.delay( user=str(request.user), content="添加业务类型名称:{service_name}".format( service_name=request.data.get("service_name")), type="service", id=serializer.data.get('id')) except Exception, ex: logger.error(msg="添加service失败: {ex}".format(ex=str(ex))) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def disconnect(self, message, **kwargs): try: user = User.objects.get(username=self.message.user) except Exception, ex: logger.error(msg="webssh获取用户[{user}]信息失败: {ex}".format( user=self.message.user, ex=str(ex))) pass
def receive(self, text=None, bytes=None, **kwargs): try: if text: data = json.loads(text) if data[0] in ['stdin', 'stdout']: self.queue().publish(self.message.reply_channel.name, json.loads(text)[1]) elif data[0] == u'set_size': self.queue().publish(self.message.reply_channel.name, text) # else: # self.message.reply_channel.send( # { # "text":json.dumps( # [ # 'stdout', # '\033[1;3;31mUnknow command found!\033[0m' # ] # ) # }, # immediately=True # ) elif bytes: self.queue().publish(self.message.reply_channel.name, json.loads(bytes)[1]) except socket.error: self.closessh() self.close() except Exception, e: import traceback print traceback.print_exc() logger.error(msg="webssh receive failed: {ex}".format(ex=str(traceback.print_exc()))) self.closessh() self.close()
def wssh(request, sid): try: server = Server_Assets.objects.get(id=sid) if request.user.is_superuser: serverList = Server_Assets.objects.all() return render(request, 'webssh/webssh.html', { "user": request.user, "server": server, "serverList": serverList }) else: user_server = User_Server.objects.get(user_id=request.user.id, server_id=sid) userServer = User_Server.objects.filter(user_id=request.user.id) serverList = [] for s in userServer: ser = Server_Assets.objects.get(id=s.server_id) serverList.append(ser) if user_server: return render( request, 'webssh/webssh.html', { "user": request.user, "server": server, "serverList": serverList }) except Exception, ex: logger.error(msg="请求webssh失败: {ex}".format(ex=str(ex))) return render(request, 'webssh/webssh.html', { "user": request.user, "errorInfo": "你没有权限访问这台服务器!" })
def article_edit(request, pid): try: article = Post.objects.select_related().get(id=pid) except Exception, ex: logger.error(msg="文章不存在: {ex}".format(ex=ex)) return render(request, 'wiki/wiki_edit.html', { "user": request.user, "errorInfo": ex })
def assets_modf(request, aid): try: assets = Assets.objects.get(id=aid) userList = User.objects.all() except: return render( request, 'assets/assets_modf.html', {"user": request.user}, ) if assets.assets_type in ['server', 'vmser']: try: asset_ram = assets.ram_assets_set.all() except: asset_ram = [] try: asset_disk = assets.disk_assets_set.all() except: asset_disk = [] try: asset_body = assets.server_assets except Exception, ex: logger.error(msg="修改资产失败: {ex}".format(ex=str(ex))) return render( request, '404.html', {"user": request.user}, ) return render( request, 'assets/assets_modf.html', { "user": request.user, "asset_type": assets.assets_type, "asset_main": assets, "asset_body": asset_body, "asset_ram": asset_ram, "asset_disk": asset_disk, "assets_data": getBaseAssets(), 'userList': userList }, )
def run_model(self, host_list, module_name, module_args): """ run module from ansible ad-hoc. :param host_list: :param module_name: ansible module name :param module_args: ansible module args :return: """ play_source = dict( name="Ansible Play", hosts=host_list, gather_facts='no', tasks=[dict(action=dict(module=module_name, args=module_args))]) play = Play().load(play_source, variable_manager=self.variable_manager, loader=self.loader) tqm = None if self.redisKey or self.logId: self.callback = ModelResultsCollectorToSave( self.redisKey, self.logId) else: self.callback = ModelResultsCollector() try: tqm = TaskQueueManager( inventory=self.inventory, variable_manager=self.variable_manager, loader=self.loader, options=self.options, passwords=self.passwords, ) tqm._stdout_callback = self.callback constants.HOST_KEY_CHECKING = False tqm.run(play) except Exception as err: logger.error(msg="run model failed: {err}".format(err=str(err))) if self.redisKey: DsRedis.OpsAnsibleModel.lpush(self.redisKey, data=err) if self.logId: AnsibleSaveResult.Model.insert(self.logId, err) finally: if tqm is not None: tqm.cleanup()
def upload_image(request): if request.method == 'POST': f = request.FILES["upload"] callback = request.GET.get('CKEditorFuncNum', '1') if f: try: datePath = time.strftime("%Y/%m/%d/", time.localtime()) path = os.getcwd() + "/upload/wiki/" + datePath filePath = path + f.name if os.path.isdir(os.path.dirname(filePath)) is not True: os.makedirs(os.path.dirname(filePath)) with open(filePath, 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) except Exception, ex: logger.error(msg="上传图片失败: {ex}".format(ex=ex)) res = "<script>window.parent.CKEDITOR.tools.callFunction(" + callback + ",'/" + 'wiki/upload/' + datePath + f.name + "', '');</script>" return HttpResponse(res) else: return JsonResponse({'msg': "图片上传失败", "code": 500, 'data': []})
def run_playbook(self, host_list, playbook_path, extra_vars=dict()): """ run ansible playbook :param host_list: :param playbook_path: :param extra_vars: :return: """ try: if self.redisKey or self.logId: self.callback = PlayBookResultsCollectorToSave( self.redisKey, self.logId) else: self.callback = PlayBookResultsCollector() extra_vars['host'] = ','.join(host_list) self.variable_manager.extra_vars = extra_vars executor = PlaybookExecutor( playbooks=[playbook_path], inventory=self.inventory, variable_manager=self.variable_manager, loader=self.loader, options=self.options, passwords=self.passwords, ) executor._tqm._stdout_callback = self.callback constants.HOST_KEY_CHECKING = False constants.DEPRECATION_WARNINGS = False constants.RETRY_FILES_ENABLED = False executor.run() except Exception as err: logger.error(msg="run playbook failed: {err}".format(err=str(err))) if self.redisKey: DsRedis.OpsAnsibleModel.lpush(self.redisKey, data=err) if self.logId: AnsibleSaveResult.Model.insert(self.logId, err) return False
def assets_facts(request, args=None): if request.method == "POST" and request.user.has_perm( 'OMBA.change_server_assets'): server_id = request.POST.get('server_id') genre = request.POST.get('type') if genre == 'setup': try: server_assets = Server_Assets.objects.get( id=request.POST.get('server_id')) if server_assets.keyfile == 1: resource = [{ "hostname": server_assets.ip, "port": int(server_assets.port), "username": server_assets.username }] else: resource = [{ "hostname": server_assets.ip, "port": server_assets.port, "username": server_assets.username, "password": server_assets.passwd }] except Exception, ex: logger.error(msg="更新资产失败: {ex}".format(ex=str(ex))) return JsonResponse({'msg': "数据更新失败-查询不到该主机资料", "code": 502}) ANS = ANSRunner(resource) ANS.run_model(host_list=[server_assets.ip], module_name='setup', module_args="") data = ANS.handle_cmdb_data(ANS.get_model_result()) if data: for ds in data: status = ds.get('status') if status == 0: try: assets = Assets.objects.get( id=server_assets.assets_id) Assets.objects.filter( id=server_assets.assets_id).update( sn=ds.get('serial'), model=ds.get('model'), manufacturer=ds.get('manufacturer')) except Exception, ex: logger.error(msg="获取服务器信息失败: {ex}".format( ex=str(ex))) return JsonResponse({ 'msg': "数据更新失败-查询不到该主机的资产信息", "code": 403 }) try: Server_Assets.objects.filter(id=server_id).update( cpu_number=ds.get('cpu_number'), kernel=ds.get('kernel'), selinux=ds.get('selinux'), hostname=ds.get('hostname'), system=ds.get('system'), cpu=ds.get('cpu'), disk_total=ds.get('disk_total'), cpu_core=ds.get('cpu_core'), swap=ds.get('swap'), ram_total=ds.get('ram_total'), vcpu_number=ds.get('vcpu_number')) recordAssets.delay(user=str(request.user), content="修改服务器资产:{ip}".format( ip=server_assets.ip), type="server", id=server_assets.id) except Exception, ex: logger.error(msg="更新服务器信息失败: {ex}".format( ex=str(ex))) return JsonResponse({ 'msg': "数据更新失败-写入数据失败", "code": 400 }) for nk in ds.get('nks'): macaddress = nk.get('macaddress') count = NetworkCard_Assets.objects.filter( assets=assets, macaddress=macaddress).count() if count > 0: try: NetworkCard_Assets.objects.filter( assets=assets, macaddress=macaddress).update( assets=assets, device=nk.get('device'), ip=nk.get('address'), module=nk.get('module'), mtu=nk.get('mtu'), active=nk.get('active')) except Exception, ex: logger.warn(msg="更新服务器网卡信息失败: {ex}".format( ex=str(ex))) else: try: NetworkCard_Assets.objects.create( assets=assets, device=nk.get('device'), macaddress=nk.get('macaddress'), ip=nk.get('address'), module=nk.get('module'), mtu=nk.get('mtu'), active=nk.get('active')) except Exception, ex: logger.warn(msg="写入服务器网卡信息失败: {ex}".format( ex=str(ex)))
assets = Assets.objects.get(id=server_assets.assets_id) if server_assets.keyfile == 1: resource = [{ "hostname": server_assets.ip, "port": int(server_assets.port), "username": server_assets.username }] else: resource = [{ "hostname": server_assets.ip, "port": server_assets.port, "username": server_assets.username, "password": server_assets.passwd }] except Exception, ex: logger.error(msg="更新硬件信息失败: {ex}".format(ex=ex)) return JsonResponse({'msg': "数据更新失败-查询不到该主机资料", "code": 502}) ANS = ANSRunner(resource) ANS.run_model(host_list=[server_assets.ip], module_name='crawHw', module_args="") data = ANS.handle_cmdb_crawHw_data(ANS.get_model_result()) if data: for ds in data: if ds.get('mem_info'): for mem in ds.get('mem_info'): if Ram_Assets.objects.filter( assets=assets, device_slot=mem.get('slot')).count() > 0: try: Ram_Assets.objects.filter(
def connect(self, message, **kwargs): try: username = message['path'].strip('/').split('/')[-1] except Exception, ex: message.reply_channel.send({"accept": False}) logger.error(msg="webssh连接失败: {ex}".format(ex=str(ex)))