Как запустить cloud-init вручную?

Я пишу шаблон CloudFormation и пытаюсь отладить сценарий пользовательских данных, который я предоставляю в шаблоне. Как я могу запустить cloud-init вручную и заставить его выполнять те же действия, что и при запуске нового экземпляра?


person Fluffy    schedule 18.04.2014    source источник


Ответы (5)


Вы можете просто запустить его так:

/usr/bin/cloud-init -d init

Это запускает настройку облачной инициализации с начальными модулями. (Параметр -d предназначен для отладки) Если вы хотите запустить все модули, которые вам нужно запустить:

/usr/bin/cloud-init -d modules

Имейте в виду, что во второй раз, когда вы запустите их, это мало что даст, так как уже было запущено во время загрузки. Для принудительного запуска после загрузки вы можете запустить из командной строки:

( cd /var/lib/cloud/ && sudo rm -rf * )

В более старых версиях эквивалент cloud-init init:

/usr/bin/cloud-init start

Вы также можете найти этот вопрос полезным, хотя он применим к более старым версиям cloud-init: Как сделать так, чтобы сценарии запуска cloud-init запускались каждый раз при загрузке моего экземпляра EC2?

В документации по облачной инициализации, здесь просто приведены примеры. Но он не объясняет параметры командной строки или каждый из модулей, поэтому вам придется поиграть с разными значениями в конфигурации, чтобы получить желаемые результаты. Конечно, вы также можете посмотреть код.

person Rico    schedule 18.04.2014
comment
@Пушистый. Да, почему? - person Rico; 18.04.2014
comment
Ну я получаю cloud-init: error: invalid choice: 'start' (choose from 'query', 'init', 'modules', 'single') - person Fluffy; 18.04.2014
comment
Похоже, у вас другая версия. Возможно, последняя версия Ubuntu. Бег: cloud-init init - person Rico; 18.04.2014
comment
Разве cloud-init init не запускал бы только модули из cloud_init_modules, пропуская остальную часть запуска? - person Fluffy; 18.04.2014
comment
Ну, он должен запускаться, и начальная настройка, и все в cloud_init_modules, но происходит то, что когда вы запускаете cloud-init init во второй раз, он не запускается, как если бы он сначала загрузил машину (потому что он уже запущен), чтобы заставить его запустить все, что есть обходной путь сделать что-то вроде этого: ( cd /var/lib/cloud/ && sudo rm -rf * ) из командной строки. Если вы хотите запустить другие модули в своей конфигурации, вы также можете запустить cloud-init -d modules - person Rico; 18.04.2014
comment
@Fluffy добавил подробностей к ответу. Я надеюсь, что это помогает. - person Rico; 18.04.2014
comment
Вы также можете удалить семафоры в /var/lib/cloud/instances/i-xxxxxxx/sem, затем отредактировать /var/lib/cloud/instances/i-xxxxx/scripts/part-001 по своему вкусу и выполнить его через sudo /usr/bin/cloud-init -d single -n cc_scripts_user. - person kadrach; 31.01.2017
comment
Ни один из ваших примеров не запускал повторно сценарии папки /etc/cloud/cloud.cfg.d для меня. Однако очистка папки / var / lib / cloud / и перезагрузка экземпляра сработали! - person vcardillo; 16.03.2018

Престижность @Rico, а также, если вы хотите запустить один модуль - либо для тестирования, либо потому, что ваш дистрибутив не включает модуль по умолчанию (привет, Precise!), Вы можете

/usr/bin/cloud-init -d single -n <module-name>

Например, когда мой дистрибутив не запускает write_files по умолчанию (как многие старые дистрибутивы), я использую это в верхней части runcmd:

runcmd:
 - /usr/bin/cloud-init -d single -n write-files

[Я знаю, что это не совсем ответ на OP, но когда я пытался решить мою проблему, этот вопрос был одним из лучших результатов, поэтому я полагаю, что другие люди могут найти это полезным]

person Guss    schedule 21.11.2016

В большинстве дистрибутивов Linux (включая CentOS и Ubuntu) вы можете перезапустить службу cloud-init с помощью systemctl:

systemctl restart cloud-init

А затем проверьте вывод журнала, чтобы увидеть результаты:

journalctl -f -u cloud-init
person Andrew    schedule 14.04.2016

В качестве документации вы можете просто запустить

sudo cloud-init clean

и добавьте --logs, чтобы очистить весь файл журнала. Он все переделает при перезагрузке

person Lisbeth    schedule 08.10.2020

person    schedule
comment
Это может быть лучше того, о чем просил ОП? То есть cloud-init не выполняет удаления, которые у вас есть, поэтому ваше решение не выполняет те же действия, что и он? Если бы вы добавили несколько слов комментария, то все было бы ясно! - person JoeG; 26.11.2018
comment
Хотя вышеупомянутые решения не запускали повторно неудачные загрузки пакетов и установку пакетов (salt-minion), это решение выполнялось. - person Fabian; 11.02.2020