web-dev-qa-db-fra.com

Imprimer le message après le démarrage de vagrant machine avec "vagrant up"

J'ai besoin d'afficher un message à l'issue de la commande vagrant up.

J'ai essayé de définir une fonction:

def hello
    puts 'hello'
end

Et puis l'appel et la fin du fichier:

hello 

Mais il imprime toujours au début de la sortie plutôt qu'à la fin. Comment puis-je imprimer un message à la fin?

14
Roman Iuvshin

Une fois que j'ai commencé à apprendre Ruby, j'ai trouvé la solution idéale :)

BEGINDéclare le code à appeler avant l'exécution du programme.

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

cela produira ceci:

Initializing Ruby Program
This is main Ruby Program

Et cela fonctionne parfaitement dans Vagrantfile.

5
Roman Iuvshin

Vagrant a maintenant un support intégré pour qu'un message apparaisse après vagrant up. Ajoutez simplement ceci à votre Vagrantfile:

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

Et après que votre VM soit arrivé, vous verrez ce message en vert:

==> 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!
23
Cory Klein

Vous pouvez également utiliser une variable de style HEREDOC avec le config.vm.post_up_message comme suit:

$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

Ce qui produira une sortie comme ceci:

==> 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: ------------------------------------------------------
13
slm

Vagrant n'a pas besoin d'un plugin pour afficher un message à la fin, il suffit d'ajouter un ravitailleur Shell après tous vos autres ravitailleurs et de le faire écho à votre guise. 

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

Avec cela, vagrant up devrait se terminer par quelque chose comme ceci:

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

L'ajout de privileged: false (comme mentionné dans Vagrant Issue 1673 ) est nécessaire pour supprimer l'erreur stdin: is not a tty de Ubuntu.

9
joemaller

Essayez le plugin vagrant-triggers :

$ vagrant plugin install vagrant-triggers

Puis ajouter:

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

à la Vagrantfile.

5
Jon Burgess

La solution heredoc de @slm est super-mignonne, mais vous pouvez aussi mettre l'hérédoc dans le Ruby ainsi:

config.vm.post_up_message = <<-HEREDOC
  This is line 1
  This is line 2
  THis is line 3
HEREDOC

En fait, il existe quelques styles légèrement différents de Ruby heredoc: https://infinum.co/the-capsized-eight/multiline-strings-Ruby-2-3-0-the-squiggly-heredoc

1
Daniel Rhodes