Рейтинг:2

Как передать конфигурацию cloud-init при создании контейнера LXD?

флаг ck

Я читал документацию LXD, а также блоги и ответы stackexchange, в которых говорится, что LXD должен иметь какой-то синтаксис инициализации, который позволяет вам передавать данные конфигурации облака в ваши контейнеры по мере их создания, но ни один из многих примеров работали на меня.Я пробовал следующие примеры, которые настраивают профиль, примеры, которые передают данные при использовании --config, примеры, которые передают данные yaml напрямую, и примеры, которые устанавливают данные после инициализации, но перед запуском. Ничего не сработало. Я вставляю то, что у меня есть сейчас... Может кто-нибудь сказать мне, что я делаю неправильно и как это исправить?

Самый простой пример, который я могу придумать:

lxc удалить -f х

кошка << EOF >config.yml
#cloud-config
вывод: {все: '| tee -a /var/log/my-cloud-init-output.log'}
пакет_обновление: правда
package_upgrade: правда
package_reboot_if_required: правда
пакеты:
  - дерево
выполнить команду:
  - коснитесь /run/cloud-config-did-run
EOF

lxc запускает Ubuntu: x --config=user.user-data="$(cat config.yml)"
спать 5
lxc exec x -- bash -c "ls /run"
lxc exec x -- bash -c "дерево /etc"

Это должно вывести на /var/log/my-cloud-init-output.log, установить дерево, а также сделать пустой файл в /run. Выход на /var/log/my-cloud-init-output.log работает, но больше ничего. Логи ничего особенного не показывают.

флаг ck
Да, я пробовал профили, но это тоже не сработало (директивы никогда не запускаются). Я просто ищу ЧТО-НИБУДЬ, ВСЕ, что работает «из коробки», чтобы у меня была база для работы.
флаг ck
На самом деле я следил за этим блогом, когда пытался использовать профили.
флаг ck
Буквально все, что я хочу, это запустить контейнер Ubuntu и установить несколько дополнительных пакетов. Мне не нужны динамические изменения (даже не уверен, что это такое). Мне просто нужно, чтобы конечным результатом был стандартный контейнер Ubuntu + несколько установленных пакетов (и мне не нужно вручную входить в систему и устанавливать все).
Рейтинг:2
флаг th

Видимо нужно дольше ждать. Поскольку у вас есть оба package_update и package_upgrade указан как истина, вы, по сути, работаете получить обновление; apt-получить обновление (что может занять более 5 секунд), прежде чем дерево сможет быть установлено или выполнено runcmd.

Ваши точные команды работают для меня, если я заменю спать 5 с

lxc exec x -- bash -c "статус облачной инициализации --wait"
sleep 2 # из-за `package_reboot_if_required: true`
user535733 avatar
флаг cn
+5, если бы я мог. У меня была * точно такая же проблема * (не дожидаясь завершения cloud-init) пару месяцев назад, но я не смог распознать ее в вопросе. Респект за детективную работу!
флаг ck
Хм, интересно ... Когда я подставляю эти команды, я получаю экран, полный точек, поскольку он ждет вечно (я сдался через 15 минут). Даже удаление всего, кроме сенсорной команды, не работает. И это не работает в двух разных системах (NixOS с LXD 2.40 и Ubuntu с 2.41).
флаг th
Вы должны иметь возможность запустить `lxc shell x` в контейнер и посмотреть, что происходит. `systemd-analyze Critical-Chain` должен жаловаться, если что-то блокирует загрузку. Если нет, в `/var/log/cloud-init.log` должны быть указаны любые сбои, связанные с облачной инициализацией.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.