厨师:没有足够的权限在C:中创build一个目录

尝试使用Chef在C:\ Program Files中创build目录时遇到错误。 我以pipe理员身份从一个PowerShell环境运行厨师,所以不应该对我可以执行的操作有任何限制。

食谱/ default.rb

directory node['app']['unzip_path'] do action :create end 

属性/ default.rb

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命令的用户运行,还是作为特殊的“厨师”用户运行

跟随BrianJakovich的答案。 在任何情况下, mkdir_p调用都应该保持幂等性,但是使用红宝石块可能会更好,因为它将在收敛阶段运行:

 ruby_block "hack to mkdir on windows" do block do FileUtils.mkdir_p node['app']['unzip_path'] end end 

每个http://tickets.opscode.com/browse/CHEF-3787?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel它看起来像这是一个错误。 我对这个问题的解决办法就是走红宝石路线

 require 'fileutils' FileUtils.mkdir_p node['app']['unzip_path'] 

这里的问题是我失去了厨师的目录资源提供的幂等属性,但是如果你需要把东西放到程序文件中,这似乎是目前唯一的途径

对于这种类型的问题,我不能在C:\ Program Files \内部进行更改的问题的解决方法是创建一个简单的批处理脚本文件,如:

 @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-client将运行带有Admin权限的bat文件,这意味着文件夹将被创建而不会提示chef的权限不足。