暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

智慧运维平台-版本上线审核功能

IT那活儿 2025-07-08
65

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!



场景背景

随着目前系统的拓展,版本的不断迭代,为了更好的对整个云化架构进行版本更新管理,减少运维工作的重复性、复杂性等难度,为此开发了版本上线审核工具。
通过该工具可实现对整个云化系统版本更新后,有哪些变动有更直观的展示,方便版本上线管理。


功能介绍

2.1 云化配置检查
通过版本上线检查工具云化配置检查,可对云化系统容器版本更新情况进行直接的展示。
只要有上线的容器版本与记录不同,便会在云化配置检查工具中体现。
通过旁边的展开,可以看到容器版本有何不同,在与上线人员核对无误后,即可更新配置,平台将会记录最新版本。
代码如下:
if request.method == "GET":
        return_list={
            "data":[]
        }
        ns_list=['jyfront','jyback','jycom','kyfront','kyback','kycom']
        for ns_name in ns_list:
            ns_obj=panji_k8s_model.objects.get(namespace=ns_name)
            deployment_list=ns_obj.get_deployment_list('')
            for deployment_item in deployment_list['data']['items']:
                return_item={}
                return_item['ns_name']=ns_name
                return_item['name']=deployment_item['metadata']['name']
                return_item['updatedImage']=deployment_item['spec']['template']['spec']['containers'][0]['image']
                updated_yaml_dict=deployment_item['spec']['template']['spec']['containers'][0]
                return_item['updatedYaml']=json.dumps(updated_yaml_dict,indent=4).replace("'","''")
                sql=sql_template_select.format(ns_name=ns_name,name=return_item['name'])
                sql_result=shsnc_sql(sql)
                if sql_result==0:
                    
                    return_item['originalImage']='new'
                    return_item['originalYaml']='new'
                    return_list['data'].append(return_item)
                else:
                    sql_result=sql_result[0]['JSON_STR']
                    origin_yaml_dict=json.loads(sql_result)
                    if DeepDiff(origin_yaml_dict,updated_yaml_dict,ignore_order=True):
                        return_item['originalImage']=origin_yaml_dict['image']
                        return_item['originalYaml']=json.dumps(origin_yaml_dict,indent=4)
                        return_list['data'].append(return_item)
        return JsonResponse(return_list,safe=False)

2.2 表配置检查
通过版本上线检查工具表配置检查,可对云化系统核心数据库核心表内数据更新情况进行直接的展示。只要有上线更新的表内数据与记录不同,便会在表配置检查工具中体现。
通过旁边的展开,可以看到表内书记有何不同,在与上线人员核对无误后,即可更新配置,平台将会记录最新版本。
代码如下:
if request.method == "GET":
        return_list={
            "data":[]
        }
        db_table_list=[
            {"db_name":"hbyydba2","db_user":"tbcs","table_name":"INT_C2BHTTP_ROUTE","condition_str":"t.status=1"},
            {"db_name":"hbyydba2","db_user":"tbcs","table_name":"parameter_value","condition_str":"t.paramvalue like '%http://%' and t.status=1"},
            {"db_name":"hbyydba2","db_user":"tbcs","table_name":"dict_item","condition_str":"(t.dictname like '%%http://%%' or t.description like '%%http://%%') and t.status=1"},
            {"db_name":"hbiboss1","db_user":"ibosstbcs","table_name":"cb_sys_origin","condition_str":"t.urlgate like 'http%'"},
            {"db_name":"hbyydba2","db_user":"common","table_name":"cb_sp_bizdefine_origin","condition_str":"t.urlgate like 'http%'"}]
        for db_table_item in db_table_list:
            db_name=db_table_item['db_name']
            db_user=db_table_item['db_user']
            table_name=db_table_item['table_name']
            sql_str="select t.*,t.rowid from "+db_user+"."+table_name+" t where "+db_table_item["condition_str"]
            sql_result_list=db_run[db_name](sql_str)
            tasks=[]
            with ThreadPoolExecutor(max_workers=20ast:
                for sql_result_line in sql_result_list:
                    tasks.append(t.submit(shangxian_panji_check_db_config_data_running_task,db_name,db_user,table_name,sql_result_line,))
                for task in as_completed(tasks):
                    if task.result():
                        return_list['data'].append(task.result())
        return JsonResponse(return_list,safe=False)

2.3 磐基API检查
通过点击全部检查,可以直接看到当前k8s API接口是否正常,当版本更新发现有API检查失败时,可以即时和上线人员确认,维持业务连续性。
代码如下:
defcheck_panji_api(request):
    if request.method == "GET":
        return render(request, 'check_api.html')
    elif request.method == "POST":
        panji_api_kind=request.POST.get('panji_api_kind')
        ns_name=request.POST.get('ns_name')
        ns_obj=panji_k8s_model.objects.get(namespace=ns_name)
        result=ns_obj.panji_api_check(panji_api_kind)
        if result:
            return JsonResponse({'code':1,'msg':''},safe=False)
        else:
            return JsonResponse({'code':0,'msg':''},safe=False)


END


本文作者:陈 鹏(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论