Opscode Chef:提供者remote_file with headers属性

时间:2013-07-24 15:13:36

标签: chef recipe

根据此版本:http://docs.opscode.com/release/11-6/release_notes.html#resource-remote-file-attributes

Remote_file提供程序具有“headers”属性。

我想像这样使用它:

remote_file "foo" do
   source "http://someurl"
   headers({"Cookies" => "Some cookie"})
end

然而,这并不像我们想象的那样工作,我的意思是,我认为标题没有被使用。 这是正确的sintax?

2 个答案:

答案 0 :(得分:1)

这适用于Chef10和Chef11。实际上这个功能没有记录 - 至少,我不得不深入了解Chef源代码以了解如何传递cookie。远程文件不支持此功能。但是我们可以使用一些“隐藏”的Chef机制来为每个特定域和端口的请求设置cookie。

ruby_block "Prepare cookies for download from http://someurl" do
  block do
    Chef::REST::CookieJar.instance["someurl:80"] = "Some cookie"
  end
end

remote_file "foo" do
   source "http://someurl"
end

其中[“someurl:80”]应该是带端口的整个域。例如,

Chef::REST::CookieJar.instance["download.oracle.com:80"] = Chef::REST::CookieJar.instance["edelivery.oracle.com:443"] = "oraclelicense=accept-securebackup-cookie"

这可用于从oracle站点下载java而无需手动接受许可协议。

答案 1 :(得分:1)

这不是解决方案......但这是一种解决方法

# install wget
windows_package "wget" do
   source "http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe"
   action :install
end

# Java uninstall, download and install
windows_batch "jre-7 installation" do
  code <<-EOH
     WMIC product where "Name LIKE '%%Java 7%%'" call uninstall /nointeractive
     "C:/Program Files (x86)/GnuWin32/bin/wget.exe" -O C:/chef/cache/jre-7.exe --no-check-certificate  --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com;" http://download.oracle.com/otn-pub/java/jdk/7u25-b17/jdk-7u25-windows-x64.exe
      C:/chef/cache/jre-7.exe /s
 EOH
end