我检查过https://docs.chef.io/resource_remote_directory.html和http://joerussbowman.tumblr.com/post/58241535331/chef-remote-directory-is-basically首先。
chef-client 版本 12.2.1
操作系统 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
答案1
首先,你没有失去理智——这实际上是在进行递归目录创建时任何目录样式资源的预期行为。
远程目录的第一级设置正确 - 递归目录设置不正确。
文档参考:
remote_directory 资源可用于递归创建远程目录结构之外的路径,但这些外部路径的权限不受管理。这是因为递归属性仅将组、模式和所有者属性值应用于远程目录本身以及资源复制的任何内部目录。
- https://docs.chef.io/resource_remote_directory.html#recursive-directories
- http://docs.chef.io/resource_directory.html#recursive-directories
以下是我尝试执行的操作:
%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
这将循环遍历列表中的所有子目录并正确设置其权限。
根据文件在食谱结构中的布局方式,可能会对此块进行一些调整,但这里的一般信息是您必须管理子目录。
另一种方法是使用原始 Ruby 方法来强制执行权限,如下所示:
ruby_block 'set permissions for tomcat dir' do
block do
require 'fileutils'
FileUtils.chown 'tomcat', 'tomcat', '/opt/tomcat'
end
action :run
end
有关此方法的更多信息,请参阅: