2015-07-24 22 views
10

Tworzę Red Hat Enterprise Linux 7 VM w VirtualBox z vagrantem. Jeśli mam pudełko podstawy, które zarówno nie ma VirtualBox uzupełnień gości, i nie jest zarejestrowany, to bym ręcznie trzeba wykonać następujące czynności:Jak zdefiniować kolejność wykonywania pluginów oprogramowania pośredniego?

  • Zarejestruj okno z subskrypcji kierownika
  • Zainstaluj dodatki dla gości

Powodem, dla którego muszę najpierw przeprowadzić rejestrację, jest to, że aby zainstalować dodatki dla gości, muszę zainstalować dodatkowe pakiety.

Istnieją teraz wtyczki vagrant innych firm do obu tych zadań: vagrant-registration i vagrant-vbguest.

Problem, który mam, polega na tym, że wtyczka vagrant-vbguest zawsze będzie starała się uruchomić jako pierwsza i nie będzie w stanie pobrać potrzebnych pakietów, ponieważ wtyczka vagrant-registration nie miała jeszcze okazji zarejestrować systemu.

Czy istnieje sposób zmuszenia jednego z nich do uruchomienia przed drugim? Albo jakiekolwiek inne alternatywne rozwiązanie, o którym jeszcze nie pomyślałem (nie jestem czarodziejem-włóczęgą (czy jest to po prostu zwany włóczęgą?))?

+0

nie może być odpowiedź szukasz, ale można wyłączyć wtyczkę vbguest dla VM (dodanie 'config.vbguest. auto_update = false') i uruchom go ręcznie po uruchomieniu z 'vagrant vbguest'. –

+0

@FredericHenri Tak, wymyśliłem to, dzięki. To, czego szukam, to lepszy sposób. Dzięki za komentowanie i tak :) –

Odpowiedz

4

w duchu moich uwag, ale powinna być w bardziej automatyczny sposób

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 

nie wiem, jednak, że to będzie działać w odpowiedniej kolejności (nie starają się)

Edit Problem z tym kodem polega na tym, że spróbuje uruchomić vbguest tuż po uruchomieniu polecenia, więc przed uruchomieniem vm, vbguest nie może zainstalować niezbędnych bibliotek.

druga możliwość widzę jest użycie Vagrant wtyczki spustowego (https://github.com/emyl/vagrant-triggers), można zdefiniować do uruchomienia konkretnego skryptu po specyficzne komendy został uruchomiony

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

vbguest jest prawidłowo prowadzony po maszyna jest uruchamiany (tak, jestem zakładając po Vagrant rejestracji nie swoje własne rzeczy)

wyjście (interesująca część) prowadzenia 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. 

instalacja dodatków dla gości jest kontynuowana i komputer został ponownie uruchomiony ok

+0

Dzięki za twój wkład. Wygląda na to, że vagrant nie lubi być uruchamiany przez exec. Oto, co otrzymuję (nawet jeśli zmienię go na status "vagrant"): "Vagrant wydaje się działać w środowisku Bundler.Zostanie użyty istniejący Gemfile. Vagrant nie będzie automatycznie ładował żadnych wtyczek zainstalowanych z 'vagrant plugin'. Vagrant automatycznie doda wszystkie wtyczki do grupy "wtyczek" w twoim Gemfile. Możesz zmusić Vagranta do przejęcia z VAGRANT_FORCE_BUNDLER. "Wydaje się, że to pętla w nieskończoność –

+0

czy próbowałeś zastąpić' exec'by 'system'? –

+0

Właśnie próbowałem tego teraz, i to zabiło moją maszynę hosta procesami vagrant. istnieje sposób, aby "exec" lub "system" tylko dla poszczególnych poleceń vagrant? Myślę, że problem jest, że działa, nawet jeśli mówię "status vagrant" –