2015-07-24 18 views
10

Sto creando una VM Red Hat Enterprise Linux 7 in VirtualBox con vagabondo. Se ho una scatola di base che sia non hanno le Guest Additions di VirtualBox, e non è registrato, quindi avrei bisogno manualmente per effettuare le seguenti operazioni:Come posso definire l'ordine di esecuzione dei plugin middleware vagabondi?

  • registrare la scatola con subscription-manager
  • Installa guest aggiunte

Il motivo per cui avrei dovuto eseguire prima la registrazione, è che per installare le aggiunte guest, avrei bisogno di installare alcuni pacchetti aggiuntivi.

Ora, ci sono plugin vagrant di terze parti per entrambe queste attività: vagrant-registration e vagrant-vbguest.

Il problema che sto avendo è che il plugin vagrant-vbguest cercherà sempre di correre prima, e non riuscirà a scaricare i pacchetti di cui ha bisogno, perché il plugin vagrant-registration non ha ancora avuto la possibilità di registrare il sistema.

C'è un modo per forzare uno di loro a essere eseguito prima dell'altro? O qualsiasi altra soluzione alternativa a cui non avessi ancora pensato (non sono un mago vagabondo (o si chiama semplicemente un vagabondo?) Ancora)?

+0

potrebbe non essere la risposta che stai cercando, ma è possibile disattivare il plugin vbguest per la VM (aggiungendo 'config.vbguest. auto_update = false') ed eseguirlo manualmente dopo il suo lancio con 'vagrant vbguest'. –

+0

@FredericHenri Sì, l'avevo capito, grazie. Quello che sto cercando è un modo migliore. Grazie per il commento comunque :) –

risposta

4

nello spirito dei miei commenti, ma dovrebbe essere in un modo più automatico

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 

non sono sicuro però che verrà eseguito nel giusto ordine (non provate io)

Modifica il problema con questo codice è che proverà a eseguire vbguest quando il comando viene avviato, quindi prima che vm sia in esecuzione, vbguest non può installare le librerie necessarie.

l'altra possibilità che vedo è quello di utilizzare il plugin grilletto vagabondo (https://github.com/emyl/vagrant-triggers), è possibile definire per eseguire script specifico dopo il comando specifico è stato eseguito

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

il vbguest viene eseguito correttamente dopo la macchina è avviata (quindi presumo dopo vagabondo-registrazione ho proprio roba)

l'uscita (parte interessante) di correre 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. 

l'installazione delle aggiunte guest si accende e la macchina viene riavviata ok

+0

Grazie per il vostro contributo. Sembra che a vagabondare non piaccia essere gestito con exec. Ecco cosa ottengo (anche se lo cambio in 'status vagrant'):" Vagrant sembra essere in esecuzione in un ambiente Bundler.Verrà utilizzato il Gemfile esistente . Vagrant non carica automaticamente alcun plugin installato con 'vagrant plugin'. Vagrant caricherà automaticamente tutti i plugin nel gruppo nel tuo Gemfile. Puoi forzare Vagrant a prendere in consegna lo con VAGRANT_FORCE_BUNDLER. "Questo sembra che il ciclo venga ripetuto all'infinito. –

+0

hai provato a sostituire' exec'by' system'? –

+0

L'ho appena provato e ha ucciso la mia macchina host con processi vagabondi. c'è un modo per 'exec' o 'sistema' solo per particolari comandi vagabondi? Penso che il problema è che è in esecuzione anche se dico 'vagrant status' –