Введение

Kusion Configuration Language (KCL) — это язык записи и функциональный язык с открытым исходным кодом, основанный на ограничениях. KCL улучшает написание большого количества сложных конфигураций с помощью технологии и практики зрелых языков программирования и стремится к созданию лучшей модульности, масштабируемости и стабильности конфигурации, более простого написания логики, быстрой автоматизации и хорошей экологической расширяемости.

Обязательное условие

Установите KCL:

Каждый выпуск KCL включает различные ОС и архитектуры. Эти бинарные версии можно скачать и установить вручную с Github и добавить {install-location}/kclvm/bin в PATH среды.

export PATH=$PATH:{install-location}/kclvm/bin

Используйте KCL для проверки данных

Помимо использования кода KCL для создания форматов конфигурации, таких как JSON/YAML, KCL также поддерживает проверку формата данных JSON/YAML. Как язык конфигурации, KCL охватывает почти все возможности OpenAPI.

В KCL определение структуры можно использовать для проверки данных конфигурации. В то же время он поддерживает определяемые пользователем правила ограничений через блок проверки и записывает выражения проверки в схему для проверки и проверки атрибутов, определенных схемой. Проверить, удовлетворяет ли входной JSON/YAML соответствующему определению структуры схемы и ограничениям, очень просто и понятно.

В схеме мы можем использовать ключевое слово check для записи правил проверки каждого атрибута схемы. Каждая строка в блоке проверки соответствует условному выражению. Когда условие выполнено, проверка прошла успешно. За условным выражением может следовать , "check error message", чтобы указать сообщение, которое будет отображаться в случае сбоя проверки. Вот пример схемы с выражениями ограничения.

import regex

schema Sample:
    foo: str  # Required, cannot be None/Undefined, and the type must be str
    bar: int  # Required, cannot be None/Undefined, and the type must be int
    fooList: [int]  # Required, cannot be None/Undefined, and the type must be int list
    color: "Red" | "Yellow" | "Blue"  # Required, literal union type, and must be one of "Red", "Yellow", "Blue".
    id?: int  # Optional, can be None/Undefined, the type must be int
    check:
        0 <= bar < 100  # bar must be greater than or equal to 0 and less than 100
        0 < len(fooList) < 100  # fooList cannot be None/Undefined, and the length must be greater than 0 and less than 100
        regex.match(foo, "^The.*Foo$")  # regular expression matching
        bar in range(100)  # bar can only range from 1 to 99
        bar in [2, 4, 6, 8]  # bar can only take 2, 4, 6, 8
        bar % 2 == 0  # bar must be a multiple of 2
        all foo in fooList {
            foo > 1
        }  # All elements in fooList must be greater than 1
        any foo in fooList {
            foo > 10
        }  # At least one element in fooList must be greater than 10
        abs(id) > 10 if id  # check expression with if guard, when id is not empty, the absolute value of id must be greater than 10

Подводя итог, можно сказать, что в схеме KCL поддерживаются следующие виды проверки:

Имеется файл формата JSON data.json:

{
    "name": "Alice",
    "age": "18",
    "message": "This is Alice",
    "data": {
        "id": "1",
        "value": "value1"
    },
    "labels": {
        "key": "value"
    },
    "hc": [1, 2, 3]
}

Создайте проверенный файл KCL schema.k:

schema User:
    name: str
    age: int
    message?: str
    data: Data
    labels: {str:}
    hc: [int]
        
    check:
        age > 10

schema Data:
    id: int
    value: str

Выполните следующую команду:

$ kcl-vet data.json schema.k
Validate succuss!

Исходя из этого, KCL предоставляет соответствующий Инструмент проверки для непосредственной проверки данных JSON/YAML. Кроме того, на основе этой возможности мы можем создать продукт визуализации проверки K-V.

План на будущее

Улучшение возможностей проверки KCL будет постепенно фокусироваться на «статическом» аспекте, то есть во время компиляции в сочетании с возможностью формальной проверки он может напрямую анализировать, соответствуют ли данные ограничениям, конфликтуют ли ограничения друг с другом, и т. д., и их можно просматривать в режиме реального времени через IDE.

Мы также ожидаем, что моделями и ограничениями KCL можно будет управлять как пакетом (этот пакет содержит только файлы KCL). Например, модели и ограничения Kubernetes можно использовать «из коробки». Пользователи могут создавать конфигурации или проверять существующие конфигурации, а также могут просто расширять модели и ограничения, которые им нужны, посредством наследования KCL.

Дополнительные документы