2017-07-17 12 views
0

Rubyを使用したことはありませんでしたが、これはいくつかの例を見ていればまっすぐになりました。迷惑メールファイルと外部設定 - 何が間違っていますか?

vmconfig.yml:

server: 
    hostname: mydomain.com 

Vagrantfile

require 'yaml' 
vmconfig = YAML.load_file('vmconfig.yml') 

Vagrant.configure(2) do |config| 
    config.vm.box = "debian/contrib-jessie64" 

    config.vm.provision "shell", inline: <<-SHELL 
    apt-get update 

    hostname vmconfig["server"]["hostname"] 
    config.vm.synced_folder ".", "/vagrant", type: "virtualbox" 
end 

ホスト名がVMが建物を終了したとき(べき設定ファイルに)設定されていません?値をハードコードすると、それはうまく動作しますか?

答えて

1

最高は

config.vm.provision "shell", inline: <<-SHELL 
    apt-get update 
    SHELL 

    config.vm.hostname = vmconfig["server"]["hostname"] 
    config.vm.synced_folder ".", "/vagrant", type: "virtualbox" 

の下にあなたがYAMLを介して実行したい場合は、あなたのVagrantfile

に定義することができますother available settingsを見ることができるようにVMのホスト名を定義するために放浪を使用することで、スクリプトから書き、あなたは

config.vm.provision "shell", inline: <<-SHELL 
    apt-get update 
    hostname #{vmconfig["server"]["hostname"]} 
    .... set other things from yaml with #{<variable>} .... 
    SHELL 
+0

string interpolationが更新応答をありがとうとそれを行う必要があるが、私は見ての例のいずれもT思えない理由として非常に興味がありますo補間された文字列を使用する(https://stackoverflow.com/a/26394449/897075)これはまさに私がやろうとしていることです。私は認めなければならないが、文字列の補間はひどく見えるが、それはトリックを行うように見えた - しかし、今私は理由を理解しようとしている?これらすべての例と私の考え方とは何が違うのですか? –

+0

私はちょうど理由を考え出したと思うかもしれません...私が見た例はconfig.vm.XXXを使っています - 私の悪い:) –

+1

それは同じではありません - 私の最初のコードスニペットが文字列補間、 yamlファイルを読むことによって直接期待されるホスト名を取得します。 2番目の部分では文字列補間が必要ですが、テキスト全体(この場合はSHELL文字列変数)内でスクリプト全体が実行されるので、ホスト名部分がyamlとその変数から読み取られなければならないちょうどいくつかのランダムなテキスト –

関連する問題