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

Поля файла odpm.json

Файл odpm.json — формальное описание стека Odoo-проекта: версии, репозитории, зависимости. Его коммитят в git вместе с модулями, чтобы любой участник команды и машина сборки получили одинаковый состав.

Поле Назначение
python_version Версия Python в контейнере, напр. "3.10"
distro_name Семейство Linux (сейчас поддерживается "debian")
distro_version Версия дистрибутива: "11", "12", "bullseye"
postgres_version Версия PostgreSQL в compose, напр. "15"
odoo_version Версия Odoo: "19.0", "18.0"
dependencies Список git-ссылок на репозитории дополнений
requirements_txt Список строк как в requirements.txt
odoo_git_link Репозиторий платформы; ветка/коммит через пробел
platform_name Имя Python-пакета форка (по умолчанию "odoo")
odoo_build_date Дата ночной сборки ГГГГММДД или "latest"
odpm_version Версия формата этого файла

Подстановка ${VAR} в строковых полях

В whitelist-полях odpm раскрывает ссылки на переменные окружения сразу после чтения JSON:

Поле Подстановка
odoo_git_link да
dependencies да (каждый элемент списка)
services.* / service_patches.* (v2) да — image, user, restart, списки (ports, volumes, command, …), значения environment
odoo_conf.* (v1/v2) да — все строковые значения в odoo_conf.options
hooks.* argv (v2) да — при выполнении hook (не при odpm manifest validate)

Синтаксис: ${ИМЯ} и ${ИМЯ:-значение_по_умолчанию} (как в Docker Compose). Литеральный $$$.

Источник значений (от сильного к слабому): переменные процесса (export, CI secrets) → ключи из project .env → default в строке manifest. Отдельный флаг включения не нужен.

Пример для команды в git и локальных путей на машине разработчика:

{
  "odoo_git_link": "file://${ODOO_PLATFORM_DIR}",
  "dependencies": [
    "file://${OCA_WEB_PATH}",
    "https://${GIT_HOST}/company/extra.git 19.0"
  ]
}

В .env проекта (или export / CI):

ODOO_PLATFORM_DIR=/home/dev/odoo/19.0
OCA_WEB_PATH=/home/dev/src/oca/web
GIT_HOST=git.company.example

Остальные поля (odoo_version, python_version, requirements_txt, …) без подстановки. Вложенный odpm.json в git-зависимостях поддерживает те же поля — см. иерархию конфигурации. В .odpm/deps.lock.json попадают уже раскрытые URL и пути, не ${VAR}.

Для v2 sidecar с путями из .env:

"services": {
  "armtek_test": {
    "image": "autoparts_env:emulator",
    "user": "root",
    "tty": true,
    "volumes": ["${DIGITAL_AUTOPARTS_ENV_DIR}/data:/data:Z"]
  }
}

См. переменные .env, ссылки на репозитории.

Блок odoo_conf (переопределения Odoo)

Необязательный объект для командных настроек Odoo в git (preview, staging, production). Значения из manifest перекрывают одноимённые ключи в дисковом odoo.conf при сборке odoo_config_data для контейнера; обратная запись в odoo.conf не выполняется.

"odoo_conf": {
  "options": {
    "proxy_mode": "True",
    "dbfilter": "^${PREVIEW_HOSTNAME}$",
    "workers": "2",
    "log_level": "debug"
  }
}

На odpm manifest validate нельзя указывать ключи, которыми управляет odpm: addons_path, data_dir, db_host, db_port, db_user, db_password, admin_passwd, http_port. Подробнее: odoo.conf.

Блок secrets (обязательные локальные секреты, 4.7)

Необязательный объект в manifest v2 (и в scenarios.*) — декларация, что проекту нужен .odpm/secrets.json до подъёма стека:

"secrets": {
  "required": true,
  "keys": ["payment_provider.api_key", "armtek.api_token"]
}
Поле Назначение
required true — для сценариев с host-mount секретов (developer, server) odpm проверяет наличие .odpm/secrets.json до docker compose up
keys Необязательный список ключей для строгой проверки содержимого; без keys достаточно существования файла (в сообщении об ошибке ключи из secrets.example.json — только подсказка)

Проверки (без вывода значений):

  • odpm manifest validate — предупреждение, если секреты не удовлетворены;
  • odpm plan — warning в списке предупреждений;
  • odpm (без --skip-start) — ошибка до pre_up / compose, если файл отсутствует, ключи не заполнены или остались placeholder (REPLACE_ME).

В сценарии ci host-mount отключён — проверка не выполняется; overlay может задать "secrets": { "required": false }. Подробнее: secrets.md.

Блок scenarios (overlays по ODPM_SCENARIO, 4.7)

Необязательный объект в manifest v2 для переопределения odoo_conf, services, service_patches, requirements, dependencies, hooks и secrets по сценарию из project .env (ODPM_SCENARIO: developer, server, ci). Один odpm.json в git — разные effective-настройки на ноутбуке, сервере и CI без ${VAR}-обходов.

Режим Условие Effective slice
Legacy ключа scenarios нет только top-level поля
Multi scenarios есть (даже {}) top-level + overlay scenarios[ODPM_SCENARIO]

Правила merge:

Поле Merge
odoo_conf deep merge по секциям
services overlay заменяет сервис по имени
service_patches merge по ADR-009
requirements concat + dedupe
dependencies concat + dedupe (git-репозитории)
hooks append по фазам (post_clone, post_prepare, pre_up); корень, затем overlay
secrets required — overlay переопределяет, если задан; keys — concat + dedupe для строгой проверки; без keys проверяется только наличие .odpm/secrets.json

Manifest со scenarios рекомендуется с requires_odpm: "4.7.0". v1 + scenarios → ошибка validate. Подробнее: ADR-011.

Пример: на сервере больше workers, в developer — sidecar mailpit:

{
  "manifest_schema": 2,
  "requires_odpm": "4.7.0",
  "odoo_conf": { "options": { "proxy_mode": "True", "workers": "0" } },
  "services": {
    "mailpit": { "image": "axllent/mailpit", "depends_on": ["db"] }
  },
  "scenarios": {
    "server": {
      "odoo_conf": { "options": { "workers": "4" } },
      "services": {}
    },
    "developer": {
      "requirements": ["ipython"],
      "dependencies": ["https://github.com/my-org/test-fixtures.git 17.0"],
      "hooks": {
        "post_prepare": [["docker", "build", "-t", "autoparts_env:emulator", "."]]
      }
    }
  }
}

В manifest и плагинах для sidecar используйте логические имена depends_on: ["db"]; при ODPM_COMPOSE_PREFIX в .env odpm перепишет их в physical — см. env-dotenv.md.

Проверенные сочетания

  • Debian 11: Python 3.7, 3.10 — Odoo 11–16.
  • Debian 12: Python 3.10 — Odoo 16–19.
  • Debian 13: Python 3.10, 3.12.

См. свой репозиторий платформы, ссылки на репозитории.