如何在Chef / Ruby执行命令中使用变量?

时间:2014-09-19 10:59:26

标签: ruby chef

我正在创建一个简单的Chef cookbook,用于在VPS上设置vhost。我通过将domain变量传递给Chef / .erb模板来创建正确的.conf文件,但我也尝试这样做(简化代码示例):

node[:domains].each do |domain|
    execute 'sudo mkdir -p /var/www/#{domain}/public_html'
end

但是,变量不会输出到字符串中,而命令只是创建一个名为的文件夹:

/var/www/#{domain}/public_html

那么......是否有一种可以接受的方法来在Chef执行命令中使用循环中的变量 - 或者我的Ruby语法是不是很糟糕?

1 个答案:

答案 0 :(得分:4)

在尝试将变量注入字符串时,请使用双引号而不是单引号。

node [: domains] .each do | domain |
     execute "create_dir_#{domain}" do
       command   "sudo mkdir /var/www/#{domain}/public_html"
     end
end

我建议使用directory资源而不是执行

node [: domains] .each do | domain |
     directory "/var/www/#{domain}/public_html" do
       recursive true
       action :create
     end
end