Хорошо, наконец-то я добился некоторых результатов с использованием Cloudbase-init 0.9.11, то есть текущей стабильной версии. Вот что работает: расширение дисков, настройка сети, установка имени хоста, включение WRM, если это необходимо, установка пароля (но он может поддерживать только пароли в открытом виде), так что хэш в /etc/pve/qemu/vmid.conf нужно заменить на текстовый вариант. Хорошая новость в том, что по умолчанию Cloudbase требует смены пароля при первом входе, но вы можете это изменить. А вот что не работает: создание нового пользователя (конфигуратор Openstack в cloudbase этого не поддерживает), установка FQDN — снова не поддерживают. Есть и другие вещи, которые я не тестировал полностью, например, сертификаты WRM и NTP, так как я ими не пользовался, но, кажется, они работают.
Теперь к большей проблеме: во-первых, это не будет работать сразу из коробки, так как ISO Proxmox вообще не читается. Это простая правка: нужно изменить файл /usr/share/perl5/PVE/QemuServer/Cloudinit.pm, чтобы ISO распознавался в commit_cloudinit_disk. Я изменил run_command([['genisoimage'], чтобы включить уровень ISO в run_command([['genisoimage','-iso-level', '3', '-R', '-V', $label, $path]. Теперь диск читается, а также работает настройка сети.
Вторая, более важная проблема — настройки в USER_DATA вообще не используются. Так что пароль, имя хоста и другое не будут работать, например, #cloud-config. Они читают это, но поддерживают лишь небольшое количество функций в user_data, например, . Они ожидают, что данные будут в meta_data.json, который в данный момент содержит только "uuid": "$uuid", "network_config": { "content_path": "/content/0000" }. Я добавил "hostname": и "admin_pass" в формате JSON, и теперь это работает. Можно также добавить SSH-ключи, если нужно. Но, конечно, это требует вмешательства в код на Perl. Я не уверен, как обойти проблему с паролем, так как, если бы это тоже было возможно, то система была бы почти готова к использованию. Я думал изменить код для создания /etc/pve/qemu-server/vm.id.conf, чтобы если сервер был Windows, разрешить открытый текст. Это не идеальный вариант, но может сработать. Но даже изменения, которые я сделал для ISO файла и meta_data.json, было бы хорошо добавить в ядро, чтобы мы могли лучше пользоваться Windows, иначе мне придется вносить правки в этот файл для каждого нового гипервизора. Спасибо.
Теперь к большей проблеме: во-первых, это не будет работать сразу из коробки, так как ISO Proxmox вообще не читается. Это простая правка: нужно изменить файл /usr/share/perl5/PVE/QemuServer/Cloudinit.pm, чтобы ISO распознавался в commit_cloudinit_disk. Я изменил run_command([['genisoimage'], чтобы включить уровень ISO в run_command([['genisoimage','-iso-level', '3', '-R', '-V', $label, $path]. Теперь диск читается, а также работает настройка сети.
Вторая, более важная проблема — настройки в USER_DATA вообще не используются. Так что пароль, имя хоста и другое не будут работать, например, #cloud-config. Они читают это, но поддерживают лишь небольшое количество функций в user_data, например, . Они ожидают, что данные будут в meta_data.json, который в данный момент содержит только "uuid": "$uuid", "network_config": { "content_path": "/content/0000" }. Я добавил "hostname": и "admin_pass" в формате JSON, и теперь это работает. Можно также добавить SSH-ключи, если нужно. Но, конечно, это требует вмешательства в код на Perl. Я не уверен, как обойти проблему с паролем, так как, если бы это тоже было возможно, то система была бы почти готова к использованию. Я думал изменить код для создания /etc/pve/qemu-server/vm.id.conf, чтобы если сервер был Windows, разрешить открытый текст. Это не идеальный вариант, но может сработать. Но даже изменения, которые я сделал для ISO файла и meta_data.json, было бы хорошо добавить в ядро, чтобы мы могли лучше пользоваться Windows, иначе мне придется вносить правки в этот файл для каждого нового гипервизора. Спасибо.
