Диагностика проблем
Эта страница собирает типичные проблемы при разработке и развёртывании элементов на Exordos Core, а также способы их диагностики.
Ресурс завис в статусе IN_PROGRESS#
Ресурсы элемента проходят жизненный цикл NEW → IN_PROGRESS → ACTIVE. Если ресурс не выходит из статуса
IN_PROGRESS, значит платформа ещё не смогла привести реальное состояние в соответствие с заявленным.
Проверьте состояние ресурса:
Если ресурс так и не покидает IN_PROGRESS, вычислительная нода, на которую он нацелен, возможно, вообще
не поднялась. Проверьте статус ноды и гипервизора:
См. Локальное развёртывание — требования к настройке гипервизора.
$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".
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-скрипт вручную после доставки.