Распечатать сообщение после загрузки бродячей машины с "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 не нужен плагин для отображения сообщения в конце, просто добавьте Shell 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
(как упоминалось в Vagrant вопрос 1673) необходимо подавить Ubuntu stdin: is not a tty
ошибка.
попробовать залет-триггеры плагин:
$ vagrant plugin install vagrant-triggers
потом добавил:
config.trigger.after :up do
puts 'hello'
end
до Vagrantfile
.
Как только я начал изучать Ruby, я нашел идеальное решение:)
начать объявляет код, который будет вызван до запуска программы.
#!/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