登录
首页 >  Golang >  Go问答

没有使用集群时如何对开放API格式的yaml进行验证?

来源:stackoverflow

时间:2024-02-23 18:15:26 338浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《没有使用集群时如何对开放API格式的yaml进行验证?》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我已经构建了一个开放 api 格式的架构:

type test_manifest struct {
    metav1.typemeta
    metav1.objectmeta
    spec spec
}

type spec struct {
    policies  []string
    resources resources
    results   []results
    variables variables
}

这不是完整的架构,只是其中的一部分。 下面是实际的 yaml 文件:

apiversion: cli.kyverno.io/v1beta1
kind: kyvernotest
metadata:
  name: test-check-nvidia-gpus
  labels:
    foolabel: foovalue
  annotations:
    fookey: foovalue

我正在尝试验证用户传入的 yaml 文件,我可以将此 yaml 转换为 json,然后验证字段的值,但我不知道如何验证字段本身,我的意思是如果用户写 name1 而不是 name 那么如何在其上显示错误。基本上如何验证密钥。

这是我为值验证实现的内容:

test := "cmd/cli/kubectl-kyverno/test/test.yaml"
    yamlFile, err := ioutil.ReadFile(test)
    if err != nil {
        fmt.Printf("Error: failed to read file %v", err)
    }
    policyBytes, err1 := yaml.ToJSON(yamlFile)
    if err1 != nil {
        fmt.Printf("failed to convert to JSON")
    }
    tests := &kyvernov1.Test_manifest{}
    if err := json.Unmarshal(policyBytes, tests); err != nil {
        fmt.Printf("failed to decode yaml")
    }
    if tests.TypeMeta.APIVersion == "" {
        fmt.Printf("skipping file as tests.TypeMeta.APIVersion not found")
    }
    if tests.TypeMeta.Kind == "" {
        fmt.Printf("skipping file as tests.TypeMeta.Kind not found")
    } else if tests.TypeMeta.Kind != "KyvernoTest" {
        fmt.Printf("skipping file as tests.TypeMeta.Kind is not `KyvernoTest`")
    }

此外,我们希望此验证在集群外部进行。


正确答案


我想到两件事:

  1. 我注意到您正在尝试手动构建 k8s API 扩展,这需要大量返工,我建议您使用一个可以为您处理此问题的框架。这是推荐的、经常使用的最佳实践。这太复杂了,无法手动完成。这里有一些资源。 (kube-builderoperator-sdk)。这些解决方案也是基于开放 API 的。他们将让您在一个简单的模板中定义架构,并为您生成所有验证和 API + 控制器代码。
  2. 如果您需要更多验证和健全性测试,通常可以在集群中的准入控制器的帮助下完成。它拦截传入的请求,并在 API 服务器处理该请求之前对其执行操作。 (用于验证、合规性、策略执行、身份验证等)您可以阅读有关准入控制器的更多信息 here

以上就是《没有使用集群时如何对开放API格式的yaml进行验证?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>