zab*_*mba 21 file-permissions chef-infra
在resource_directory有可用的只有2个动作:create和delete
我需要递归更新目录的所有者和组.
我怎么做?
使用简单resource_execute?
execute "chown-data-www" do
command "chown -R www-data:www-data /var/www/myfoler"
user "root"
action :run
end
Run Code Online (Sandbox Code Playgroud)
Bil*_*ner 12
您可以将默认操作设置为空,然后使用可能搞砸的资源通知perm修复程序:
execute "chown-data-www" do
command "chown -R www-data:www-data /var/www/myfoler"
user "root"
action :nothing
end
resource "that may screw up perms" do
stuff "one two three"
notifies :run, execute "chown-data-www"
end
Run Code Online (Sandbox Code Playgroud)
如果有更多选项,您可以执行操作:运行但不是如果父文件夹已经是正确的权限.您可以将其更改为包含更深/有问题的文件/目录,或者使用与此类似的find命令
execute "chown-data-www" do
command "chown -R www-data:www-data /var/www/myfoler"
user "root"
action :run
not_if '[ $(stat -c %U /var/www/myfolder) = "www-data" ]'
end
Run Code Online (Sandbox Code Playgroud)
编辑:修复以反映下面的评论
我们可以编写一个 Chef 资源,它会遍历目录层次结构,并为其找到的每个文件创建一个文件或目录资源,然后将其设置为管理这些文件的所有者和组。然而,您不会喜欢这样,因为如果该目录中有一千个文件,那么您将获得一千个厨师资源,并且您的收敛速度会很慢。
事实上,如果您愿意,您可以编写自己的代码,该代码的功能类似于我在 @name 引用的票证Tickets.opscode.com/browse/CHEF-690中编写的代码,但我不推荐这样做。
如果您试图防止“篡改”并修复用户和组属性的随机损坏,那么您的解决方案可能是正确的。您将始终在每次厨师收敛时执行该命令,并且资源将始终显示为正在更新,但该命令将尽可能快地运行(chown -R 基本上是收敛和幂等的,因为它在尝试设置权限之前检查权限)。您不会得到有关固定权限的报告,这是唯一的缺点。
如果您只是尝试在构建服务器时修复一次权限,那么您应该在其中添加一个 not_if 条件来检查根目录是否具有正确的权限,您不必每次都运行它。这将为您提供幂等行为,并且不会在每次运行时执行该命令,但缺点显然是,如果该目录结构下的某个文件的权限将来被某人或某物破坏,那么它将无法得到纠正。
这里有一个单一资源的可能用例,其行为类似于 chown -R,然后报告它修复的内容(以及权限已更改的文件数组),这对于 SOX 和 PCI-DSS 报告等情况很有用,但我们不这样做目前涵盖该用例。
tl;dr 是你的解决方案很好,如果你愿意,你可以添加一个 not_if 防护