KCL v0.4.4 发布 - 自定义 YAML Manifests 输出以及 Python SDK
KCL 团队很高兴地宣布 0.4.4 版本现在已经可用!本次发布主要为 KCL 语言增加了自定义 YAML Manifests 输出的能力,用户可以通过编写代码并调用系统函数来自定义 YAML 输出的样式而无需理解复杂的 schema settings 语义;此外本次发布提供了最新的 KCL Python SDK 可用于 Python 用户对 KCL 直接集成;同时我们大大降低了 KCL 安装包的体积,平均安装包体积降低为之前版本的五分之一,并包含多项编译器报错信息优化和 bug 修复。您可以在 KCL 发布页面 获得更多详细发布信息和 KCL 二进制下载链接。
背景
KCL 是一个开源的基于约束的记录及函数语言,期望通过成熟的编程语言技术和实践来改进对大量繁杂配置和策略的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更快的自动化集成和良好的生态延展性。
本文将向读者介绍 KCL 社区的近期动态。
新增特性
自定义 YAML 格式输出
在过去的 KCL 版本中,YAML 输出的样式是在 KCL 编译器中是硬编码的,用户可以为 schema 的 __settings__
元属性设置为不同的值来决定 YAML 输出样式,这带来了较高的复杂度和记忆成本,因此在 0.4.4 版本中我们提供了一个系统库函数用于开发人员更简单地自定义 YAML 输出样式,这个函数的签名如下:
manifests.yaml_stream(values: [any], opts: {str:} = {sort_keys = Falseignore_private = Trueignore_none = Falsesep = "---"
})
这个函数的功能是将 KCL 对象列表序列化为带 ---
分隔符的样式 YAML 输出,它具有两个参数:
values
- 一个 KCL 对象列表opts
- YAML 序列化选项sort_keys
:是否按属性名称的字典序对序列化结果进行排序(默认为False
)。ignore_private
:是否忽略名称以_
开头的属性序列化输出(默认为True
)。ignore_none
:是否忽略值为None
的属性(默认为False
)。sep
:在多个 YAML 文档之间选择怎样的分隔符(默认为"---"
)。
下面我们通过一个例子来说明:
import manifestsschema Deployment:apiVersion: str = "v1"kind: str = "Deployment"metadata: {str:} = {name = "deploy"}spec: {str:} = {replica = 2}schema Service:apiVersion: str = "v1"kind: str = "Service"metadata: {str:} = {name = "svc"}spec: {str:} = {} deployments = [Deployment {}, Deployment {}]
services = [Service {}, Service {}]manifests.yaml_stream(deployments + services)
首先我们通过 import
关键字导入 manifests
模块并定义 2 个 Deployment 以及 2 个 Service 资源,当我们想以 YAML stream 并以 ---
作为分隔符的格式依次输出这 4 个资源时,我们可以将它们合并为一个 KCL 列表并作为 manifests.yaml_stream
函数的 values
形参进行传入 (如无特殊需求,opts 参数一般使用默认值即可),最终得到 YAML 输出为:
apiVersion: v1
kind: Deployment
metadata:name: deploy
spec:replica: 2
---
apiVersion: v1
kind: Deployment
metadata:name: deploy
spec:replica: 2
---
apiVersion: v1
kind: Service
metadata:name: svc
---
apiVersion: v1
kind: Service
metadata:name: svc
更多信息请参阅:https://github.com/KusionStack/KCLVM/issues/94
Python SDK
除了已有的 KCL Go SDK, 本次发布还新增了 KCL Python SDK,使用 Python SDK 要求您本地具备高于 3.7.3 的 Python 版本和 pip 包管理工具,可以通过如下命令进行安装并获得帮助信息
$ python3 -m pip install kclvm && python3 -m kclvm --help
命令行工具
编写名为 main.k
的 KCL 文件:
name = "kcl"
age = 1schema Person:name: str = "kcl"age: int = 1x0 = Person {}
x1 = Person {age = 101
}
执行如下命令并获得输出:
$ python3 -m kclvm hello.k
name: kcl
age: 1
x0:name: kclage: 1
x1:name: kclage: 101
API
此外,我们还可以通过 Python 代码实现对 KCL 文件的执行
编写名为 main.py
的 python 文件:
import kclvm.program.exec as kclvm_exec
import kclvm.vm.planner as plannerprint(planner.plan(kclvm_exec.Run(["hello.k"]).filter_by_path_selector()))
执行如下命令并获得输出:
$ python3 main.py
name: kcl
age: 1
x0:name: kclage: 1
x1:name: kclage: 101
可以看出通过命令行工具和 API 可以获得同样的输出。
目前 KCL Python SDK 还处于早期预览版本,后续 KCL 团队会持续更新并提供更丰富的功能,更多信息请参阅:https://github.com/KusionStack/kclvm-py
安装体积优化
在新的 KCL 版本中,我们将 KCL 内置的 Python3 剥离,使得 KCL 二进制压缩包的体积从平均 200M 降低为 35M,用户可以更快地下载并使用 KCL,并且 Python Plugin 成为一个可选项,如果您想启用 KCL Python 插件,一个额外要求是需要您本地具备高于 3.7.3 版本的 Python 以及 pip 包管理工具,更多详情请参考 https://github.com/KusionStack/kcl-plugin
错误修复
函数调用错误信息优化
在 0.4.4 版本中,KCL 优化了当函数参数个数不匹配时的错误信息输出,支持显示函数名称以及参数不匹配个数
schema Foo[x: int]:bar?: int = xf = lambda x {x + 1
}foo = Foo(1,2,3) # Error: "Foo" takes 1 positional argument but 3 were given
f(1,2) # Error: "f" takes 1 positional argument but 2 were given
更多信息请参阅:https://github.com/KusionStack/KCLVM/issues/299
插值三引号字符串格式化错误修复
在之前的 KCL 版本中,对如下代码进行格式化会错误将携带字符串插值的三引号格式化为单引号字符串并导致编译错误,在 0.4.4 版本中我们进行了修复
# Before KCL v0.4.4, variable "bar" will be formatted as:
#
# foo = 1
# bar = "
# ${foo}
# "
foo = 1
bar = """
${foo}
"""
更多信息请参阅:https://github.com/KusionStack/KCLVM/issues/294
其他错误修复
更多错误修复详见:https://github.com/KusionStack/KCLVM/milestone/2?closed=1
文档
KCL 网站 初步建立,并完善 Kubernetes 场景相关文档.
更多网站信息详见 https://kcl-lang.github.io/
社区动态
KCL 社区新增三名外部贡献者 @my-vegetable-has-exploded, @possible-fqz, @orangebees, 感谢他们热情并积极地参与贡献
下一步计划
预计 2023 年 1 月底,我们将发布 KCL v0.4.5 版本,预期重点演进包括
- 语言用户界面持续优化,体验持续提升和用户痛点解决
- 更多场景和生态如 Kubernetes 和 CI/CD Pipeline 场景 KCL 支持和文档更新
- KCL Windows 版本支持
- KCL 包管理工具 kpm 发布
- KCL 新版 playground 支持
更多详情请参考 KCL v0.4.5 Milestone
常见问题及解答
常见问题及解答详见:https://kcl-lang.github.io/docs/user_docs/support/
其他资源
- KCL 网站
- Kusion 网站
- KCL 仓库
- Kusion 仓库
- Konfig 仓库
欢迎加入我们的社区进行交流
KCL v0.4.4 发布 - 自定义 YAML Manifests 输出以及 Python SDK相关推荐
- Grinmw.py v0.1.1发布,支持Grin Wallet API V3和Grin Node API V2
Grinmw.py v0.1.1发布.Grinmw.py是一个Python语言的包, 用于使用Python语言调用Grin-node/Grin-wallet API接口.目前已经用于Goblinpoo ...
- KCL v0.4.6 重磅发布! 全新的 IDE 插件,Helm/Kustomize/KPT 工具集成
KCL 团队很高兴地宣布 KCL v0.4.6 新版本现在已经可用!本次发布为大家带来了三方面的重点更新:语言.工具链.社区集成 & 扩展支持. 使用 IDE 插件提升 KCL 代码编写体验和 ...
- Pytorch v0.4.1发布:添加频谱范数,自适应Softmax,优化CPU处理速度,添加异常检测NaN等
Pytorch v0.4.1发布:添加频谱范数,自适应Softmax,优化CPU处理速度,添加异常检测(NaN等)以及支持Python 3.7和CUDA 9.2支持 一.目录 突破性的变化 新功能 神 ...
- python distutils模块(貌似是用来打包发布自定义python包的)
打包工具来的,貌似是用来打包发布自定义python包的 参考文章:尝试修改LabelImg,将以对顶角画框改成以对角线相交点画框
- MetaMask发布自定义网络API,允许开发人员为其用户提供多链服务
3月4日消息,浏览器插件钱包MetaMask发布自定义网络API"Custom Networks API",允许开发人员为其用户提供多链服务,包括Layer2网络,如Polygon ...
- ipados远程linux软件,JingOS Linux平板系统v0.6下载发布 支持多点触摸手势
原标题:JingOS Linux 平板系统 v0.6 下载发布:iPadOS 风格,附安装方法 1月29日消息 今年1月份,一款新的操作系统 JingOS 官网上线,官方介绍是全球首个 iPadOS ...
- OSM地图本地发布(四)-----Geoserver发布自定义地图
一.准备工作 1. 安装jdk 1.8.tomcat 2.安装Geoserver,下载地址:https://sourceforge.net/projects/geoserver/files/GeoSe ...
- AutoK3s v0.5.0 发布 延续简约和友好
作者简介 鞠宏超,SUSE SW Engineering,6 年云计算领域经验,先后参与了 Longhorn 产品研发.Rancher2.x 产品研发,目前主要致力于 Rancher 企业版产品设计与 ...
- 爬虫管理平台Crawlab v0.4.3发布(界面上点几下就可安装pip或npm依赖)
前言 Crawlab 是一款受人欢迎的分布式通用爬虫管理平台,由 Crawlab 开发组 开发和维护.自去年 3 月份上线以来,Crawlab 因为极其强大的灵活性.简单精美的操作界面以及健壮而稳定稳 ...
最新文章
- linux中ps命令
- (46)分析 INT 0x2E 和 sysenter
- 在VS2010中配制Elmah邮件发送到Gmail
- AutoMapper在MVC中的运用小结
- CVPR 2022 | 华南理工提出VISTA:双跨视角空间注意力机制实现3D目标检测SOTA
- 如何编写用户操作手册
- 【mybatis】mybatis多表联查,存在一对多关系的,实体中使用List作为字段接收查询结果的写法...
- 线程间通信之eventfd
- 随机森林特征重要性计算_R语言随机森林模型中具有相关特征的变量重要性
- spark structured stream的Update模式
- 远程登录出现 身份验证错误 要求的函数不受支持
- 大数据搭建各个子项目时配置文件技巧(适合CentOS和Ubuntu系统)(博主推荐)...
- python怎么读单词和古文_Python 实现文言文词频统计
- android x86 精简版,逆天!Windows7终极纯净版x86,仅239MB | 殁漂遥
- 物来顺应,未来不迎,当时不杂,既过不恋
- MySQL三个表的连接查询
- 会声会影2023中文旗舰版新增功能讲解及下载更新教程
- shadertoy 实现简易指南针
- 最好用的超大视频压缩软件
- Python之Flask入门教程