5 stable releases

new 2.1.0 Mar 7, 2025
2.0.2 Mar 6, 2025
2.0.0-rc2 Feb 3, 2025
2.0.0-rc1 Jan 28, 2025
0.1.0-rc.1 Dec 13, 2024

#82 in Cargo plugins

Download history 226/week @ 2024-12-10 20/week @ 2024-12-17 6/week @ 2025-01-07 1/week @ 2025-01-14 150/week @ 2025-01-28 73/week @ 2025-02-04 17/week @ 2025-02-11 76/week @ 2025-02-18 49/week @ 2025-02-25 643/week @ 2025-03-04

788 downloads per month

BSD-2-Clause and LGPL-3.0

82KB
2K SLoC

Cargo plugin for Picodata plugins

Плагин к cargo с функциями для упрощения разработки плагинов к Пикодате.

Установка

cargo install picodata-pike

Поддерживаемые версии

Pike расчитан на работу с версией 25.1.1. Версия 24.6.1 признана устаревшей и поддерживается только в команде cargo pike run.

Quickstart

Начнем работу с новым плагином:

cargo pike plugin new test_plugin

cd test_plugin

Запустим кластер, конфигурацию которого можно задать в ./topology.toml

cargo pike run

В вашем распоряжении окажется рабочий кластер с установленным плагином. Остановим кластер комбинацией Ctrl+C или же командой cargo pike stop в отдельном окне.

Если вам нужно собрать архив для поставки на сервера, это можно сделать командой:

cargo pike plugin pack

В папке target появиться желанный архив.

Команды

--help

Для всех команд есть флаг --help выводящий справку по использованию.

cargo pike --help

run

Запуск кластера пикодаты по файлу topology.toml. Автоматически запускает плагины указанные в топологии.

Пример топологии:

[tier.default]
replicasets = 2
replication_factor = 2

[plugin.super_plugin]
migration_context = [
    { name = "example_name", value = "example_value" },
]

[plugin.super_plugin.service.main]
tiers = ["default"]
cargo pike run --topology topology.toml --data-dir ./tmp

Для отключения автоматической установки и включения плагинов можно использовать опцию --disable-install-plugins.

Доступные опции

  • -t, --topology <TOPOLOGY> - Путь к файлу топологии. Значение по умолчанию: topology.toml
  • --data-dir <DATA_DIR> - Путь к директории хранения файлов кластера. Значение по умолчанию: ./tmp
  • --disable-install-plugins - Отключение автоматической установки плагинов
  • --base-http-port <BASE_HTTP_PORT> - Базовый http-порт, с которого начнут открываться http-порты отдельных инстансов. Значение по умолчанию: 8000
  • --base-pg-port <BASE_PG_PORT> - Базовый порт постгрес протокола, с которого начнут открываться порты отдельных инстансов. Значение по умолчанию: 5432
  • --picodata-path <BINARY_PATH> - Путь до исполняемого файла Пикодаты. Значение по умолчанию: picodata
  • --release - Сборка и запуск релизной версии плагина
  • --target-dir <TARGET_DIR> - Директория собранных бинарных файлов. Значение по умолчанию: target
  • -d, --daemon - Запуск кластера в режиме демона
  • --disable-colors - Отключает раскрашивание имён инстансов в разные цвета в логах
  • --plugin-path - Путь до директории плагина. Значение по умолчанию: ./

topology.toml

# описание количества репликасетов и фактора репликации тира
# фактор репликации отвечает за количество инстансов в одном репликасете
# в примере используется тир default, указано два репликасета и фактор репликации 2,
# следовательно будет создано всего четыре инстанса
[tier.default]
replicasets = 2
replication_factor = 2

# настройки плагинов
[plugin.sp] # в примере настройки для плагина sp
# переменные которые будут подставлены в миграции
# подробнее тут: https://docs.picodata.io/picodata/24.6/architecture/plugins/#use_plugin_config
migration_context = [
    { name = "example_name", value = "example_value" },
]

# настройки сервисов плагинов
[plugin.sp.service.main] # в примере настройка сервиса main плагина sp
tiers = ["default"] # тиры на которых должен работать сервис

# переменные окружения, которые будут переданы каждому инстансу Picodata
# в значении переменной можно указать liquid-шаблон, # в таком случае
# переменная будет динамически вычислена для каждого инстанса отдельно
# подробнее про liquid-шаблоны: https://shopify.dev/docs/api/liquid
[enviroment]
SP_CONST_VAR = "const" # такое значение будет передано каждому инстансу без изменений
# здесь мы используем переменную из контекста шаблонов,
# для первого, например, инстанса значение будет "1"
SP_LIQUID_VAR = "{{ instance_id }}"
# а здесь используется переменная из контекста и стандартная функция plus
# результатом для первого, например, инстанса будет "4243"
SP_LIQUID_VAR2 = "{{ instance_id | plus: 4242 }}"

