Проблема с пользовательскими данными cloud-init в Ubuntu на vSphere
Я чувствую, что, должно быть, здесь что-то упущено. Поэтому я надеюсь, что кто-то может сказать мне, почему я глуп, прежде чем я попытаюсь представить официальный отчет об ошибке.
Я недавно загрузил OVA-версию образа облака Ubuntu 16.04 и пытаюсь развернуть его на своем экземпляре vCenter на основе vSphere 6 через веб-клиент. Хорошая особенность "облачного образа" по сравнению с обычным шаблоном на основе ISO заключается в том, что он поставляется с cloud-init, встроенным по умолчанию. Версия этого образа для OVA предоставляет кучу опций облачного запуска в виде опций vApp, которые можно заполнить в конце мастера следующим образом:
По большей части, все это работает отлично и, как и ожидалось. Имя хоста устанавливается равным значению hostname
, Пароль пользователя по умолчанию устанавливается в значение Default User's password
,
Проблема в том, что я сейчас пытаюсь использовать Encoded user-data
поле для передачи в YAML-файле конфигурации облака для выполнения некоторых дополнительных задач. На данный момент самым простым тестом, который я мог придумать, был следующий скрипт cloud-config для создания одного пользователя с именем demo
:
#cloud-config
users:
- name: demo
Инструкции на Encoded user-data
поле указывает, что мне нужно base64 кодировать пользовательские данные, которые я передаю, и затем они будут декодированы позже. Пример, который я нашел в источнике cloud-init, подтверждает это. Так я и сделал.
$ base64 -w0 cloud-config.txt && echo
I2Nsb3VkLWNvbmZpZwp1c2VyczoKICAtIG5hbWU6IGRlbW8K
И я вставил это закодированное значение в Encoded user-data
поле и закончил мастера. Но, к сожалению, как только виртуальная машина была развернута и запущена, "демо" не было найдено.
Так что я копался в /var/log/cloud-init.log
я искал подсказки, и единственное, что я нашел, было предупреждение о типе содержимого пользовательских данных.
__init__.py[DEBUG]: Calling handler CloudConfigPartHandler: [['text/cloud-config-jsonp', 'text/cloud-config']] (__begin__, None, 3) with frequency always
__init__.py[DEBUG]: Calling handler BootHookPartHandler: [['text/cloud-boothook']] (__begin__, None, 2) with frequency always
__init__.py[DEBUG]: Calling handler ShellScriptPartHandler: [['text/x-shellscript']] (__begin__, None, 2) with frequency always
__init__.py[DEBUG]: {'MIME-Version': '1.0', 'Content-Disposition': 'attachment; filename="part-001"', 'Content-Type': 'text/x-not-multipart'}
__init__.py[WARNING]: Unhandled non-multipart (text/x-not-multipart) userdata: 'b'I2Nsb3VkLWNvbmZpZwp1c2Vy'...'
__init__.py[DEBUG]: Calling handler CloudConfigPartHandler: [['text/cloud-config-jsonp', 'text/cloud-config']] (__end__, None, 3) with frequency always
util.py[DEBUG]: Writing to /var/lib/cloud/instances/test01/cloud-config.txt - wb: [384] 0 bytes
__init__.py[DEBUG]: Calling handler BootHookPartHandler: [['text/cloud-boothook']] (__end__, None, 2) with frequency always
__init__.py[DEBUG]: Calling handler ShellScriptPartHandler: [['text/x-shellscript']] (__end__, None, 2) with frequency always
handlers.py[DEBUG]: finish: init-local/consume-user-data: SUCCESS: reading and applying user-data
handlers.py[DEBUG]: start: init-local/consume-vendor-data: reading and applying vendor-data
stages.py[DEBUG]: no vendordata from datasource
handlers.py[DEBUG]: finish: init-local/consume-vendor-data: SUCCESS: reading and applying vendor-data
Я также искал подсказки в /var/lib/cloud/instance
, user-data.txt
файл там содержал то же значение в кодировке base64, которое я вставил в мастер. Был также user-data.txt.i
файл, который содержал следующее:
Content-Type: multipart/mixed; boundary="===============1746641247068827328=="
MIME-Version: 1.0
Number-Attachments: 1
--===============1746641247068827328==
MIME-Version: 1.0
Content-Type: text/x-not-multipart
Content-Disposition: attachment; filename="part-001"
I2Nsb3VkLWNvbmZpZwp1c2VyczoKICAtIG5hbWU6IGRlbW8K
--===============1746641247068827328==--
Предупреждение в файле журнала создает впечатление, что основная проблема связана не с кодировкой base64, а с text/x-not-multipart
что заканчивается в user-data.txt.i
файл. Но я не уверен, как этот тип пантомимы даже установлен.
Кто-нибудь знает, что я здесь делаю не так?