SuperAPI AI 工具集

infrahub-managing-checks

编程与开发

查看项目

更新于 10-16 03:11

技能介绍

用途:为 Infrahub 的 proposed change 流水线编写、修改和调试 check(校验逻辑)。check 由三部分组成:GraphQL 查询文件、继承 InfrahubCheck 的 Python 类、以及 .infrahub.yml 配置;只要 check 记录任何错误,对应的 proposed change 就无法合并。适用于编写变更校验逻辑、构建数据质量守卫(如机架冲突检测)、全局 check(校验某类型全部对象)、定向 check(校验特定分组对象)、以及排查 check 失败或理解其生命周期。

主要能力与要点:Python 类需设置 query = "<query_name>" 并实现 validate(),通过 self.log_error() 报错;只想标注而不阻塞合并时用 self.log_info(),不存在 log_warning()。查询名绑定在 Python 类上而非 check_definitions,后者不接受 query: 字段,否则整个仓库配置校验失败。若 check 通过 SDK 读取对象,应使用生成的 protocol 类(如 client.get(DcimDevice, ...)),而非字符串 kind。

用法流程:明确校验目标(全局或定向)→ 编写 .gql 查询 → 实现 Python 类 → 在 .infrahub.yml 的 check_definitions 注册 → 添加 YAML 驱动的测试 → 用 infrahubctl check 针对特性分支本地验证。

限制:优先使用更轻量的层次表达约束;单属性唯一性、必填、枚举或正则应由 schema 约束承担;仅靠 GraphQL 查询加简单 if 判断即可的,不必写 Python check。Python check 只在 proposed change 流水线内运行,通过其他路径写入的坏数据会绕过检查。一次 check 只执行一个查询、没有延迟获取,涉及关联节点状态的比较必须在查询中遍历关系取得。校验依赖 schema 侧配合:属性需在 schema 节点同名暴露,关系两侧需有匹配标识符,定向 check 需在 .infrahub.yml 注册 CoreStandardGroup 作为 targets 并映射 parameters。测试框架、本地命令细节及更多示例请参见资料中引用的各规则与参考文件。