厨师执行块

时间:2016-03-10 17:13:34

标签: chef chef-recipe

首先,我对编码和厨师都很陌生,所以如果我提出愚蠢的问题,请耐心等待。

如果用户不匹配,是否可以在配方中运行我的执行块。它只是一个简单的单行语句:chown -R aaa:aaa file / path。因此,如果文件/路径的所有者已经是aaa,请不要运行它。

如果我不清楚这个问题,我会道歉,我会尽力清理它。

非常感谢任何帮助。谢谢你的时间。

2 个答案:

答案 0 :(得分:4)

所以另一个答案在技术上是正确的,但真正的方法是使用file资源:

file 'file/path' do
  owner 'aaa'
  group 'aaa'
end

这已经是幂等的(对于#34;在内部不会改变已经很好的事情而言,这是一个奇特的词语。)

答案 1 :(得分:0)

您可以使用not_if,如下所示:

require 'etc'

execute "chown file/path" do
  command "chown -R aaa:aaa file/path"
  not_if { Etc.getpwuid(File.stat("file/path").uid).name == "aaa" }
end

如果您还要检查该组,只需将其添加到条件中即可。

请注意,您的方法实际上并不是幂等的,因为该目录可能由aaa拥有,但包含其他人的文件。最好总是在没有条件的情况下运行chown,以便强制所有内容都aaa:aaa。如果文件已经aaa:aaa,则没有任何反应。