Skip to content

Диагностика проблем

Эта страница собирает типичные проблемы при разработке и развёртывании элементов на Exordos Core, а также способы их диагностики.

Ресурс завис в статусе IN_PROGRESS#

Ресурсы элемента проходят жизненный цикл NEW → IN_PROGRESS → ACTIVE. Если ресурс не выходит из статуса IN_PROGRESS, значит платформа ещё не смогла привести реальное состояние в соответствие с заявленным.

Проверьте состояние ресурса:

exordos em resources list
exordos em resources show <uuid>

Если ресурс так и не покидает IN_PROGRESS, вычислительная нода, на которую он нацелен, возможно, вообще не поднялась. Проверьте статус ноды и гипервизора:

exordos compute nodes list
exordos compute hypervisors list

См. Локальное развёртывание — требования к настройке гипервизора.

$core.config.configs падает вместо рендеринга#

Поля project_id и body.kind у ресурса Config обязательны — у них нет значения по умолчанию. Если не указать body.kind (например, text), манифест упадёт с ошибкой UnknownType: Unknown kind for value: ..., а не сгенерирует пустой или неполный файл.

$core.config.configs:
  my_config:
    project_id: "12345678-c625-4fee-81d5-f691897b8142"
    path: /etc/my_element_init.txt
    target:
      kind: node
      node: $core.compute.nodes.$my_node:uuid
    body:
      kind: text # обязательно, значения по умолчанию нет
      content: |
        ...

Значения внутри содержимого конфига не подставляются#

Строковые значения в манифесте интерполируются только в двух случаях:

  • Значение, начинающееся с $, трактуется как полная ссылка на ресурс, например "$core.vs.variables.$default_cores:value".
  • Значение, начинающееся с f", трактуется как inline-шаблон, в котором внутри строки подставляются плейсхолдеры {$element.type.$name:field}.

Любая другая строка — включая многострочный блок content: — передаётся как есть. Если забыть префикс f", плейсхолдеры {$...} не превращаются молча в пустую строку: они остаются в результирующем выводе как буквальный текст. Если в доставленном файле оказывается {$core.secret.passwords.$my_password:value} вместо реального пароля — почти всегда причина в отсутствующем префиксе f".

body:
  kind: text
  content: |
    f"MY_PASS={$core.secret.passwords.$my_password:value}"

Bootstrap-скрипт читает пустой файл конфига#

Содержимое, доставляемое через $core.config.configs, записывается на целевую ноду обычной записью в файл: сначала файл создаётся (с усечением), а затем в него дозаписывается содержимое — это не атомарная операция. Bootstrap-скрипт, запустившийся до того, как содержимое доставлено, прочитает пустой файл.

Всегда дожидайтесь, пока файл станет непустым, а не просто пока он появится:

while [ ! -s /etc/my_element_init.txt ]; do
    echo "Waiting for config..."
    sleep 2
done
source /etc/my_element_init.txt

Если скрипт уже проверяет -s, а файл всё равно пустой, сравните содержимое в базе данных с тем, что на диске:

psql exordos_core -c "SELECT body FROM config_configs WHERE path = '/etc/my_element_init.txt';"
ssh ubuntu@<node-ip> "sudo cat /etc/my_element_init.txt"

Если значение в базе пустое — проблема в рендеринге манифеста, см. предыдущий раздел. Если в базе содержимое есть, а на диске файла с этим содержимым нет — нода ещё не доставила его: подождите или перезапустите bootstrap-скрипт вручную после доставки.

См. также#