2015-07-24 1 views
10

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

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

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

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

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

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

+0

не может быть ответом вы ищете, но вы можете отключить vbguest плагин для виртуальной машины (добавление 'config.vbguest. auto_update = false') и запустить его вручную после запуска с помощью 'vagrant vbguest'. –

+0

@FredericHenri Да, я понял это, спасибо. То, что я ищу, - лучший способ. Спасибо за комментирование в любом случае :) –

ответ

4

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

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 сразу после запуска этой команды, прежде чем vm будет запущен, поэтому 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 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. 

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

+0

Спасибо за ваш вклад. Похоже, что бродяга не любит бегать с exec. Вот что я получаю (даже если я изменю его на «бродячий статус»): «Бродяга, похоже, работает в среде Bundler.Будет использован ваш существующий Gemfile . Vagrant не будет автоматически загружать любые плагины , установленный с 'vagrant plugin'. Vagrant будет автоматически загружать любые плагины в группе плагинов в вашем Gemfile. Вы можете заставить Vagrant взять на себя с VAGRANT_FORCE_BUNDLER. «Кажется, что тогда цикл бесконечно. –

+0

вы попробовали заменить' exec'by' system'? –

+0

Я просто попробовал это сейчас, и он убил мою хост-машину с помощью бродячих процессов. есть способ «exec» или «system» только для особых бродячих команд? Я думаю, что проблема в том, что она работает, даже если я говорю «бродячий статус» –