2015-06-13 19 views
9

"yukarı serseri" Ben vagrant up komutun tamamlanması ile bir mesaj görüntüler gerekiyor.Baskı mesajı ile serseri makineyi önyükleme sonra

Ben bir işlev tanımlama denedim:

def hello 
    puts 'hello' 
end 

Sonra onu ve dosyanın sonuna çağırarak:

hello 

Ama her zaman yerine çıkışın başlayan de yazdırır sonundan daha. Sonunda bir mesajı nasıl yazdırabilirim?

cevap

4

Ruby öğrenmeye başladıktan sonra ben ideal çözüm :)

programını başlatmadan önce mutlaka çağrılacak kodu Diyor BEGIN buldum.

Initializing Ruby Program 
This is main Ruby Program 

Ve Vagrantfile içini mükemmel çalışıyor:

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

bu üretecek.

4

vagrant-triggers plugin deneyin:

$ vagrant plugin install vagrant-triggers 

Sonra ekleyin:

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

Vagrantfile için.

+0

Bu yalnızca serseri provision' 'sadece bundan sonra ilk' serseri up' üzerinde çalıştırırız ve. Bu nedenle, * ne * ne * isteyemez. –

+0

Cevap için Thx ama evet tam olarak aradığım şey değil ... –

+0

Güncelleme yanıtı - ne istediğinizi * yapabileceğiniz farklı bir eklenti geldi. –

8

Serseri, sonunda bir ileti görüntüler sadece bütün diğer provisioners sonra bir kabuk Provisioner ekleyebilir ve istediğiniz her şeyin yankı için bir eklenti gerektirmez. (Vagrant Issue 1673 belirtildiği gibi)

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

privileged: false ekleme Ubuntu'nun stdin: is not a tty hatayı bastırmak için gereklidir: aldığımızda

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 

, vagrant up böyle bir şey ile sona ermelidir.

+0

omg! ofc! teşekkür ederim! –

+1

Eğer bir Ruby değişkenini yayında kullanmak istiyorsanız [bu soru] (http://stackoverflow.com/q/17745840/5240327) ele aldığınızı unutmayın. –

+0

Birden çok sanal makineyi oluşturan bir Vagrant dosyası var mı? Yukarı mesajın birkaç kez gösterilmesini istemiyorum. i = gerçekten = tüm işlem yapıldıktan ve vagrant çıkmadan önce görünmesini istiyorum. –

16

Serseri şimdi bir mesaj vagrant up sonra görünmesi için yerleşik desteğe sahiptir.

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

Ve VM geldi sonra o zaman yeşil bir mesaj görürsünüz: Sadece Vagrantfile eklemek bu

==> 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

Ayrıca config.vm.post_up_message gibi bir heredoc tarzı değişkeni kullanabilirsiniz böylece: şöyle çıkışı ile sonuçlanacaktır

$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 

:

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