web-dev-qa-db-ja.com

「vagrant up」でvagrantマシンを起動した後にメッセージを出力する

vagrant upコマンドの完了時にメッセージを表示する必要があります。

私は関数を定義しようとしました:

def hello
    puts 'hello'
end

そして、それとファイルの最後を呼び出します:

hello 

ただし、出力の最後ではなく、常にbeginningに出力されます。最後にメッセージを印刷するにはどうすればよいですか?

17
Roman Iuvshin

学び始めたら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の中で完全に動作します。

7
Roman Iuvshin

Vagrantはvagrant upの後に表示されるメッセージの組み込みサポートを備えています。これをVagrantfileに追加するだけです:

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

そして、VMが表示されると、このメッセージが緑色で表示されます。

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

次のように、config.vm.post_up_messageでHEREDOCスタイルの変数を使用することもできます。

$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: ------------------------------------------------------
16
slm

Vagrantは、最後にメッセージを表示するためのプラグインを必要としません。他のすべてのプロビジョナーの後にシェルプロビジョナーを追加し、必要なものをエコーし​​ます。

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

Ubuntuのprivileged: falseエラーを抑制するには、stdin: is not a tty(Vagrant Issue 167 で説明)を追加する必要があります。

9
joemaller

vagrant-triggersプラグイン を試してください:

$ vagrant plugin install vagrant-triggers

それから加えて:

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

Vagrantfileに。

5
Jon Burgess

@slmのheredocソリューションは非常にかわいいですが、heredocinをRubyに配置することもできます。

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

1
Daniel Rhodes