예제 #1
0
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)
예제 #2
0
 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
예제 #3
0
 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()
예제 #4
0
파일: wssh.py 프로젝트: atompi/OMBA
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": "你没有权限访问这台服务器!"
        })
예제 #5
0
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
        })
예제 #6
0
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
            },
        )
예제 #7
0
 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()
예제 #8
0
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': []})
예제 #9
0
 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
예제 #10
0
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)))
예제 #11
0
     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(
예제 #12
0
 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)))