专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

从0到1开发自动化运维平台Kubernetes集群和应用管理

  今天还是一些CRUD操作,继续分享k8s集群和应用的管理。Kubernetes和应用模型classKubernetesCluster(TimeAbstract):K8s集群配置namemodels。CharField(maxlength100,uniqueTrue,verbosename集群名称)versionmodels。JSONField(defaultdict,verbosename版本,helptext{core:1。14,apiversion:appsv1}core:集群版本apiversion:API版本)descmodels。TextField(nullTrue,blankTrue,verbosename集群描述)configmodels。JSONField(defaultdict,verbosename集群配置)environmentmodels。ManyToManyField(Environment,relatednameenvk8s,blankTrue,verbosename环境)productmodels。ManyToManyField(Product,relatednameproductk8s,blankTrue,verbosename产品)idcmodels。ForeignKey(Idc,blankTrue,nullTrue,ondeletemodels。PROTECT,verbosenameIDC)defstr(self):returnself。nameclassExtMeta:relatedTruedashboardTrueiconk8sclassMeta:defaultpermissions()ordering〔id〕verbosenameK8s集群verbosenamepluralverbosename管理defgetdefaultvalue():return{key:default,value:default}应用部署方式GDEPLOYTYPE((nonk8s,非Kubernetes部署),(docker,Docker部署),(k8s,Kubernetes部署))GONLINECHOICE((0,未上线),(1,已上线),(2,部署中),(3,部署异常),(9,已申请上线))classMicroApp(TimeAbstract):product。project。microappappidmodels。CharField(maxlength250,dbindexTrue,uniqueTrue,verbosename应用ID,helptext应用唯一标识,无需填写)namemodels。CharField(maxlength128,verbosename应用)aliasmodels。CharField(maxlength128,blankTrue,verbosename别名)projectmodels。ForeignKey(Project,ondeletemodels。PROTECT,nullTrue,blankTrue,verbosename项目)creatormodels。ForeignKey(User,ondeletemodels。PROTECT,nullTrue,blankTrue,verbosename创建者,helptext前端不需要传递)repomodels。JSONField(defaultdict,verbosename仓库地址,helptext{name:name,description:,pathwithnamespace:,httpurltorepo:url})targetmodels。JSONField(defaultgetdefaultvalue,verbosenameJAR包配置,helptext默认:default,{default:default,custom:xxxa。war})extramembersmodels。JSONField(defaultgetdefaultextramembers,verbosename额外成员组,helptext{name:自定义成员组1,members:〔1,2,3〕})categorymodels。CharField(maxlength128,blankTrue,nullTrue,verbosename应用分类)templatemodels。JSONField(defaultdict,verbosenameK8sDeployment模板,helptextKubernetesDeployment部署模板配置)languagemodels。CharField(maxlength32,defaultjava,verbosename开发语言)multipleappmodels。BooleanField(defaultFalse,blankTrue,verbosename多应用标志)multipleidsmodels。JSONField(defaultlist,verbosename多应用关联ID列表)dockerfilemodels。JSONField(defaultgetdefaultvalue,verbosenameDockerfile配置,helptext默认:{default:null},可选:{default默认:null,project使用项目Dockerfile:project,custom自定义Dockerfile:})onlinemodels。BooleanField(defaultTrue,blankTrue,verbosename上线下线,helptext应用上线下线状态标记,下线状态的应用禁止发布。)descmodels。TextField(verbosename描述,nullTrue,blankTrue)notifymodels。JSONField(defaultdict,verbosename消息通知)caneditmodels。JSONField(defaultlist,verbosename管理人员,helptext有权限编辑该应用的人员ID格式为数组,如〔1,2〕)isk8smodels。CharField(maxlength8,defaultk8s,choicesGDEPLOYTYPE,verbosename部署方式,helptextf默认k8s,可选:{dict(GDEPLOYTYPE)})modulesmodels。JSONField(defaultlist,verbosename工程模块)defstr(self):return〔s〕s(self。name,self。alias)classExtMeta:relatedTruedashboardTrueiconcomponentclassMeta:defaultpermissions()ordering〔createdtime〕verbosename应用verbosenamepluralverbosename管理classAppInfo(TimeAbstract):uniqtag:product。project。microapp。envuniqtagmodels。CharField(maxlength128,uniqueTrue,verbosename唯一标识,helptext前端留空,无需传值)appmodels。ForeignKey(MicroApp,blankTrue,nullTrue,ondeletemodels。PROTECT,verbosename应用)environmentmodels。ForeignKey(Environment,ondeletemodels。PROTECT,nullTrue,verbosename环境)branchmodels。CharField(maxlength64,blankTrue,nullTrue,verbosename默认构建分支)allowcibranchmodels。JSONField(defaultlist,verbosename允许构建的分支,helptext存储数组格式,具体的分支名;默认〔〕,表示允许所有分支。)allowcdbranchmodels。JSONField(defaultlist,verbosename允许发布的分支,helptext存储数组格式,具体的分支名;默认〔〕,表示允许所有分支。)buildcommandmodels。CharField(maxlength250,blankTrue,nullTrue,verbosename构建命令,helptext根据应用开发语言,从getKey(LANGUAGE)获取数据,取出extra字段的build值)kubernetesmodels。ManyToManyField(KubernetesCluster,relatednamek8sapp,throughKubernetesDeploy,verbosenameK8s集群)hostsmodels。JSONField(defaultlist,verbosename部署主机,helptext部署主机,格式:〔〕)templatemodels。JSONField(defaultdict,verbosenameK8sDeployment模板,helptext继承自当前应用的template字段,数据格式为对象字段说明:type:01,0表示继承应用模板,template为空字典;1表示自定义模板示例:{type:0,template:{}}){0:禁用,1:启用}isenablemodels。SmallIntegerField(default1,verbosename启用,helptext状态{0:禁用,1:启用},默认值为1)descmodels。TextField(verbosename描述,nullTrue,blankTrue)caneditmodels。JSONField(defaultlist,verbosename管理人员,helptext有权限编辑该应用的人员ID格式为数组,如〔1,2〕)onlinemodels。SmallIntegerField(default0,choicesGONLINECHOICE,verbosename是否上线,helptextf默认为0,即未上线可选项:{GONLINECHOICE})defstr(self):returnself。uniqtagpropertydefnamespace(self):returnf{self。environment。name。replace(,)}{self。app。project。name。replace(,)}。lower()propertydefjenkinsjobname(self):try:jobnamef{self。environment。name}{self。app。category。split(。)〔1〕}{self。app。project。name}{self。app。name。split(。)〔1〕}。lower()exceptAppInfo。DoesNotExist:jobnamereturnjobnameclassExtMeta:relatedTruedashboardTrueclassMeta:defaultpermissions()ordering〔updatetime,id〕verbosename应用模块verbosenamepluralverbosename管理classKubernetesDeploy(TimeAbstract):appinfomodels。ForeignKey(AppInfo,relatednameappinfo,nullTrue,ondeletemodels。CASCADE)kubernetesmodels。ForeignKey(KubernetesCluster,relatednameappk8s,nullTrue,ondeletemodels。CASCADE)onlinemodels。SmallIntegerField(default0,choicesGONLINECHOICE,verbosename是否上线,helptextf默认为0,即未上线可选项:{GONLINECHOICE})versionmodels。CharField(maxlength250,blankTrue,nullTrue,verbosename当前版本)defstr(self):returnss(self。appinfo。app。appid,self。kubernetes。name)classMeta:defaultpermissions()classDataDict(CommonParent):keymodels。CharField(maxlength80,uniqueTrue,verbosename键)valuemodels。CharField(maxlength80,verbosename值)extramodels。TextField(nullTrue,blankTrue,default,verbosename额外参数)descmodels。CharField(maxlength255,blankTrue,nullTrue,verbosename备注)defstr(self):returnself。valueclassMeta:defaultpermissions()verbosename字典verbosenamepluralverbosename管理编写序列化器importjsonfromtypingimportListfromrestframeworkimportserializersfromdjango。dbimporttransactionfromdjango。contrib。auth。modelsimportUserfromcmdb。modelsimportProduct,Project,Environment,KubernetesCluster,MicroApp,AppInfo,KubernetesDeployclassKubernetesClusterListSerializers(serializers。ModelSerializer):configserializers。SerializerMethodField()defgetconfig(self,instance):returnjson。loads(instance。config)classMeta:modelKubernetesClusterfieldsallclassKubernetesClusterSerializers(serializers。ModelSerializer):classMeta:modelKubernetesClusterfieldsallclassMicroAppListSerializers(serializers。ModelSerializer):projectinfoserializers。SerializerMethodField()appinfoserializers。SerializerMethodField()creatorinfoserializers。SerializerMethodField()extrateaminfoserializers。SerializerMethodField()defgetprojectinfo(self,instance):projectinstance。projectreturn{project:{id:project。id,alias:project。alias},product:{id:project。product。id,alias:project。product。alias}}defgetappinfo(self,instance):return〔{id:i。id,envalias:i。environment。alias,env:{name:i。environment。name,id:i。environment。id},online:i。online}foriininstance。appinfoset。all()〕defgetcreatorinfo(self,instance):try:return{id:instance。creator。id,firstname:instance。creator。firstname,username:instance。creator。username}exceptBaseExceptionase:return{id:,firstname:,username:}defgetextrateaminfo(self,instance):data{}fork,vininstance。extramembers。items():data〔k〕〔{id:i。id,name:i。name,firstname:i。firstname,username:i。username}foriinUser。objects。filter(idinv)〕returndataclassMeta:modelMicroAppfieldsallclassMicroAppSerializers(serializers。ModelSerializer):classMeta:modelMicroAppfieldsallreadonlyfields(appid,)staticmethoddefperformextendsave(validateddata):defdefaultvalue(fields:List):forfieldinfields:ifvalidateddata。get(field):ifvalidateddata〔field〕。get(key)!custom:validateddata〔field〕〔value〕validateddata〔field〕〔key〕returnvalidateddatavalidateddatadefaultvalue(〔dockerfile,target〕)validateddata〔appid〕f{validateddata〔project〕。product。name}。{validateddata〔project〕。name}。{validateddata〔name〕}returnvalidateddatadefcreate(self,validateddata):instanceMicroApp。objects。create(canedit〔validateddata〔creator〕。id〕,self。performextendsave(validateddata))returninstancedefupdate(self,instance,validateddata):returnsuper()。update(instance,self。performextendsave(validateddata))classAppInfoListSerializers(serializers。ModelSerializer):appMicroAppSerializers()kubernetesinfoserializers。SerializerMethodField()defgetkubernetesinfo(self,instance):serializerKubernetesDeploySerializers(dataKubernetesDeploy。objects。filter(appinfoinstance。id),manyTrue)serializer。isvalid()returnserializer。dataclassMeta:modelAppInfofieldsallclassAppInfoSerializers(serializers。ModelSerializer):classMeta:modelAppInfofieldsalldefperformextendsave(self,validateddata,args,kwargs):ifvalidateddata。get(app,None)andvalidateddata。get(environment,None):validateddata〔uniqtag〕f{validateddata〔app〕。appid}。{validateddata〔environment〕。name。split()〔1〕。lower()}ifkwargs。get(instance,None):kubernetesself。initialdata。get(kubernetes)bulk〔〕forkidinkubernetes:ksKubernetesCluster。objects。get(idkid)bulk。append(KubernetesDeploy(appinfokwargs〔instance〕,kubernetesks))KubernetesDeploy。objects。bulkcreate(bulk,ignoreconflictsTrue)returnvalidateddatatransaction。atomicdefcreate(self,validateddata):instanceAppInfo。objects。create(self。performextendsave(validateddata))ifkubernetesinself。initialdata:self。performextendsave(validateddata,{instance:instance})returninstancetransaction。atomicdefupdate(self,instance,validateddata):KubernetesDeploy。objects。filter(appinfoinstance)。delete()instance。dict。update(self。performextendsave(validateddata,{instance:instance}))instance。save()returninstance编写视图fromrestframework。responseimportResponsefromrestframework。decoratorsimportactionfromdjango。dbimporttransactionfromcmdb。modelsimportProduct,Project,Environment,KubernetesCluster,MicroApp,AppInfofromcmdb。serializersimportAppInfoListSerializers,AppInfoSerializers,KubernetesClusterListSerializers,KubernetesClusterSerializers,MicroAppListSerializers,MicroAppSerializersfromcommon。extends。decoratorsimportcmdbappuniquecheckclassKubernetesClusterViewSet(viewsets。ModelViewSet):Kubernetes集群视图Kubernetes集群权限{:(k8sclusterall,k8s集群管理)},{get:(k8sclusterlist,查看k8s集群)},{post:(k8sclustercreate,创建k8s集群)},{put:(k8sclusteredit,编辑k8s集群)},{patch:(k8sclusteredit,编辑k8s集群)},{delete:(k8sclusterdelete,删除k8s集群)}permsmap({:(admin,管理员)},{:(k8sclusterall,k8s集群管理)},{get:(k8sclusterlist,查看k8s集群)},{post:(k8sclustercreate,创建k8s集群)},{put:(k8sclusteredit,编辑k8s集群)},{patch:(k8sclusteredit,编辑k8s集群)},{delete:(k8sclusterdelete,删除k8s集群)})querysetKubernetesCluster。objects。all()serializerclassKubernetesClusterSerializersdefgetserializerclass(self):ifself。actionin〔list,retrieve〕:returnKubernetesClusterListSerializersreturnKubernetesClusterSerializersclassMicroAppViewSet(viewsets。ModelViewSet):项目应用视图项目应用权限{:(microappall,应用管理)},{get:(microapplist,查看应用)},{post:(microappcreate,创建应用)},{put:(microappedit,编辑应用)},{patch:(microappedit,编辑应用)},{delete:(microappdelete,删除应用)}permsmap({:(admin,管理员)},{:(microappall,应用管理)},{get:(microapplist,查看应用)},{post:(microappcreate,创建应用)},{put:(microappedit,编辑应用)},{patch:(microappedit,编辑应用)},{delete:(microappdelete,删除应用)})querysetMicroApp。objects。all()serializerclassMicroAppSerializersdefgetserializerclass(self):ifself。actionin〔list,retrieve〕:returnMicroAppListSerializersreturnMicroAppSerializerscmdbappuniquecheck()defcreate(self,request,args,kwargs):创建应用提交参数创建:{}try:request。data〔name〕request。data〔name〕。strip()。replace(,)exceptBaseExceptionase:logger。error(exception,str(e))serializerself。getserializer(datarequest。data)ifnotserializer。isvalid():returnResponse({code:40000,status:failed,message:serializer。errors})try:self。performcreate(serializer)exceptBaseExceptionase:logger。error(e)returnResponse({code:50000,status:failed,message:str(e)})data{data:serializer。data,status:success,code:20000}returnResponse(data)transaction。atomicdefperformcreate(self,serializer):serializer。save(creatorself。request。user)action(methods〔POST〕,urlpathrelated,detailFalse)defapprelated(self,request):应用关联传递参数:ids:待关联应用id数组target:目标应用idtry:targetrequest。data。get(target,None)idsrequest。data。get(ids,None)iftarget:instanceself。queryset。get(idtarget)ids。extend(instance。multipleids)self。queryset。filter(idinlist(set(ids)))。update(multipleappTrue,multipleidslist(set(ids)))returnResponse({code:20000,data:应用关联成功。})exceptBaseExceptionase:logger。error(err,e)returnResponse({code:50000,data:关联应用异常,请联系管理员!})action(methods〔POST〕,urlpathunrelated,detailFalse)defappunrelated(self,request):取消应用关联传递参数:id:应用idtry:instanceself。queryset。filter(idrequest。data。get(id))获取关联应用ID列表idsinstance〔0〕。multipleidsids。remove(instance〔0〕。id)iflen(ids)1:如果关联应用只剩下一个,则一起取消关联self。queryset。filter(idininstance〔0〕。multipleids)。update(multipleappFalse,multipleids〔〕)else:更新其它应用的关联应用IDself。queryset。filter(idinids)。update(multipleidsids)取消当前实例应用关联instance。update(multipleappFalse,multipleids〔〕)returnResponse({code:20000,data:应用取消关联成功。})exceptBaseExceptionase:returnResponse({code:50000,data:关联应用异常,请联系管理员!})classAppInfoViewSet(viewsets。ModelViewSet):项目应用服务服务对应着应用的不同环境,即应用每个环境创建一个对应的服务项目应用服务权限{:(microappall,应用管理)},{get:(microapplist,查看应用)},{post:(microappcreate,创建应用)},{put:(microappedit,编辑应用)},{patch:(microappedit,编辑应用)},{delete:(microappdelete,删除应用)}permsmap({:(admin,管理员)},{:(microappall,应用管理)},{get:(microapplist,查看应用)},{post:(microappcreate,创建应用)},{put:(microappedit,编辑应用)},{patch:(microappedit,编辑应用)},{delete:(microappdelete,删除应用)})querysetAppInfo。objects。all()serializerclassAppInfoSerializersdefgetserializerclass(self):ifself。actionin〔list,retrieve〕:returnAppInfoListSerializersreturnAppInfoSerializersdefcreate(self,request,args,kwargs):request。data〔uniqtag〕defaultserializerself。getserializer(datarequest。data)serializer。isvalid(raiseexceptionTrue)self。performcreate(serializer)dataserializer。datadata{code:20000,status:200,data:data}returnResponse(data)添加装饰器
  细心的朋友应该可以发现,在视图里文件里导入一个自己编写的装饰器
  fromcommon。extends。decoratorsimportcmdbappuniquecheck
  我们先在项目根下创建common目录(venv)ydevopsbackendmkdirpcommonextends(venv)ydevopsbackendtouchcommonextendsdecorators。py
  然后编写装饰器cmdbappuniquecheckfromfunctoolsimportwrapsfromrestframework。responseimportResponsefromcmdb。modelsimportMicroAppdefcmdbappuniquecheck():应用唯一性检查appid:{product。name}。{app。name}defcheckapp(product,name):try:ifMicroApp。objects。filter(projectproductidproduct,namename)。exists():存在应用returnTrueexceptBaseExceptionase:passreturnFalsedefdecorator(func):wraps(func)defwrapper(self,request,args,kwargs):ifcheckapp(request。data〔product〕,request。data〔name〕):returnResponse({code:50000,message:f该产品下已存在〔{request。data〔name〕}〕同名应用。})returnfunc(self,request,args,kwargs)returnwrapperreturndecorator添加路由fromdjango。contribimportadminfromdjango。urlsimportpath,includefromcmdb。view。viewcmdbimportAppInfoViewSet,KubernetesClusterViewSet,MicroAppViewSetfromrestframework。routersimportDefaultRouterfromcmdb。viewsimportRegionViewSet,IdcViewSet,ProductViewSet,ProjectViewSet,EnvironmentViewSetrouterDefaultRouter()router。register(region,RegionViewSet)router。register(assetidc,IdcViewSet)router。register(product,ProductViewSet)router。register(project,ProjectViewSet)router。register(environment,EnvironmentViewSet)router。register(appservice,AppInfoViewSet)router。register(app,MicroAppViewSet)router。register(kubernetes,KubernetesClusterViewSet)urlpatterns〔path(admin,admin。site。urls),path(api,include(router。urls)),〕迁移数据表(venv)ydevopsbackendpythonmanage。pymakemigrationsMigrationsforcmdb:appscmdbmigrations0003appinfokubernetesclustermicroappkubernetesdeployandmore。pyCreatemodelAppInfoCreatemodelKubernetesClusterCreatemodelMicroAppCreatemodelKubernetesDeployAddfieldapptoappinfoAddfieldenvironmenttoappinfoAddfieldkubernetestoappinfo(venv)ydevopsbackendpythonmanage。pymakemigrationsMigrationsforcmdb:appscmdbmigrations0004datadict。pyCreatemodelDataDict(venv)ydevopsbackendpythonmanage。pymigrateOperationstoperform:Applyallmigrations:admin,auth,cmdb,contenttypes,sessionsRunningmigrations:Applyingcmdb。0003appinfokubernetesclustermicroappkubernetesdeployandmore。。。OKApplyingcmdb。0004datadict。。。OK运行项目(venv)ydevopsbackendpythonmanage。pyrunserver0。0。0。0:9000WatchingforfilechangeswithStatReloaderPerformingsystemchecks。。。Systemcheckidentifiednoissues(0silenced)。March23,202322:13:47Djangoversion4。1。7,usingsettingsdevopsbackend。settingsStartingdevelopmentserverathttp:0。0。0。0:9000QuittheserverwithCONTROLC。
  打开浏览器访问http:localhost:9000api就可以看到目前已完成的接口了

