CUE-云原生配置语言

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使用:

template: |parameter: {domain: stringhttp: [string]: int}// trait template can have multiple outputs in one traitoutputs: service: {apiVersion: "v1"kind:       "Service"spec: {selector:app: context.nameports: [for k, v in parameter.http {port:       vtargetPort: v},]}}outputs: ingress: {apiVersion: "networking.k8s.io/v1beta1"kind:       "Ingress"metadata:name: context.namespec: {rules: [{host: parameter.domainhttp: {paths: [for k, v in parameter.http {path: kbackend: {serviceName: context.nameservicePort: v}},]}}]}}

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

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

package templatesimport (apps "k8s.io/api/apps/v1"
)deployment: apps.#Deploymentdeployment: {apiVersion: "apps/v1"kind:       "Deployment"metadata: {name:   deployment_namelabels: _labels}
...

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI OS

一,概念 AI OS, 或AI for OS,也就是近一年来伴随着人工智能的热度而衍生出的一个新的概念 - 人工智能操作系统。 为什么提出AI OS的概念? 这是因为人工智能技术的发展势头太过迅猛,尤其在深度学习、大模型等AI技术的突破后&…

微信小程序:vant-weapp 组件库、css 变量

vant-weapp 组件库 前往 vant-weapp 官网 npm 使用限制:不支持依赖于 Node.js 内置库、浏览器内置对象、C 插件 的包。 安装 vant-weapp # 通过 npm 安装 npm i vant/weapp -S --production# 通过 yarn 安装 yarn add vant/weapp --production# 安装 0.x 版本 npm i…

Mac环境报错 error: symbol(s) not found for architecture x86_64

Mac 环境Qt Creator报错 error: symbol(s) not found for architecture x86_64 错误信息 "symbol(s) not found for architecture x86_64" 通常是在编译或链接过程中出现的问题。这种错误提示通常涉及到符号未找到或者是因为编译器没有找到适当的库文件或函数定义。 …

powe bi界面认识及矩阵表基本操作 - 1

powe bi界面认识及矩阵表操作 1. 界面认识1.1 选择数据源1.2 选择相关表及点击加载1.3 表字段显示位置1.4 表属性按钮位置1.5 界面布局按钮认识 2. 矩阵表基本操作2.1 选择矩阵表2.2 创建矩阵表2.3 设置字体大小2.4 行填充:修改高度2.5 列宽:设置列的宽度…

【下厨记】青椒土豆丝的做法和写代码之间的关系

在gap year 的尾声,我决定给自己报个厨艺培训班,精进一下厨艺。讲道理,在这样一个充斥着代码的社区写怎么做土豆丝是不是很不搭界,但其实没有,且听我娓娓道来。论,青椒土豆丝做法和写代码之间的关系。 1.找…

git怎么把本地仓库提交到远程仓库

要把本地仓库的内容推送到远程仓库,你需要先设置远程仓库的URL,然后使用git push命令。以下是步骤和示例代码: 1、在本地创建一个新的git仓库或者进入一个已存在的git仓库目录。 2、添加远程仓库(如果尚未添加)。使用…

使用RedisTemplate操作executePipelined

前言 RedisTemplate 是 Spring 提供的用于操作 Redis 的模板类,它封装了 Redis 的连接、连接池等管理,并提供了一系列的操作方法来简化 Redis 的使用。其中,executePipelined 方法是 RedisTemplate 中的一个高级特性,用于支持 Re…

【Python实战因果推断】55_因果推理概论5

目录 Consistency and Stable Unit Treatment Values Violations Causal Quantities of Interest Consistency and Stable Unit Treatment Values 在上述方程中,隐含着两个基本假设。第一个假设意味着潜在结果与处理是一致的:当时,。换句…

为什么有了MAC还需要IP?

目录 MAC地址(Media Access Control Address)IP地址(Internet Protocol Address)为什么需要两者? IP地址和MAC地址在网络通信中扮演着不同的角色,它们各自有独特的功能和用途。下面是它们的主要区别和为什么…

VitePress Config.mts 详细讲解

VitePress 是一个基于 Vite 的静态站点生成器,专为技术文档和博客设计。它继承了 Vite 的快速开发体验,并提供了一套简洁的配置选项。在本文中,我们将深入探讨 VitePress 的 config.mts 配置文件,这是中高级开发者定制站点的关键所…

详解Vue中nextTick的原理与作用

Vue中的nextTick是一个非常重要的API,它允许开发者延迟回调函数的执行直到下次DOM更新循环之后。这一机制在Vue开发中非常有用,特别是在处理DOM更新和异步操作时。下面将详细解释nextTick的原理与作用。 原理 Vue的DOM更新是异步进行的。当数据发生变化…

Vue3相比于Vue2进行了哪些更新

1、响应式原理 vue2 vue2中采用 defineProperty 来劫持整个对象,然后进行深度遍历所有属性,给每个属性添加getter和setter,结合发布订阅模式实现响应式。 存在的问题: 检测不到对象属性的添加和删除数组API方法无法监听到需要对…

Shader笔记1:基础概念

有相当一部分来自shader圣经 Base of CG Concepts Tangent, Normal and Binormal N:法线(Normal, N)垂直于表面 T:切线(Tangent, T)与U方向同向 B:副切线(BiTangent, B&#xff09…

ADS 使用教程(十六)Using Sliders for Data Processing

上一篇:ADS 使用教程(十五)Multi-Dimensional Data Processing in ADS 在这一节,我们来谈论一下如何在进行多维数据处理时使用滑块(Sliders)来进行数据处理和分析。通过该方法,我们可以通过拖动…

python-docx 如何将列表中的值提取到段落中的run以及保存为多个文档?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

VSCode C++练习

VSCode 配置 C++ 环境(Windows) 参考http://t.csdnimg.cn/27G0Z 1. 配置 C++ 编译器 首先需要安装 C++ 编译器。在 Windows 上,可以安装 MinGW 或者 Visual Studio;在 MacOS 上,可以安装 Clang 或者 Xcode;在 Linux 上,可以安装 GCC。 1.2 添加环境变量 将 mingw64…

Clion开发STM32——移植FreeModbus

STM32型号 :STM32H743VIT6 FreeModbus版本 :1.6 使用工具:stm32cubeMX,Clion 使用STM32作从机,模式:RTU 网上用keil的比较多,用Clion的比较少,如果你也用Clion,那么希望…

【LLM】-07-提示工程-聊天机器人

目录 1、给定身份 1.1、基础代码 1.2、聊天机器人 2、构建上下文 3、订餐机器人 3.1、窗口可视化 3.2、构建机器人 3.3、创建JSON摘要 利用会话形式,与具有个性化特性(或专门为特定任务或行为设计)的聊天机器人进行深度对话。 在 Ch…

AprilTag视觉定位的Android实现

AprilTag是一个视觉基准库,在AR,机器人,相机校准领域广泛使用。通过特定的标志(与二维码相似,但是降低了复杂度以满足实时性要求),可以快速地检测标志,并计算相对位置。 Apriltag提…

鸿蒙仓颉语言【cryptocj 库】(介绍与SHA、MD5、HMAC摘要算法)

cryptocj 库 介绍 cryptocj 是一个安全的密码库,包括常用的密码算法、常用的密钥生成和签名验证。 该库是对 C 语言的 openSSL 封装的仓颉加密算法 1 提供SHA、MD5、HMAC摘要算法。 前置条件:NA 场景: OHOS, Linux&#xff…