如何编写not_if来检查目录或文件权限

时间:2016-09-16 23:35:41

标签: ruby chef chef-recipe

每次运行我的食谱时都会运行以下脚本:

execute 'Change group ownership tomcat' do
   command 'chown -R tomcat.admin /usr/private/tomcat'
end

如果所有权为not_if,有人可以建议如何编写tomcat.admin或阻止此代码执行的内容吗?

3 个答案:

答案 0 :(得分:0)

这里没有很好的选择。为此编写代码比它可能值得更加棘手。我只是让它每次都运行,除非你真的需要解决这个问题:(这是在我的列表中修复某些点,但短版本将使用Dir#[]或类似的获取每个文件的列表/目录条目然后使用Unix上的File.stat接口和Windows上的类似API来检查那里的每一个东西。但是,再次让它运行并担心另一件事:)

答案 1 :(得分:0)

这不是一个好习惯。使用目录资源。如果它已存在,则定义将仅更新所有权。

directory '/usr/private/tomcat' do
  owner 'tomcat'
  group 'admin'
  mode '0755'
  action :create
end

使用execute肯定更优雅。

答案 2 :(得分:0)

使用“查找过滤文件”

通过使用 find 实用程序的-exec标志来管理只需要更改的文件和目录的权限,这是一种简单的方法。以下内容查找不属于 tomcat admin 组的所有文件,然后仅将要更改的文件列表传递给 chown < / em>命令。

execute 'chown tomcat files' do
  command 'find /usr/private/tomcat \
           ! -user tomcat -or ! -group admin \
           -exec chown tomcat:admin {} +'
end

这可能或者可能不比简单地递归地chowning整个树而不首先检查权限更快。很大程度上取决于 chmod 的实现以及特定系统上生成的文件系统I / O量,但使用 find 应该减少文件系统写入,特别是如果你'在文件系统上设置NOATIME