Назад | Перейти на главную страницу

Как запускать модули облачной инициализации несколько раз, например runcmd, write_files, runcmd

Я использую cloud-init для создания виртуальной машины Ubuntu 16.04 LTS в Azure. На сервере, который я хочу построить, будет работать программное обеспечение, установленное из настраиваемого репозитория.

Я использую runcmd директива для добавления репозитория, обновления базы данных apt и установки пакета и его зависимостей:

runcmd:
  - wget -O - https://nightly.odoo.com/odoo.key | apt-key add -
  - echo "deb http://nightly.odoo.com/10.0/nightly/deb/ ./" | tee /etc/apt/sources.list.d/odoo.list
  - apt update
  - apt install --assume-yes odoo

Затем я пишу собственный файл конфигурации, используя write_files директива. Я не могу сделать это перед установкой программного обеспечения, поскольку наличие файла конфигурации вызывает интерактивный запрос во время установки.

Затем я хотел бы выполнить дополнительные команды (в частности, я хочу запустить certbot для установки сертификата Lets Encrypt). Я не смог найти способ сделать это.

Можно добавить второй набор runcmd записи, но по умолчанию cloud-init игнорирует все, кроме последнего набора.

Есть решения для объединения нескольких наборов записей вместе. Однако затем все команды выполняются вместе, чего я не хочу.

Одним из очевидных решений было бы написать файл конфигурации с помощью команд оболочки, а не использовать write_files директива, но на самом деле я чувствую, что плыву вверх по течению со всем своим подходом, и что, возможно, есть более простое решение для довольно распространенного требования.

Любой вклад приветствуется.

Это не решает конкретную проблему запуска команд оболочки в разных точках во время выполнения cloud-init, однако решение моей проблемы заключалось в использовании встроенных функций для добавления подходящих источников:

https://cloudinit.readthedocs.io/en/latest/topics/examples.html#additional-apt-configuration

Я думаю, что более общий ответ - использовать модуль для всего, что вы можете, использовать runcmd, когда вам нужно, и, если вам нужны оба, напишите свой собственный модуль облачной инициализации.