Печать сообщения после загрузки машины vagrant с надписью " vagrant up"
Мне нужно вывести сообщение о завершении команды vagrant up
.
Я попытался определить функцию:
def hello
puts 'hello'
end
А затем вызываем его и конец файла:
hello
Но он всегда печатает в начале вывода, а не в конце. Как я могу напечатать сообщение в конце?
6 ответов:
Vagrant теперь имеет встроенную поддержку для сообщения, появляющегося после
vagrant up
. Просто добавьте это к вашемуVagrantfile
:config.vm.post_up_message = "This is the start up message!"
А затем, когда ваша виртуальная машина появится, вы увидите это сообщение зеленым цветом:
==> 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!
Вы также можете использовать переменную стиля HEREDOC с
config.vm.post_up_message
следующим образом:$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: ------------------------------------------------------
Vagrant не нуждается в плагине для отображения сообщения в конце, просто добавьте оболочку provisioner после всех ваших других provisioners и имейте это эхо, что вы хотите.
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
должно закончиться примерно так:==> default: Running provisioner: shell... default: Running: inline script ==> default: Vagrant Box provisioned! ==> default: Local server address is http://vagrant.dev
Добавление
privileged: false
(Как упоминалось в VagrantIssue 1673 ) необходимо для подавления ошибки Ubuntustdin: is not a tty
.
Попробуйте плагин vagrant-triggers:
$ vagrant plugin install vagrant-triggers
Затем добавить:
config.trigger.after :up do puts 'hello' end
К
Vagrantfile
.
Как только я начал изучать Ruby, я нашел идеальное решение :)
BEGIN объявляет код, вызываемый перед запуском программы.
#!/usr/bin/ruby puts "This is main Ruby Program" BEGIN { puts "Initializing Ruby Program" }
Она произведет следующее:
Initializing Ruby Program This is main Ruby Program
И он прекрасно работает внутри Vagrantfile.
Решение heredoc из @slm супер-мило, но вы также можете поместить heredoc в Рубин таким образом:
config.vm.post_up_message = <<-HEREDOC This is line 1 This is line 2 THis is line 3 HEREDOC
На самом деле существует несколько слегка отличающихся стилей Ruby heredoc: https://infinum.co/the-capsized-eight/multiline-strings-ruby-2-3-0-the-squiggly-heredoc