Как я могу определить порядок запуска бродячих плагинов промежуточного программного обеспечения?

Я создаю виртуальную машину Red Hat Enterprise Linux 7 в VirtualBox с vagrant. Если у меня есть базовый блок, который не имеет гостевых дополнений VirtualBox и не зарегистрирован, мне нужно вручную сделать следующее:

  • Зарегистрируйте коробку в менеджере по подписке
  • Установить гостевые дополнения

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

Теперь для обеих этих задач существуют сторонние бродячие плагины: vagrant-registration. и vagrant-vbguest.

Проблема, с которой я столкнулся, заключается в том, что плагин vagrant-vbguest всегда будет пытаться запуститься первым и не сможет загрузить необходимые ему пакеты, потому что плагин vagrant-registration еще не успел зарегистрировать систему.

Есть ли способ заставить один из них запускаться раньше другого? Или любое другое альтернативное решение, о котором я еще не подумал (я еще не бродячий волшебник (или это просто называется бродягой?))?


person grdryn    schedule 24.07.2015    source источник
comment
может быть не тем ответом, который вы ищете, но вы можете отключить плагин vbguest для своей виртуальной машины (добавив config.vbguest.auto_update = false ) и запустить его вручную после его запуска с vagrant vbguest.   -  person Frederic Henri    schedule 31.07.2015
comment
@FredericHenri Да, я понял это, спасибо. Я ищу лучший способ. Спасибо за комментарий в любом случае :)   -  person grdryn    schedule 31.07.2015


Ответы (2)


в духе моих комментариев, но это должно быть более автоматическим способом

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vbguest.auto_update = false

  if Vagrant.has_plugin?("vagrant-registration")
    system "vagrant vbguest --auto-reboot --no-provision" if ARGV[0] == 'up'
  end

не уверен, что он будет работать в правильном порядке (сам не пробовал)

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

другая возможность, которую я вижу, - это использовать плагин бродячих триггеров (https://github.com/emyl/vagrant-triggers), вы можете настроить запуск определенного скрипта после выполнения определенной команды

config.vbguest.auto_update = false
config.trigger.after :up do
  run "vagrant vbguest --auto-reboot --no-provision"
end

vbguest правильно запускается после загрузки машины (поэтому я предполагаю, что после того, как vagrant-registration сделал свое дело)

вывод (интересная часть) запуска vagrant up :

==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.2.0
    default: VirtualBox Version: 4.3
==> default: Mounting shared folders...
    default: /vagrant => /Users/fhenri/project/examples/vagrant/precise
==> default: Running triggers after up...
==> default: Executing command "vagrant vbguest --auto-reboot --no-provision"...
==> default: GuestAdditions versions on your host (4.3.16) and guest (4.2.0) do not match.

установка гостевых дополнений продолжается, и машина перезагружается нормально

person Frederic Henri    schedule 31.07.2015
comment
Спасибо за ваш вклад. Похоже, что vagrant не любит работать с exec. Вот что я получаю (даже если я изменю его на vagrant status): похоже, что Vagrant работает в среде Bundler. Будет использован ваш существующий Gemfile. Vagrant не будет автоматически загружать какие-либо плагины, установленные с помощью vagrant plugin. Vagrant автоматически загрузит любые плагины из группы «плагины» в вашем Gemfile. Вы можете заставить Vagrant вступить во владение с помощью VAGRANT_FORCE_BUNDLER. Это кажется бесконечным циклом. - person grdryn; 05.08.2015
comment
вы пытались заменить execна system ? - person Frederic Henri; 07.08.2015
comment
Я только что попробовал это сейчас, и это убило мою хост-машину бродячими процессами. Есть ли способ «exec» или «system» только для определенных бродячих команд? Я думаю, проблема в том, что он работает, даже если я говорю vagrant status - person grdryn; 07.08.2015
comment
есть способ запустить только для конкретной команды, но он не работает, он не ждет запуска. редактирование с помощью плагина бродячих триггеров - - person Frederic Henri; 09.09.2015