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
Программа позволяет легко гарантировать, что эти команды не будут повторно выполняться при дальнейшей загрузке экземпляра.