Chef使用多个变量创建递归目录

时间:2014-12-18 09:13:52

标签: chef

在我的厨师食谱中,我需要创建这样的目录(树):

/var/www/common
    + variable_1 (array)
        + variable _2 (array)
            + variable_3 (array)

给予他们共同的权限。我已经google了,但是无法为这种树选择正确的方法..

2 个答案:

答案 0 :(得分:4)

我会做一些事情:

variable_1.each do |v1|
  directory "/var/www/common/#{v1}" do
    owner 'me'
    group 'me'
    mode '755'
  end
  variable_2.each do |v2|
    directory "/var/www/common/#{v1}/#{v2}" do
      owner 'me'
      group 'me'
      mode '755'
    end
    variable_3.each do |v3|
      directory "/var/www/common/#{v1}/#{v2}/#{v3}" do
        owner 'me'
        group 'me'
        mode '755'
      end
    end
  end
end

哈希可能是更好的循环方式,也许创建叶子目录并执行递归chownchmod可能是另一种方法。

这里的主要缺点是,即使创建具有directory属性的父级,chef中的recursive资源也只在最后一个上设置权限。

答案 1 :(得分:1)

Chef不支持此功能。您可以使用recursive资源上的directory选项轻松创建嵌套文件夹,但只有叶文件夹使用请求权限,所有其他文件夹只能获得umask指示的内容。

最简单的方法是循环:

my_variable = ['/var/www/common', 'foo', 'bar', 'baz']
path_so_far = ''

my_variable.each do |path|
  path_so_far = File.join(path_so_far, path)
  directory path_so_far do
    owner 'me'
    group 'me'
    mode '755'
  end
end
相关问题