尝试使用Chef在C:\ Program Files中创建目录时遇到错误。我是作为管理员在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命令的用户运行还是作为特殊的“厨师”用户运行
答案 0 :(得分:3)
跟进BrianJakovich的回答。
在任何一种情况下,mkdir_p
调用都应保留幂等性,但使用ruby块可能会更好,因为它将在收敛阶段运行:
ruby_block "hack to mkdir on windows" do
block do
FileUtils.mkdir_p node['app']['unzip_path']
end
end
答案 1 :(得分:1)
每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']
这里的问题是我丢失了厨师目录资源提供的idempotence属性,但是如果你需要将东西放入程序文件中,这似乎是目前唯一的途径
答案 2 :(得分:0)
我的解决方法是这个问题,厨师不允许你在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没有足够的权限。