V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
peefy
V2EX  ›  程序员

KCL JSON/YAML 配置数据一键集成 [一个自研编程语言能做什么?(系列 4)]

  •  1
     
  •   peefy · 2023-05-30 14:39:06 +08:00 · 599 次点击
    这是一个创建于 543 天前的主题,其中的信息可能已经有所发展或是发生改变。

    image.png

    什么是 KCL

    Kusion 配置语言( KCL ) 是一个开源的基于约束的记录及函数语言。KCL 通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更简单的自动化和生态工具集成。

    简介

    在 KCL 中,不仅可以将 KCL 编写的配置代码编译输出为 YAML 格式的数据,还可以将 JSON/YAML 等数据直接嵌入到 KCL 语言当中。

    使用 KCL 进行数据集成

    1. 获得示例

    git clone https://github.com/KusionStack/kcl-lang.io.git/
    cd ./kcl-lang.io/examples/data-integration
    

    2. YAML 集成

    我们可以运行以下命令来显示 KCL YAML 集成配置。

    cat yaml.k
    
    import yaml
    
    schema Server:
        ports: [int]
    
    server: Server = yaml.decode("""\
    ports:
    - 80
    - 8080
    """)
    server_yaml = yaml.encode({
        ports = [80, 8080]
    })
    

    在上述代码中,我们通过 KCL 内置的 yaml 模块以及其中的 yaml.decode 直接完成 YAML 数据的集成,并且使用 Server schema 对集成的 YAML 数据直接进行校验。此外,我们可以使用 yaml.encode 完成 YAML 数据的序列化。

    我们通过如下命令可以获得配置输出:

    $ kcl yaml.k
    server:
      ports:
        - 80
        - 8080
    server_yaml: "ports:\n  - 80\n  - 8080\n"
    

    3. JSON 集成

    同样的,对于 JSON 数据,我们可以使用 json.encodejson.decode 函数以同样的方式进行数据集成。

    我们可以运行以下命令来显示 KCL JSON 集成配置。

    cat json.k
    
    import json
    
    schema Server:
        ports: [int]
    
    server: Server = json.decode('{"ports": [80, 8080]}')
    server_json = json.encode({
        ports = [80, 8080]
    })
    

    执行命令输出为:

    $ kcl json.k
    server:
      ports:
        - 80
        - 8080
    server_json: "{\"ports\": [80, 8080]}"
    

    小结

    本文介绍了如何在 KCL 中进行数据集成,使用 KCL 内置的 yaml 和 json 包将 YAML 和 JSON 数据直接集成到 KCL 语言中,并使用相应的解码和编码功能对其进行验证和序列化。

    2 条回复    2023-05-30 14:55:54 +08:00
    Masoud2023
        1
    Masoud2023  
       2023-05-30 14:42:21 +08:00
    思路很棒
    peefy
        2
    peefy  
    OP
       2023-05-30 14:55:54 +08:00
    @Masoud2023 感谢🙏
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2674 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:34 · PVG 19:34 · LAX 03:34 · JFK 06:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.