前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CUE-云原生配置语言

CUE-云原生配置语言

作者头像
tunsuy
发布2024-07-26 19:21:24
110
发布2024-07-26 19:21:24
举报
文章被收录于专栏:有文化的技术人

CUE 是一种服务于云化配置的强类型配置语言,由 Go team 成员 Marcel van Lohiuzen 结合 BCL 及多种其他语言研发并开源,可以说是 BCL 思路的开源版实现CUE 是一种服务于云化配置的强类型配置语言,由 Go team 成员 Marcel van Lohiuzen 结合 BCL 及多种其他语言研发并开源,可以说是 BCL 思路的开源版实现

https://cuelang.org/docs/concept/popular-guides/#common-use-cases

Cue的语法类似于JSON,但提供了更多的类型检查和验证功能。Cue不是基于Go语言,但是它的实现是用Go编写的,而且它可以与Go语言集成。

Cue语言的一个主要特点是它支持声明式的数据验证和约束。这意味着你可以用Cue来定义你的数据结构和数据的约束条件,然后Cue会根据这些约束条件进行类型检查和数据验证,以确保你的数据符合预期的规范。这些功能使得Cue非常适合用于数据处理和数据验证场景,例如配置文件、API参数验证、数据转换等。

在Cue中,你可以定义结构体、列表、枚举等数据类型,并且可以在这些数据类型中添加约束条件,例如正则表达式、最大长度、最小值等等。Cue还支持函数和表达式,这使得你可以编写复杂的验证逻辑和转换逻辑。

如果你想在Go程序中使用Cue,你可以使用Cue的Go SDK。Go SDK提供了一组API,用于加载和解析Cue定义的数据结构,进行类型检查和数据验证,并将验证结果返回给你的Go程序。你还可以使用Cue来生成Go代码,以便在Go程序中使用Cue定义的数据结构和验证规则。

在kubevela使用:

代码语言:javascript
复制
template: |
  parameter: {
      domain: string
      http: [string]: int
  }

  // trait template can have multiple outputs in one trait
  outputs: service: {
      apiVersion: "v1"
      kind:       "Service"
      spec: {
          selector:
              app: context.name
          ports: [
              for k, v in parameter.http {
                  port:       v
                  targetPort: v
              },
          ]
      }
  }

  outputs: ingress: {
      apiVersion: "networking.k8s.io/v1beta1"
      kind:       "Ingress"
      metadata:
          name: context.name
      spec: {
          rules: [{
              host: parameter.domain
              http: {
                  paths: [
                      for k, v in parameter.http {
                          path: k
                          backend: {
                              serviceName: context.name
                              servicePort: v
                          }
                      },
                  ]
              }
          }]
      }
  }

可以看到,只需要传入 parameter,就可以得到包含 Service和 Ingress的 output

在k8s中的使用: CUE 的另一大杀器,可以针对原生 Kubernetes 源码生成描述 cue 文件,所有 k8s 资源相关的配置文件,都可以天然地拥有 schema 校验。具体教程可以查看 Kubernetes tutorial。

代码语言:javascript
复制
package templates

import (
 apps "k8s.io/api/apps/v1"
)

deployment: apps.#Deployment

deployment: {
 apiVersion: "apps/v1"
 kind:       "Deployment"
 metadata: {
  name:   deployment_name
  labels: _labels
 }
...

类似这个例子中,我们定义的 deployment 将会通过 apps.#Deployment 校验,轻松检测出不合法的字段。理论上,你可以针对多个不同版本的 k8s 资源都生成 cue 文件,并且都作为 deployment 的模型定义,这样可以实现资源定义的多版本兼容能力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有文化的技术人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档