Ruby Chef:在C中创建目录的权限不足:
尝试使用Chef在C:\Program Files中创建目录时遇到错误。我以管理员身份在powershell环境中运行chef,因此对于我可以执行的操作不应有任何限制 配方/default.rbRuby Chef:在C中创建目录的权限不足:,ruby,windows,chef-infra,Ruby,Windows,Chef Infra,尝试使用Chef在C:\Program Files中创建目录时遇到错误。我以管理员身份在powershell环境中运行chef,因此对于我可以执行的操作不应有任何限制 配方/default.rb directory node['app']['unzip_path'] do action :create end 属性/default.rb directory node['app']['unzip_path'] do action :create end default['app']['
directory node['app']['unzip_path'] do
action :create
end
属性/default.rb
directory node['app']['unzip_path'] do
action :create
end
default['app']['unzip_path']='C:/Program files/app'
我得到了这个错误:
[2013-06-25T01:51:13+00:00] FATAL: Chef::Exceptions::InsufficientPermissions: directory[C:/Program files/App] (app::agent line 15) had an error: Chef::Exceptions::InsufficientPermissions: Cannot create directory[C:/Program files/App] at C:/Program files/App due to insufficient permissions
附加问题:chef solo是以运行powershell命令的用户的身份运行,还是以特殊的“chef”用户的身份运行。我的决心是走ruby路线
require 'fileutils'
FileUtils.mkdir_p node['app']['unzip_path']
这里的问题是,我失去了chef's directory resource提供的幂等性属性,但是如果您需要将内容放入程序文件中,这似乎是继BrianJakovich的答案之后目前唯一的途径。 无论哪种情况,
mkdir\u p
调用都应该保持幂等性,但使用ruby块可能会更好,因为它将在收敛阶段运行:
ruby_block "hack to mkdir on windows" do
block do
FileUtils.mkdir_p node['app']['unzip_path']
end
end
我的解决方法是chef不允许您在C:\Program文件中进行更改\ 创建一个简单的批处理脚本文件,如:
@ECHO OFF
MKDIR "C:\\Program Files\\YourDirectory"
:END
然后将其命名为programfiles_yourdirectory.bat.erb
将其添加到烹饪书的模板下,然后在菜谱上这样称呼它:
template "C:\\chef\\cache\\programfiles_yourdirectory.bat" do
source "programfiles_yourdirectory.bat.erb"
rights :full_control, "Administrators"
end
execute "Create Program Files_YourDirectory Directory" do
cwd "C:\\chef\\cache"
command "programfiles_yourdirectory.bat"
action :run
not_if do ::File.exists?('C:\Program Files\YourDirectory') end
end
这将在chef\cache文件夹中创建一个bat模板,然后chef客户端将运行具有管理员权限的bat文件,这意味着将在不提示chef权限不足的情况下创建该文件夹。普通用户无法在其中写入内容。编辑我的帖子以反映chef正在以管理员身份运行