KCL v0.4.6 发布 - 全新的 IDE 插件,Helm/Kustomize/KPT 工具集成
简介
KCL 团队很高兴地宣布 KCL v0.4.6 新版本现在已经可用!本次发布为大家带来了三方面的重点更新:语言、工具链、社区集成 & 扩展支持。
- 使用 IDE 插件提升 KCL 代码编写体验和效率
- Helm/Kustomize/KPT 云原生社区工具集成
- 完善 KCL 多语言 SDK,方便应用程序集成
进一步您可以在 KCL v0.4.6 发布页面 或者 KCL 官方网站 获得下载安装指南和详细发布信息。
KCL 是一个开源的基于约束的记录及函数语言,期望通过成熟的编程语言技术和实践来改进对大量繁杂配置和策略的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更快的自动化集成和良好的生态延展性。
本文重点介绍 KCL v0.4.6 版本的更新内容以及 KCL 社区的近期动态。
语言更新
内置函数更新
KCL 字符串新增 removeprefix
和 removesuffix
成员函数用于去除字符串的前缀和后缀子字符串
data1 = "prefix-string".removeprefix("prefix-") # "string" data2 = "string-suffix".removesuffix("-suffix") # "string"
更多使用方式 详见
编译器提示信息改进
在之前的 KCL 版本中,运行一次 KCL 命令行工具只会显示一个错误信息与警告,在 KCL v0.4.6 版本中,支持了一次编译显示多个错误与警告的能力并改善了错误提示信息,用于提升 KCL 代码错误排查效率,比如对于如下 KCL 代码 (main.k)
metadata = { labels = {key = "kcl }
执行如下 KCL 命令行,可以看到会同时提示字符串编写错误和花括号未正确匹配错误的语法错误信息
$ kcl main.k error[E1001]: InvalidSyntax --> main.k:2:21 | 2 | labels = {key = "kcl | ^ unterminated string | error[E1001]: InvalidSyntax --> main.k:2:24 | 2 | labels = {key = "kcl | ^ expected "}" |
错误修复
单行条件配置块语法解析错误
在之前的 KCL 版本中,在编写如下 KCL 代码时会出现非预期的语法错误,在 KCL v0.4.6 版本中,我们修复了此类类似的问题
env = "prod" config = {if env == "prod": labels = {"kubernetes.io/env" = env}}
Schema 必选属性检查
在之前的 KCL 版本中,在编写如下 KCL 代码时,没有按预期提示 versions
属性没有赋值的错误,在 KCL v0.4.6 版本中,我们修复了此类类似的问题
schema App: data?: [int] version: Version schema Version: versions: [str] app = App { version = Version {} }
工具链更新
KCL VS Code 插件
在此次更新中,我们发布了全新的 KCL VS Code 插件和使用 Rust 语言重写的语言服务服务器,相比于之前 KCL 版本性能约提升 20 倍,并支持了 KCL 错误警告在 IDE 中实时显示,以及 KCL 代码补全等新功能。
- 错误与告警实时显示
- 跳转
- 补全
- 悬停
更多 KCL VS Code 插件安装方式及详细更新内容详见
Kusion VS Code 插件
在 KCL VS Code 插件的基础上,我们还提供了与云原生运维发布场景结合更紧密的 Kusion VS Code 插件,支持一键应用配置预览与发布,详见
包管理工具
在 KCL v0.4.6 新版本中,我们提供了全新的 KCL 包管理工具 alpha 版本,用户可以通过几个命令即可获得社区中已经编写好的 KCL 模型。比如可以通过包管理工具一键导入 KCL Kubernetes 模型并使用
kpm init kubernetes_demo && kpm add -git https://github.com/awesome-kusion/konfig.git -tag v0.0.1
编写 KCL 代码 (main.k)
import konfig.base.pkg.kusion_kubernetes.api.apps.v1 as apps demo = apps.Deployment { metadata.name = "nginx-deployment" spec = { replicas = 3 selector.matchLabels.app = "nginx" template.metadata.labels = selector.matchLabels template.spec.containers = [ { name = selector.matchLabels.app image = "nginx:1.14.2" ports = [ {containerPort = 80} ] } ] } }
执行如下 KCL 命令即可获得一个 Nginx Deployment YAML 输出
$ kcl main.k -S demo apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: "nginx:1.14.2" name: nginx ports: - containerPort: 80
社区集成 & 扩展更新
Kubernetes 配置管理工具扩展支持
在 KCL v0.4.6 中,我们以统一的编程界面方式为 Kubernetes 社区的 Helm, Kustomize, KPT 等配置管理工具提供了插件支持,编写几行 KCL 代码即可无侵入地完成对存量 Kustomize YAML,Helm Charts 的编辑和校验,比如编写少量 KCL 代码修改资源标签/注解, 注入 sidecar 容器配置,使用 KCL schema 校验资源等。
下面以 Kustomize 工具对 KCL 的集成为例进行详细说明。使用 Kustomize KCL 插件无需安装任何与 KCL 相关的二进制,仅需您本地安装有 Kustomize 工具即可。
首先执行如下命令获取一个 Kustomize YAML 配置示例:
git clone https://github.com/KusionStack/kustomize-kcl.git && cd ./kustomize-kcl/examples/set-annotation/
然后执行如下命令使用 KCL 代码仅为所有的 Deployment
资源添加一个 managed-by=kustomize-kcl
注解
sudo kustomize fn run ./local-resource/ --as-current-user --dry-run
可以得到如下 YAML 输出:
apiVersion: v1 kind: Service metadata: name: test annotations: config.kubernetes.io/path: example-use.yaml internal.config.kubernetes.io/path: example-use.yaml spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx annotations: config.kubernetes.io/path: example-use.yaml internal.config.kubernetes.io/path: example-use.yaml # This annotation is added through the kcl code. managed-by: kustomize-kcl spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
在上述 YAML 配置中,我们仅编写了一行 KCL 代码就完成为 Deployment 资源添加一个 managed-by=kustomize-kcl
注解
[resource | {if resource.kind == "Deployment": metadata.annotations: {"managed-by" = "kcl"}} for resource in option("resource_list").item]
此外我们为 Kustomize/Helm/KPT 三个工具均提供了常用的容器、服务配置修改校验 KCL 模型,并且会持续完善,欢迎社区小伙伴一起参与共建。
多语言 SDK
在此次更新中,我们发布了全新的 kclvm-go SDK 将 KCL 集成到您的 Go 应用程序中,并提供丰富的 API 与 KCL 进行交互。您可以在 这里 查询详细的 API 文档。此外我们还更新了如下特性和错误修复:
- 感谢 @jakezhu9 修复了 kclvm-go 未预期的 KCL 格式化 API 在 CI Pipeline 中单元测试错误
- 感谢 @Ekko 贡献 Go struct 和 KCL schema 双向转换支持,详见:
- KCL schema 到 protobuf message 的转换支持,详见
- KCL 新增获取 schema 类型和实例 API,详见
其他更新与错误修复
- KCL python plugin 功能默认不开启,如需开启可参考 KCL Plugin 文档
- KCL playground 支持代码分享能力,您可以通过访问 KCL 官网 并点击 Playground 按钮进行体验
- 更多更新与错误修复,详见
文档更新
KCL 网站 新增 KCL v0.4.6 文档内容并支持版本化语义选项,目前支持 v0.4.3, v0.4.4, v0.4.5 和 v0.4.6 版本选择。同时欢迎社区同学进行文档共建。
下一步计划
预计 2023 年年中,我们将发布 KCL v0.5.0 版本,预期重点演进包括:
- 更多针对场景问题的 KCL 语言编写便利性改进,用户界面持续优化与体验提升,用户支持和痛点解决
- 更多 IDE 插件、包管理工具、Helm/Kustomize/KPT 场景集成、功能支持和用户体验提升
- 针对云原生场景提供更多开箱即用的 KCL 模型支持,主要包含容器、服务、计算、存储和网络等
- 支持 KCL Schema 直接生成 Kubernetes CRD
- 支持 kubectl 和 helmfile KCL plugin,通过 KCL 代码直接生成、编辑和校验 Kubernetes 原生资源
- 支持在 Kubernetes 运行时通过 Admission Controller 运行 KCL 代码对 YAML 进行编辑和校验
- 更多非 Kubernetes 场景支持,如通过 KCL Schema 对 AI 模型进行数据清理和数据库 Schema 集成支持
更多详情请参考 KCL v0.5.0 Milestone
如果您有更多的想法和需求,欢迎在 KCL Github 仓库发起 Issues,也欢迎加入我们的社区进行交流 🙌 🙌 🙌
常见问题及解答
详见 KCL 常见问题
其他资源
感谢所有 KCL 用户和社区小伙伴在此次版本更新过程中提出的宝贵反馈与建议。受限于文章篇幅,后续我们会撰写更多 KCL v0.4.6 新版本功能解读系列文章,敬请期待!
更多其他资源请参考:
欢迎加入我们的社区进行交流 👏👏👏:github.com/KusionStack…

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Jina AI 创始人肖涵博士:揭秘 Auto-GPT 喧嚣背后的残酷真相
本文已获得原作者授权转载。 Auto-GPT 究竟是一个开创性的项目,还是一个被过度炒作的 AI 实验?本文为我们揭开了喧嚣背后的真相,并揭示了 Auto-GPT 不适合实际应用的生产局限性。 作者:Jina AI 创始人兼 CEO 肖涵博士 译者:新智元编辑部 原文链接:https://jina.ai/news/auto-gpt-unmasked-hype-hard-truths-production-pitfalls/ 背景介绍 这两天,Auto-GPT,一款让最强语言模型 GPT-4 能够自主完成任务的模型,一夜成名,让整个 AI 圈疯了。短短七天时间,它就在 GitHub 上获得了惊人 Star 数量,已经突破 5 万,并吸引了无数开源社区的关注。 此前爆火的 ChatGPT,唯一不太好用的地方,就是需要人类输入 Prompt。而 Auto-GPT 的一大突破是,可以让 AI 自我提示,换句话说,AI 都完全不需要咱们人类了? 在为 Auto-GPT 狂欢的同时,我们也有必要退一步审视其潜在的不足之处,探讨这个「AI 神童」所面临的局限和挑战。 接下来,肖涵博士将和我们深入探讨...
- 下一篇
ZenData 3.0 正式版发布,支持从数据库表的列类型、名称和记录生成字段配置。
ZenData 3.0 正式版发布,可解析数据库表的列类型、名称和记录,生成相关字段配置。 3.0正式版更新内容 支持从数据库表的列类型生成字段配置; 支持从数据库表的列名称生成字段配置; 支持从数据库表的已有记录生成字段配置; 修复了一些小的问题。 ZenData用途 ZenData主要两大功能:数据生成和数据解析。通过一个配置文件,可以使用ZenData生成您想要的各种数据。同样也可以对某一个数据文件,指定其数据类型定义的配置文件,完成到结构化数据的解析。 ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析,还可一键生成海量数据用于性能和压力测试。 ZenData特性 简单无依赖,只有一个可执行文件,即可满足命令行生成和HTTP接口两种数据生成服务; 使用配置文件来生成数据,使用人员不需要有开发知识,即可快速上手应用; 提供了简明、强大的数据定义语法,如分组、区间、步长、循环、随机、格式化、前后缀、函数和表达式等,配置灵活、扩展方便; 支持从文本文件中读取数据,方便用户对字段取值进行精确控制; 提供了Excel表格数据的标准SQL查询...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8安装Docker,最新的服务器搭配容器使用