1

根据此版本: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

但是,这并没有按预期工作,我的意思是,我猜没有使用标题。这是正确的语法吗?

4

2 回答 2

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
于 2013-07-25T10:18:48.680 回答
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,而无需手动接受许可协议。

于 2013-07-25T06:21:15.010 回答