Доступные переменные контекста в шаблонах:

  • instance_id - порядковый номер инстанса при запуске, начинается с 1

picodata.yaml

Пайк позволяет использовать файл конфигурации Пикодаты вместе с запущенным кластером. Пример файла сразу генерируется командами new и init. Документацию к параметрам можно найти в документации к Пикодате.

Настройка нескольких тиров

Для настройки необходимо добавить нужные тиры в конфигурацию кластера (файл picodata.yaml). И после указать их в файле топологии topology.toml.

Пример добавления тира compute:

# picodata.yaml

cluster:
  tier:
    default:
      can_vote: true
    compute: # новый тир
      can_vote: true
# topology.toml

# ...

[tier.compute] # новый тир
replicasets = 1
replication_factor = 1

stop

Остановить кластер можно либо комбинацией клавиш Ctrl+C в терминале, где вызывалась команда cargo pike run, либо в другом окне командой:

cargo pike stop --data-dir ./tmp

При помощи --data-dir указывается путь до директории с файлами кластера (значение по умолчанию: ./tmp)

Вывод:

[*] stopping picodata cluster, data folder: ./tmp
[*] stopping picodata instance: i1
[*] stopping picodata instance: i2
[*] stopping picodata instance: i3
[*] stopping picodata instance: i4

Доступные опции

  • --data-dir <DATA_DIR> - Путь к директории хранения файлов кластера. Значение по умолчанию: ./tmp
  • --plugin-path - Путь до директории плагина. Значение по умолчанию: ./

plugin clean

Очистка дата-каталогов пикодаты.

cargo pike clean

Доступные опции

  • --data-dir <DATA_DIR> - Путь к директории хранения файлов кластера. Значение по умолчанию: ./tmp

plugin new

Создание нового проекта плагина из шаблона.

cargo pike plugin new name_of_new_plugin

Автоматически инициализирует в проект git. Для отключения этого поведения можно воспользоваться флагом --without-git.

Доступные опции

  • --without-git - Отключение автоматической инициализации git-репозитория
  • --workspace - Создание проекта плагина как воркспейса

plugin add

Добавление плагина в workspace. Работает только внутри директории плагина, инициализированного с флагом --workspace

cargo pike plugin add name_of_new_plugin

Доступные опции

  • --plugin-path - Путь до директории плагина. Значение по умолчанию: ./

plugin init

Создание нового проекта плагина из шаблона в текущей папке.

cargo pike plugin init

Автоматически инициализирует в проект git. Для отключения этого поведения можно воспользоваться флагом --without-git.

Доступные опции

  • --without-git - Отключение автоматической инициализации git-репозитория
  • --workspace - Создание проекта плагина как воркспейса

plugin pack

Сборка всех нужных для поставки плагина файлов в один архив (для деплоя или поставки).

cargo pike plugin pack

Команда plugin pack соберёт релизную версию плагина в новый архив в директории target проекта.

Настройка содержания архива

По умолчанию архив будет содержать .so файл скомпилированного плагина, manifest.yaml, папку с миграциями, а также содержимое папки assets.

Папка assets нужна чтобы положить сторонние артефакты. Артефакты можно положить либо вручную, либо передать путь до них скрипту сборки build.rs как:

use pike::helpers::build;

fn main() {
    let params = build::ParamsBuilder::default()
        .custom_assets(vec!["./picodata.yaml"])
        .build()
        .unwrap();

    build::main(&params);
}

В данном примере в папку assets будет скопирован файл topology.toml, лежащий в корне плагина.

Доступные опции

  • --debug - Сборка и упаковка debug-версии плагина
  • --target-dir <TARGET_DIR> - Директория собранных бинарных файлов. Значение по умолчанию: target
  • --plugin-path - Путь до директории плагина. Значение по умолчанию: ./

plugin build

Альяс для команды cargo build.

cargo pike plugin build

Доступные опции

  • --release - Сборка release-версии плагина
  • --target-dir <TARGET_DIR> - Директория собранных бинарных файлов. Значение по умолчанию: target
  • --plugin-path - Путь до директории плагина. Значение по умолчанию: ./

config apply

Применение конфигурации сервисов плагина к запущенному командой run кластеру пикодаты.

Пример файла конфигурации сервисов:

# plugin_config.yaml

main: # имя сервиса
  value: changed # пример параметра конфигурации
cargo pike config apply

Доступные опции

  • -c, --config-path <CONFIG> - Путь к файлу конфига. Значение по умолчанию: plugin_config.yaml
  • --data-dir <DATA_DIR> - Путь к директории хранения файлов кластера. Значение по умолчанию: ./tmp

Dependencies

~13–24MB
~388K SLoC