5

尝试使用 Chef 在 C:\Program Files 中创建目录时遇到错误。我以管理员身份从 powershell 环境运行 chef,因此对于我可以执行的操作不应该有任何限制。

食谱/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 命令的用户身份运行还是以特殊的“厨师”用户身份运行

4

3 回答 3

3

跟进 BrianJakovich 的回答。无论哪种情况,mkdir_p调用都应保持幂等性,但使用 ruby​​ 块可能会更好,因为它将在收敛阶段运行:

ruby_block "hack to mkdir on windows" do
    block do
        FileUtils.mkdir_p node['app']['unzip_path']
    end
end
于 2013-10-07T15:36:40.887 回答
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']

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

于 2013-06-25T04:24:38.940 回答
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 将以管理员权限运行 bat 文件,这意味着将创建该文件夹而不会提示厨师权限不足。

于 2014-09-15T16:34:08.877 回答