2015-06-13 8 views

risposta

4

Una volta che ho iniziato a imparare rubino ho trovato la soluzione ideale :)

BEGIN dichiara il codice di essere chiamato prima che il programma viene eseguito.

#!/usr/bin/ruby 
puts "This is main Ruby Program" 
BEGIN { 
    puts "Initializing Ruby Program" 
} 

produrrà questo:

Initializing Ruby Program 
This is main Ruby Program 

e funziona perfettamente all'interno di Vagrantfile.

4

provare il vagrant-triggers plugin:

$ vagrant plugin install vagrant-triggers 

Quindi aggiungere:

config.trigger.after :up do 
    puts 'hello' 
end 

al Vagrantfile.

+0

Questo verrà eseguito solo sul primo "vagrant up", e solo successivamente per "vagrant provision". Quindi, potrebbe non fare * del tutto * ciò che vuoi. –

+0

Thx per la risposta ma sì, non è esattamente quello che sto cercando ... –

+0

Risposta aggiornata - ho trovato un plugin diverso che * potrebbe * fare ciò che vuoi. –

8

Vagrant non ha bisogno di un plug-in per visualizzare un messaggio alla fine, basta aggiungere un gestore di shell dopo tutti gli altri provisioner e avere quell'eco come vuoi.

config.vm.provision "ansible" do |ansible| 
    # ... or other existing provisioners 

config.vm.provision "shell", privileged: false, inline: <<-EOF 
    echo "Vagrant Box provisioned!" 
    echo "Local server address is http://#{$hostname}" 
EOF 

Con questo, vagrant up dovrebbe finire con qualcosa di simile:

==> default: Running provisioner: shell... 
    default: Running: inline script 
==> default: Vagrant Box provisioned! 
==> default: Local server address is http://vagrant.dev 

Aggiunta privileged: false (come indicato nella Vagrant Issue 1673) è necessario per sopprimere l'errore di Ubuntu stdin: is not a tty.

+0

omg! ofc! grazie! –

+1

Si noti che se si desidera utilizzare una variabile Ruby negli argomenti, [questa domanda] (http://stackoverflow.com/q/17745840/5240327) è coperta. –

+0

Cosa succede se si dispone di un Vagrantfile che visualizza più macchine virtuali? Non voglio che il messaggio in su venga visualizzato più volte. i = veramente = voglio che venga mostrato dopo che tutta l'elaborazione è stata fatta e prima delle uscite vagabonde. –

16

Vagrant dispone ora del supporto integrato per la visualizzazione di un messaggio dopo vagrant up. Basta aggiungere questo alla tua Vagrantfile:

config.vm.post_up_message = "This is the start up message!" 

E poi, dopo il vostro VM ha messo a punto vedrete questo messaggio nella verde:

==> default: Machine 'default' has a post `vagrant up` message. This is a message 
==> default: from the creator of the Vagrantfile, and not from Vagrant itself: 
==> default: 
==> default:  This is the start up message! 
4

È anche possibile utilizzare una variabile di stile heredoc con l'config.vm.post_up_message come così:

$msg = <<MSG 
------------------------------------------------------ 
Local Websphere, accessible at 127.0.0.1 

URLS: 
- app under test - http://localhost:8080/<app url>/ 
- ibm console  - http://localhost:9060/ibm/console 

------------------------------------------------------ 
MSG 

... 
... 

Vagrant.configure("2") do |config| 
    config.vm.post_up_message = $msg 
end 

che si tradurrà in uscita in questo modo:

==> default: Machine 'default' has a post `vagrant up` message. This is a message 
==> default: from the creator of the Vagrantfile, and not from Vagrant itself: 
==> default: 
==> default: ------------------------------------------------------ 
==> default: Local Websphere, accessible at 127.0.0.1 
==> default: 
==> default: URLS: 
==> default: - app under test - http://localhost:8080/<app url>/ 
==> default: - ibm console  - http://localhost:9060/ibm/console 
==> default: 
==> default: ------------------------------------------------------