Chef:在C中创建目录的权限不足:

时间:2013-06-25 02:17:26

标签: ruby windows chef

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

3 个答案:

答案 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没有足够的权限。