cloud-init есть способ форсировать порядок исполнения?

Я использую Debian 9.1 и хочу настроить свой VPS при создании с помощью cloud-init, и у меня возникла конкретная проблема с настройкой.

Это значения по умолчанию cloud.cfg из предоставленного снимка:

# The modules that run in the 'init' stage
cloud_init_modules:
 - migrator
 - seed_random
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - disk_setup
 - mounts
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - ca-certs
 - rsyslog
 - users-groups
 - ssh

# The modules that run in the 'config' stage
cloud_config_modules:
# Emit my cloud config ready event
# this can be used by upstart jobs for 'start on cloud-config'.
 - emit_upstart
 - ssh-import-id
 - locale
 - set-passwords
 - grub-dpkg
 - apt-pipelining
 - apt-configure
 - ntp
 - timezone
 - disable-ec2-metadata
 - runcmd
 - byobu

# The modules that run in the 'final' stage
cloud_final_modules:
 - package-update-upgrade-install
 - fan
 - puppet
 - chef
 - salt-minion
 - mcollective
 - rightscale_userdata
 - scripts-vendor
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message
 - power-state-change

Как видите, runcmd будет выполняться на этапе конфигурации после apt-configure.

В рамках моей конфигурации я устанавливаю несколько пакетов, один из которых требует добавления нового источника и импорта ключа с сервера ключей. Есть проблема, потому что импорт ключа требует установки dirmngr в системе, но Debian 9.1 не устанавливает его по умолчанию.

Однако, так как apt-configure выполняется до runcmd, я не могу установить dirmngr перед попыткой импортировать ключ. В результате остальная часть конфигурации потерпит неудачу, и система будет в нежелательном состоянии.

Как я могу обойти эту проблему?

1 ответ

Что касается конкретного случая пропавших без вести dirmngr пакет на Debian 9.1, вызывающий сбой apt-configure модуль, у меня был успех с добавлением следующего bootcmd вход в мой cloud-init конфигурация:

# APT fails to acquire GPG keys if package dirmngr is missing
bootcmd:
  - [ cloud-init-per, once, dirmngr-aptupdate, apt-get, update ]
  - [ cloud-init-per, once, dirmngr-aptinstall, apt-get, install, dirmngr ]

Так как cloud-init конфигурация получена из сети (я использую пользовательские данные EC2), сеть гарантированно будет работать, когда bootcmd выполнен. cloud-init-per Программа позволяет легко гарантировать, что эти команды не будут повторно выполняться при дальнейшей загрузке экземпляра.

Другие вопросы по тегам