Введение
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.
Дополнительные документы
- KCL Github Repo: https://github.com/KusionStack/KCLVM
- Сайт KCL: https://kcl-lang.io/
- Конфигурация и автоматизация в KCL: https://medium.com/dev-genius/configuration-automation-in-kcl-f355732d9f20