厨师remote_directory的权限

我首先检查了https://docs.chef.io/resource_remote_directory.html和http://joerussbowman.tumblr.com/post/58241535331/chef-remote-directory-is-basically 。

厨师客户端版本12.2.1

OS CentOS 6.6

我正在做一些将我们的tomcat部署部署到一个节点的工作,配方看起来像这样

user 'tomcat' do comment 'Tomcat User generated by chef' uid 2004 home '/opt/tomcat' shell '/bin/bash' end remote_directory '/opt/tomcat' do source 'tomcat-6.0.35' owner 'tomcat' group 'tomcat' mode '0755' files_owner 'tomcat' files_group 'tomcat' files_mode '0644' end remote_directory '/opt/tomcat/bin' do source 'bin' files_owner 'tomcat' files_group 'tomcat' files_mode '0755' owner 'tomcat' group 'tomcat' mode '0755' end 

由于某些原因,这会将随机目录保留为root.root

 [~~~~~~~~~~~ tomcat]~ ll total 88 drwxr-xr-x 4 root root 4096 Apr 8 13:59 appconfig drwxr-xr-x 2 tomcat tomcat 4096 Apr 8 13:59 bin drwxr-xr-x 4 tomcat tomcat 4096 Apr 8 13:59 conf drwxr-xr-x 2 tomcat tomcat 4096 Apr 8 13:59 lib -rw-r--r-- 1 tomcat tomcat 37951 Apr 8 13:59 LICENSE -rw-r--r-- 1 tomcat tomcat 558 Apr 8 13:59 NOTICE -rw-r--r-- 1 tomcat tomcat 8680 Apr 8 13:59 RELEASE-NOTES -rw-r--r-- 1 tomcat tomcat 6670 Apr 8 13:59 RUNNING.txt drwxr-xr-x 3 root root 4096 Apr 8 13:59 shared drwxr-xr-x 7 root root 4096 Apr 8 13:59 webapps 

这种奇怪的行为继续贯穿整个树,目录没有设置为tomcat.tomcat(总是留下root.root相同的)

唯一的补充食谱是超市里的一个java,一个复制mod_jk并安装httpd的基本配方。

所以问题是 – 我是在做一些愚蠢的事情,不正确地阅读文档或者是一个小故障。

如果是我,我做错了什么。 干杯。

注意我也尝试添加以下内容,但仍然无法正确重现。

 directory '/opt/tomcat' do owner 'tomcat' group 'tomcat' recursive true end 

首先,你不会失去理智 – 这实际上是在进行recursion目录创build时任何目录风格资源的预期行为。

远程目录的第一级正确设置 – 这是recursion的不是。

文档参考:

remote_directory资源可用于recursion创build远程目录结构之外的path,但不pipe理这些外部path的权限。 这是因为recursion属性仅将组,模式和所有者属性值应用于远程目录本身以及资源所复制的任何内部目录。

以下是我试图做到这一点:

 %w( /opt/tomcat/appconfig /opt/tomcat/bin /opt/tomcat/shared /opt/tomcat/webapps ).each do |path| remote_directory path do files_owner 'tomcat' files_group 'tomcat' files_mode '0755' owner 'tomcat' group 'tomcat' mode '0755' end end 

这将遍历列表中的所有子目录并正确设置其权限。

根据菜谱结构中文件的排列方式,可能会对此块进行一些调整,但是这里的一般信息是您必须pipe理子目录。

另一种方法是使用原始的Ruby方法来执行权限,如下所示:

 ruby_block 'set permissions for tomcat dir' do block do require 'fileutils' FileUtils.chown 'tomcat', 'tomcat', '/opt/tomcat' end action :run end 

有关此方法的更多信息,请参阅: