从运行时之前不存在的属性生成提供程序

时间:2014-01-05 05:08:10

标签: chef

我创建了两个cookbook,一个评估物理阵列控制器和配置,分区,luks_encrypts,mkfs并将驱动器安装到/ data / 1,/ data / 2,/ data / 3等...这个工作原理在一台新机器上做得非常好,无论有多少驱动器或它们的尺寸如何,硬件都处于我们正在寻找的状态。

我还有一个简单的cassandra食谱,可以安装fss版本的cassandra,运行cassandra.yaml的模板,并根据安装到/ data / 1 / data / 2 / data / 3的驱动器创建数据目录等等... 完成类似于:

# attributes file
default[:datadirs] = []
Dir.foreach("/data") do |drives|
  next if drives.match(/^\.\.?$)
  if system "/bin/mountpoint /data/#{drives}>/dev/null" then
    default[:cassandra][:data_dirs].push( "/data/#{drives}/cassandra/data" )
  end
end

# recipe
node[:cassandra][:data_dirs].each do |data_dir|
  directory "#{data_dir}" do
    owner "cassandra"
    group "cassandra"
    mode 0750
    action :create
    recursive true
  end
end

当然,这是在编译时生成的,当/ data中没有任何内容时。磁盘cookbook运行并填充/data/#但是,cassandra cookbook不会工作,除非有一种方法在磁盘食谱完成后重新生成配方。第二次运行厨师独奏使事情进入正常状态。

有没有更好的方法来创建目录?我想我可以使用lazy属性赋值来使我的模板工作,但是目录创建给了我地狱。

0 个答案:

没有答案