2016-07-15 64 views
1

作爲配置虛擬機的一部分,我需要在配置時創建一個配置文件。在我的主機,我可以將變量傳遞給一個erb文件:在Vagrant配置中渲染erb

erb x=1 y=2 some_conf.erb 

是否有可能使主機上的erb文件,然後通過管道將結果提供給客人?

如果我將erb命令放在config.vm.provision "shell"中,則該命令在來賓機(不含Ruby)上運行,例如,

# this command runs on the guest 
# where as I want erb to run on the host 
config.vm.provision "shell", inline: <<-SHELL 
    erb x=1 y=2 some_conf.erb > /etc/some_conf 
SHELL 

回答

0

流浪文件實際上是一個紅寶石腳本,所以你可以使用ruby erb模板引擎。確保創造必要的類模板

# -*- mode: ruby -*- 
# vi: set ft=ruby : 
require 'erb' 

Vagrant.configure("2") do |config| 

    template = ERB.new File.read("template/some_conf.erb") 
    p template.result(binding) 
end 

如果你不想建立新類等,並已安裝ruby2.2你可以直接撥打該局從CLI,它會運行你的主機不是客戶

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure("2") do |config| 

    exec ('erb x=1 y=2 template/some_conf.erb > some_conf') 

end 

一旦主機上生成some_conf文件,你可以使用vagrant file provisioner推主機

config.vm.provision "file", source: "some_conf", destination: "/somewhere/on/the/guest/some_conf" 
+0

使用第一爲例對這個單一的文件e,如何將輸出傳輸到客戶端上的文件? – Zeophlite

+0

您可以使用vagrant文​​件供應商,添加示例 –