Перейти к содержанию

Файл конфигурации 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, если имя зависит от переменных или условий шаблона.