辣眼!欧美允许同性选手参加男女双人滑冰上将现两男相拥下面这张有些辣眼睛的图片,来自于加拿大媒体的报道截图加拿大花样滑冰联合会正式宣布,允许同性选手和跨性别选手参加男女混合双人滑比赛。也就是说,以后在加拿大的双人滑比赛中,观众们在冰面李铁案又一铁证如山!武汉俱乐部被罚233万包庇大鱼不如转做污点细想起来,李铁东窗事发,是迟早的事。纸,包不住火,如此浅显的道理,李铁不可能不懂。但他之所以胆子那么大,拿国家荣誉当幌子,一方面无知,一方面这些年太顺了。从球员到执教生涯,李铁给中王者归来的王健林,遇到了许家印的烦恼上市对赌作者杜一兰随着法国20战胜摩洛哥进入决赛对战阿根廷,2022年卡塔尔世界杯进入尾声。35岁的梅西,这次能否捧回大力神杯,成为球迷关注的焦点。球场之外,中国企业成为本届世界杯活动星投票寻找最美家庭图片投票制作平台微信图文投票怎么制作用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序。而活动星投票这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服务,很多用户都很喜欢活动星投票这款软如何解决高频外呼?高频外呼标准打多少?电话销售行业的多少都了解,高频呼出和被投诉举报是引起封号的主要原因。在有些地区,人们一天打电话超过二十个可能会被注意到,超过五十个可能会被屏蔽。所以在日常通话上一小时内最好不要超过这个手机壳很有安全感,走到哪里都有电别论健身人有多严格(via。神店通缉令)届时一定好好犒劳犒劳(via。段子楼)你小子是不是故意的?(via。社会性迷惑)不如自制个火把需要联系的时候放狼烟(via。迷惑行爲大赏)死昨晚消息不少,对大盘影响如何?在美联储加息的当天,暗示明年计划继续加息。鲍威尔警告称,加息还有一段路要走,抗击通胀的战斗并未取得胜利。由于,市场担忧大幅加息将引发经济衰退,昨晚,美股三大指数大幅收跌,均录得数周苹果携手谷歌Mozilla共同开发Speedometer3。0版本IT之家12月16日消息,苹果公司推出的Speedometer是一款非常优秀的网络基准测试工具。苹果公司今天宣布,将和谷歌Mozilla两家公司合作,共同开发Speedometer质懒生活新风尚多家主流媒体集中报道倍轻松产品及研发实力近日,据央视财经经济信息联播栏目最新报道,如今消费市场呈现质懒生活的新趋势,人们对生活品质的要求越来越高,懒人经济正构建起精细和有品质的懒,追求智能产品带来的品质生活体验。在此形势家用桌面音响分享有它尽享天籁之声奋斗了大半辈子,好不容易有了属于自己的小家,当然要把它装饰成自个儿最喜欢的样子。我们家的大小家电都是我精心挑选的,只为了确保能有更高级的家居装饰风格,也为了确保自己住在房里时,能有光威推出新一代PCIe4。0SSD速度可达5000MBs,2TB959元IT之家12月16日消息,据光威官方消息,新款PCIe4。0固态硬盘GLOWAYProfessional系列现已推出,速度可达5000MBs,2TB售价959元。IT之家了解到,该
华为nova20宣传页曝光回归5G还搭载麒麟985XSOC?手机中国新闻华为手机已经多年不支持5G,麒麟处理器也几乎没有踪影,很多人关心华为什么时候能回归5G。华为nova手机10月9日消息,数码博主厂长是关同学曝光了一张华为nova20宣专治网瘾少年?锐捷小白路由器评测易上手,高颜值为家居赋能现代人的生活都不离开网络了,家中有孩子的家庭就更离不开网络了。由于疫情的反复,时不时的线上授课让自制力差的孩子们经常开小差,网课期间偷偷刷抖音玩游戏,学习成绩开始下降。家长们也有各骁龙870神机再降300元真我GTNeo2仅需1999元目前,京东平台骁龙870神机真我GTNeo2又迎来了降价活动,优惠300元最低仅需1999元就能到手。真我GTNeo2在骁龙870机型当中配置算相当出色,是一台相当值得入手的中端性十年来首次!萤石价格突破天花板,相关企业掀起涨价潮2022年的国庆长假后,萤石行业仿佛注入强心剂,各企业正在掀起涨价潮。证券时报e公司记者获悉,伴随着传统制冷剂行业需求的趋好,以及新能源产业拉动,萤石成功捅破过去10多年来的3004AM30场比赛一鸡未吃,17被一雷四响终结冠军梦,PGC晋级队伍确定前言绝地求生PCS7洲际赛东亚赛区的赛程已经全部结束了,相信刚刚的比赛大家看得热血沸腾,最后一场变成了NH,17,BGP和PeRo四支队伍争夺冠军的局面,不料打到中期17和PeRo女排世锦赛16强复赛埃格努砍27分,意大利女排3比0战胜中国女排2022年女排世锦赛16强复赛E组意大利女排vs中国女排,意大利女排14人名单主攻(4人)塞拉,彼得里尼,小菠菜蒂,真纳里。副攻(4人)达内西,博尼法西奥,奇里切拉,卢比安。接应((体育)排球女排世锦赛中国对阵意大利当日,在2022世界女排锦标赛16强E组复赛中,中国队对阵意大利队。10月8日,中国队球员袁心玥(右)在比赛中扣球。新华社记者孟鼎博摄10月8日,中国队球员李盈莹(左)在比赛前出场在希望的田野上秋粮收获进入高峰期日收获量达2700万亩左右央视网消息眼下,全国秋收进度已过四成,日收获量达2700万亩左右,秋粮收获进入高峰期。金秋十月,黑龙江绥化市兰西县16。6万亩大豆喜获丰收。在奋斗镇前锋村,种植大户马晓军的2000探索文旅融合丰富文化业态,山西运城古城融出新风采山西省运城市解州关帝庙景区是山西省第八次旅游发展大会的主会场,苍翠中条山衬托下,一座两层红色建筑格外惹眼,这是9月刚建成的关公数字博物馆。全息投影VR(虚拟现实)等科技手段的运用,CBA三消息辽宁试训臂展天才,李炎哲背摔对手,山西双外不靠谱大家好呀,我是北柠,各位小伙伴们要养成先赞后看的习惯哦!现在辽宁队是CBA联赛中非常重视年轻球员的球队之一,上个赛季球队拿到了总冠军之后,辽宁队就开始了未来10年的计划,特别是这个遇事不决极空间,零经验也可玩转NAS,极空间Z4S旗舰版使用体验遇事不决极空间,零经验也可玩转NAS,极空间Z4S旗舰版使用体验,功能全面,最容易上手和使用的NAS私有云前言说起NAS,一直属于很热但是只有少数人在用的那种。换句话说,就是一直是
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网