使用Cerberus在Python中进行YAML验证

2024-05-26 07:46:38 发布

您现在位置:Python中文网/ 问答频道 /正文

下面我有一个我们的业务线使用的YAML模式文件示例。我们正在使用Jenkins来运行CI/CD作业。 等级库文件格式如下所示:

 azure:  
     method: paas  
      
      
     autoscaling :  
      enabled:  true  
      default : 2  
      minimum : 2  
      maximum : 10  
      rules:    
      
     parameters :  
      webappName : "sample app"  
      pricingTier : "1"  
      capacity    : "2"  
      
      
   vault:  
      - name : "test"  
        type : "static"  
      
   envVariables :  
        Env : "UAT"  

开发人员错误地放置了vault并将其与参数对齐,因此资源没有得到部署。詹金斯的工作也没有出错。 因此,在损失了几天之后,开发人员发现vault应该与Azure在同一条线上,然后在更正此问题并再次运行作业之后,这次部署了资源

因此,我尝试在加载spec文件的Python文件中进行验证。我有一个示例模式验证文件“paas\u app\u service\u Schema.py”,我想用它进行验证。我想将其与Cerberus验证库一起使用

因此,我在python代码中编写了如下函数:

def loaded_specfile_schema_validate(self, file_name):

    v = Validator(file_name,paas_app_service_schema)
    if v.errors:
        logger.error("Errors in schema validation %s" % str(v.errors))
    else:
        logger.info("Validation OK***********")
    return v.validate()

我在python代码的开头也提到了这些:

import yaml
import json

from cerberus import Validator

但在运行Jenkins作业后,我得到以下错误:

raise SchemaError(errors.SCHEMA_ERROR_DEFINITION_TYPE.format(schema))
  cerberus.schema.SchemaError: schema definition for field 'spec_file.yml' must be a dict

是否知道如何修复此错误,以及是否有任何其他方法来解决我的规范文件的此问题,以便如果vault未与azure对齐,或者如果同一行中除了azure、vault和envVariables之外还有其他内容,jenkins作业将抛出错误。如何将此逻辑放入python代码中


Tags: 文件代码nameimportapp示例schema错误