Рейтинг:1

запустить скрипт через cloud-init

флаг gb

Я знаю облачная инициализация позволяет запускать команды как часть облачная инициализация yml

выполнить команду:
 - [пвд]

но я ищу способ выполнить полный сценарий оболочки.

Некоторые люди просто передают вывод завиток в оболочку - но это похоже на очень шаткий подход. Возможно, скрипт можно было бы интегрировать в yml с помощью шаблонов, но это тоже звучит не очень хорошо.

Гораздо лучше было бы отправить скрипт вместе с yml на хост и сослаться на него. Но я не нашел никакой документации о том, как это сделать.

Это возможно?

Я использую терраформировать настроить сервер, но мне интересно, можно ли это сделать с чистым облачная инициализация.

Рейтинг:1
флаг vn
rvs

Попробуйте совместить с write_files.

Вы можете написать скрипт где-нибудь (например, как /usr/локальные/бин/myscript.sh), а затем сделать запуститьcmd: /usr/local/bin/myscript.sh

Обязательно установите права на исполняемый файл.

флаг gb
Это выглядит многообещающе! Но в документах четко не указан жизненный цикл. Будет ли `write_files` наверняка запущен перед `runcmd`?
rvs avatar
флаг vn
rvs
@tcurdt тоже не уверен. попробуй и посмотри, работает ли?
Xerkus avatar
флаг sg
@tcurdt Я бы сказал, что это зависит от того, что находится в /etc/cloud/cloud.cfg Из того, что я видел, модуль записи файлов выполняется на этапе инициализации, а runcmd — на этапе конфигурации.
Рейтинг:0
флаг sa

если ты Только хотите запустить скрипт, вы можете передать скрипт напрямую как данные пользователя, вместо использования облачной конфигурации. Пока скрипт начинается с #!, cloud-init попытается запустить его напрямую, а не интерпретировать как cloud-config.

Если вы хотите запустить и облачный конфиг, и отдельный скрипт, а другой выложил write_files решение будет работать, вы также можете передать архив mime, состоящий из нескольких частей. Cloud-init содержит вспомогательный скрипт, облегчающий эту задачу. Скажем, у вас есть пользовательские данные в файле с именем мои-пользовательские-данные:

#cloud-config
выполнить команду:
  - echo 'test-from-cloud-config' > /var/tmp/test_from_cloud_config

И скрипт, который вы хотите запустить callecd тест.ш:

#!/бин/баш

эхо 'test_from_script' > /var/tmp/test_from_script

Вы можете позвонить:

cloud-init devel make-mime -a test.sh:x-shellscript -a my-user-data:cloud-config > /tmp/userdata

Вы можете взять полученный файл из нескольких частей и передать его в cloud-init в качестве пользовательских данных (например, с помощью LXD):

lxc запустить ubuntu:focal multi -c user.user-data="$(cat /tmp/userdata)"

Вы можете видеть, что и облачная конфигурация, и скрипт запущены:

root@multi:~# cat /var/tmp/test_from_cloud_config 
тестовая конфигурация из облака
root@multi:~# cat /var/tmp/test_from_script 
test_from_script

Видеть документы cloud-init для справки.

флаг ph
Поскольку этот вопрос помечен как «terraform», я также хочу отметить, что [источник данных `cloudinit_config`, принадлежащий провайдеру Terraform `hashicorp/cloudinit`](https://registry.terraform.io/providers/hashicorp/cloudinit/latest /docs/data-sources/cloudinit_config) фактически является интегрированным в Terraform эквивалентом `cloud-init devel make-mime`, что позволяет избежать шага создания отдельного временного файла, если вам случится что-то настраивать с помощью Terraform.
флаг gb
Супер интересные подробности. Я не знал, что вы также можете просто передать сценарий сам по себе. Приятно знать, что Шебанг достаточно хорош.

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

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