KCL 社区开源双周报和 v0.5.5 新版本发布
KCL 是一个开源的基于约束的记录及函数语言并通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更简单的自动化和生态工具集成。
本栏目将会双周更新 KCL 语言社区最新动态,包括功能、官网更新和最新的社区动态等,帮助大家更好地了解 KCL 社区!
KCL 官网:https://kcl-lang.io
内容概述
感谢所有贡献者过去两周 (2023 08.10 - 08.23) 的杰出工作,以下是重点合并内容概述
- 🔧 语言及工具链更新
- KCL 格式化工具更新
- 支持对有语法错误的代码片段和部分代码片段进行格式化
- 支持对缩进不对的配置块进行自动校正
- KCL 文档工具更新
- 支持导出文档索引页
- KCL 导入工具更新
- 支持 Terraform Provider Schema 转换为 KCL Schema
- KCL 导出工具更新
- 支持由 KCL Schema 导出 OpenAPI Spec,接入 OpenAPI 生态
- KCL IDE 更新
- 支持编译缓存特性,提升部分 IDE 功能性能
- 丰富 IDE 错误信息,并提供 Import 语句快速修复能力
- KCL 包管理工具 KPM 更新
- kpm push 输出信息体验优化,增加推送 KCL 程序包的重复 tag 检查
- 为 kpm push 和 kpm pkg 增加参数 —vendor 决定是否将 KCL 程序包的三方库打包在一起
- KCL 语言更新
- 优化 Schema 语义检查和联合类型检查等错误信息
- 支持导出配置块的类型输出
- KCL 格式化工具更新
- 🏄 API 更新
- KCL Schema 模型解析 GetSchemaType API 获取 KCL 包相关信息和 Schema 属性默认值
- 📰 官网和用例更新
- 新增通过 docker.io 发布 KCL 包用例: https://github.com/kcl-lang/kpm/blob/main/docs/publish_to_docker_reg.md
- 新增 KCL Gitlab CI 集成用例: https://kcl-lang.io/docs/user_docs/guides/ci-integration/gitlab-ci
- 新增 KCL 密钥管理 Vault 和 Vals 集成用例: https://kcl-lang.io/docs/user_docs/guides/secret-management/vault
特别鸣谢
以下排名不分先后
- 感谢 @jakezhu9 对 KCL Import 工具 Terraform Schema 到 KCL Schema 转换的贡献 🙌 https://github.com/kcl-lang/kcl-go/pull/141
- 感谢 @xxmao123 和 @starkers 对 NeoVim KCL 插件的讨论与贡献 🙌 https://github.com/kcl-lang/vim-kcl/pull/2
- 感谢 @starkers 对 mason.nvim registry 增加 KCL 的安装支持 🙌 https://github.com/mason-org/mason-registry/pull/2425
- 感谢 @prahaladramji 对 KCL Homebrew 安装脚本的升级更新与贡献 🙌 https://github.com/kcl-lang/homebrew-tap/pull/1
- 感谢 @yamin-oanda 为 Pulumi 官方提供 KCL 支持的讨论 🙌 https://github.com/pulumi/pulumi/discussions/13722
- 此外感谢 @nkabir, @mihaigalos, @prahaladramji, @yamin-oanda, @magick93, @MirKml 等在过去两周使用 KCL 过程中提出的宝贵反馈和讨论 🙌
精选更新
KCL Import 工具更新
KCL Import 工具在 Protobuf, JsonSchema OpenAPI 模型和 Go 结构体转换为 KCL Schema 的基础上,新增 Terraform Provider Schema 到 KCL Schema 的转换支持,比如对于如下的 Terraform Provider Json (通过 terraform providers schema -json > provider.json
命令获得,详情请参考 https://developer.hashicorp.com/terraform/cli/commands/providers/schema)
{
"format_version": "0.2",
"provider_schemas": {
"registry.terraform.io/aliyun/alicloud": {
"provider": {
"version": 0,
"block": {
"attributes": {},
"block_types": {},
"description_kind": "plain"
}
},
"resource_schemas": {
"alicloud_db_instance": {
"version": 0,
"block": {
"attributes": {
"db_instance_type": {
"type": "string",
"description_kind": "plain",
"computed": true
},
"engine": {
"type": "string",
"description_kind": "plain",
"required": true
},
"security_group_ids": {
"type": [
"set",
"string"
],
"description_kind": "plain",
"optional": true,
"computed": true
},
"security_ips": {
"type": [
"set",
"string"
],
"description_kind": "plain",
"optional": true,
"computed": true
},
"tags": {
"type": [
"map",
"string"
],
"description_kind": "plain",
"optional": true
}
},
"block_types": {},
"description_kind": "plain"
}
},
"alicloud_config_rule": {
"version": 0,
"block": {
"attributes": {
"compliance": {
"type": [
"list",
[
"object",
{
"compliance_type": "string",
"count": "number"
}
]
],
"description_kind": "plain",
"computed": true
},
"resource_types_scope": {
"type": [
"list",
"string"
],
"description_kind": "plain",
"optional": true,
"computed": true
}
}
}
}
},
"data_source_schemas": {}
}
}
}
经过 KCL Import 工具可以输出为如下 KCL 代码
"""
This file was generated by the KCL auto-gen tool. DO NOT EDIT.
Editing this file might prove futile when you re-run the KCL auto-gen generate command.
"""
schema AlicloudConfigRule:
"""
AlicloudConfigRule
Attributes
----------
compliance: [ComplianceObject], optional
resource_types_scope: [str], optional
"""
compliance?: [ComplianceObject]
resource_types_scope?: [str]
schema ComplianceObject:
"""
ComplianceObject
Attributes
----------
compliance_type: str, optional
count: int, optional
"""
compliance_type?: str
count?: int
schema AlicloudDbInstance:
"""
AlicloudDbInstance
Attributes
----------
db_instance_type: str, optional
engine: str, required
security_group_ids: [str], optional
security_ips: [str], optional
tags: {str:str}, optional
"""
db_instance_type?: str
engine: str
security_group_ids?: [str]
security_ips?: [str]
tags?: {str:str}
check:
isunique(security_group_ids)
isunique(security_ips)
KCL Vault 集成
仅需三步,我们就可以使用 Vault 来存储并管理敏感信息并在 KCL 中使用。
首先我们安装并使用 Vault 存储 foo
和 bar
信息
vault kv put secret/foo foo=foo
vault kv put secret/bar bar=bar
然后编写如下 KCL 代码 (main.k)
apiVersion = "apps/v1"
kind = "Deployment"
metadata = {
name = "nginx"
labels.app = "nginx"
annotations: {
"secret-store": "vault"
# Valid format:
# "ref+vault://PATH/TO/KV_BACKEND#/KEY"
"foo": "ref+vault://secret/foo#/foo"
"bar": "ref+vault://secret/bar#/bar"
}
}
spec = {
replicas = 3
selector.matchLabels = metadata.labels
template.metadata.labels = metadata.labels
template.spec.containers = [
{
name = metadata.name
image = "${metadata.name}:1.14.2"
ports = [{ containerPort = 80 }]
}
]
}
最后可以通过 Vals 命令行工具获得解密后的配置
kcl main.k | vals eval -f -
更多详情和用例可以参考 https://kcl-lang.io/docs/user_docs/guides/secret-management/vault
社区动态
- 🎉 恭喜来自华中科技大学的朱俊星同学成功通过 Gitlink 编程夏令营 (GLCC) 中期考核并出色地完成了 KCL Import 工具 Jsonschema 和 Terraform Provider Schema 与 KCL Schema 转换的部分,后续社区将为其授予 KCL 社区 Maintainer 角色
- 💻 KCL 参加 CNCF 云原生计算基金会应用交付 TAG 社区会议并作项目汇报
其他资源
❤️ 感谢所有 KCL 用户和社区小伙伴在社区中提出的宝贵反馈与建议。后续我们会撰写更多 KCL v0.5.x 新版本功能解读系列文章,敬请期待!
更多其他资源请参考:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
JumpServer 堡垒机 v3.6.0 发布,支持批量连接资产、账号密钥支持使用第三方密钥存储系统
2023 年 8 月 21 日,JumpServer 开源堡垒机正式发布 v3.6.0 版本。在这一版本中,用户管理层面,JumpServer 支持用户批量连接资产,通过 Web GUI 方式连接的数据库支持对表名和列名进行自动补全,Web Terminal 页面的会话 Tab 窗口支持手动拖拽位置。作业中心方面,支持对 MySQL、PostgreSQL、SQL Server 数据库进行批量操作,大幅提高了用户的工作效率。 管理员层面,该版本支持管理员对在线会话执行暂停和恢复操作,支持配置会话的最大在线时长,并且支持将长时间未登录的用户重置为 “未激活” 状态。另外,在远程应用方面,JumpServer 支持单个远程应用一键批量部署到多台发布机,增强了管理员对堡垒机上资产的控制能力。 X-Pack 增强包方面,新版 JumpServer 的 “云同步” 模块强化了同步策略,支持以更灵活的配置方式来满足广大用户不同的同步场景。同时,JumpServer 也加强了账号备份的安全机制,备份内容支持拆分分段发送给不同的用户,以提高系统安全性。 另外,新版本 JumpServer 支持对接第三方...
-
下一篇
RuleGo v0.13.0 正式发布:Go 轻量级、高性能、嵌入式、编排式的规则引擎
RuleGo v0.13.0 (2023/8/23) 新功能 新增数据集成模块(Endpoint),使用文档和介绍点击:Gitee或者Github 提供统一的数据处理抽象,方便异构系统数据集成,目前支持HTTP和MQTT协议 支持其他协议集成扩展,例如:kafka数据等 支持统一的数据路由和数据响应 新增字段过滤器组件(fieldFilter) 新增RuleEngine.OnMsgWithOptions方法,支持传递context和共享数据 组件支持ctx.GetContext().Value(shareKey)获取共享数据 修复 修复RuleEngine rootCtx不安全问题 改进 jsFilter、jsSwitch、jsTransform、log组件,在dataType=JSON数据类型下,支持js脚本使用msg.xx方式操作msg payload 重命名mqttClient组件tls相关字段 优化Metadata使用 优化testcases 优化README 其他信息 新增RuleGo扩展组件库项目,欢迎贡献组件 详情点击:Gitee或者Github 欢迎在Gitee或者Gi...
相关文章
文章评论
共有0条评论来说两句吧...