Файл конфигурации Exordos#
Файл exordos.yaml содержит конфигурацию для проекта Exordos. Он должен быть помещен в каталог exordos в корне проекта. Он состоит из нескольких разделов, таких как build, deploy и т.д.
Структура проекта#
Для каждого проекта Exordos в корне проекта должен существовать каталог exordos:
.
├── my_project
│ └── main.py
├── exordos
│ └── exordos.yaml
├── pyproject.toml
└── README.md
Пример конфигурации сборки#
# Раздел сборки. Описывает процесс сборки проекта.
build:
# Зависимости проекта
# Этот раздел используется для указания зависимостей сборки
# для проекта
deps:
# Целевой путь в образе
- dst: /opt/exordos_core
# Локальный путь на машине сборки
path:
src: ../../exordos_core
# Этот раздел описывает элементы проекта.
# Образы, артефакты и манифесты для каждого элемента.
elements:
# Список образов в элементе
- images:
- name: exordos-core
format: raw
# Профиль ОС для образа
profile: ubuntu_24
# Скрипт настройки
script: images/install.sh
# Переопределить параметры сборки образа, например параметры Packer
override:
disk_size: "10G"
manifest: manifests/exordos-core.yaml
# Список артефактов в элементе
artifacts:
- path: configs/my-config.yaml
- path: templates/my-template.yaml
Сборка из собственного образа по URL#
Для сборки элемента из готового дискового образа используйте профиль
exordos_custom. Укажите URL образа и контрольную сумму в override:
build:
elements:
- images:
- name: my-custom-image
profile: exordos_custom
format: qcow2
script: images/install.sh
override:
base_image_url: "https://example.com/my-image.qcow2"
base_image_checksum: "file:https://example.com/SHA256SUMS"
disk_size: "10G"
ssh_username: "ubuntu"
manifest: manifests/my-element.yaml
Замените URL на адреса вашего дискового образа и файла контрольных сумм, а
manifest — на путь к манифесту элемента. Контрольную сумму можно указать
напрямую: base_image_checksum: "sha256:<image-sha256>". Значение disk_size
должно быть не меньше виртуального размера исходного образа.
Исходный образ должен поддерживать источник данных NoCloud в cloud-init и
доступ по SSH для пользователя, указанного в override.ssh_username
(по умолчанию: ubuntu). Этот пользователь должен иметь возможность выполнять
команды через sudo без пароля. Профиль передаёт временный SSH-ключ через
cloud-init и выполняет команды настройки по SSH.
Создайте exordos/images/install.sh с командами настройки. Если дополнительная
настройка не требуется, достаточно:
#!/bin/bash
set -eu
Пути к скрипту и манифесту указываются относительно exordos/exordos.yaml.
Запустите сборку из корня проекта:
exordos build .
Артефакты, полученные скриптом#
Вместо прямого указания на файл артефакт может запускать скрипт (или любой
исполняемый файл). Скрипт выполняется с текущим каталогом work_dir, а после
его завершения вложенный список artifacts (шаблоны glob, относительно
work_dir; поддерживается как минимум символ *) отбирает полученные файлы.
Если найденный элемент — каталог, он архивируется через tar и сжимается
через zstd (например, найденный каталог dist/ станет dist.tar.zst);
файлы копируются как есть. Все пути (script, work_dir) указываются
относительно файла exordos.yaml.
artifacts:
- script: images/docs_build.sh
work_dir: ../
artifacts:
- dist/
Ссылки на артефакты в шаблонах манифестов#
Статическим и скриптовым артефактам можно задать имя через поле name.
Именованный артефакт доступен в шаблонах манифестов Jinja2 через
{{ artifacts.<name> }} и рендерится в URN артефакта
(urn:artifacts:<uuid>):
artifacts:
- path: packages/my_package.whl
name: pip_package
В шаблоне манифеста:
$metapaas.types:
victoria:
package: "{{ artifacts.pip_package }}"
После рендеринга:
$metapaas.types:
victoria:
package: "urn:artifacts:<uuid>"
Именованный артефакт должен давать ровно один файл. Если шаблоны glob скрипта совпадают с несколькими файлами, возникает ошибка сборки, так как соответствие имени и URN становится неоднозначным.
Файл конфигурации push#
Конфигурация push хранится в отдельном файле — exordos.push.yaml — расположенном рядом с exordos.yaml в каталоге exordos. Она определяет один или более именованных целевых объектов push, каждый из которых указывает драйвер и целевой путь.
Формат#
push:
<target_name>:
driver: <driver> # например, "fs" для репозитория локальной файловой системы
path: <path> # целевой путь для собранных артефактов
Пример#
push:
local:
driver: fs
path: /var/lib/exordos-pools/http
Для отправки в конкретный целевой объект передайте файл конфигурации с флагом -c:
exordos push -c exordos/exordos.push.yaml
При определении имени Jinja-шаблон не выполняется. Укажите статическое однострочное поле name верхнего уровня или передайте --manifest-var name=value, если имя зависит от переменных или условий шаблона.