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

Ruby 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']['

尝试使用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']['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正在以管理员身份运行