Chef infra 使用chef安装windows应用程序

Chef infra 使用chef安装windows应用程序,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我见过几个使用Chef Git资源安装windows应用程序的示例。关于这一点,我有两个问题: 安装Git中未提供且厨师社区中没有现有食谱的windows应用程序的最佳实践是什么 e、 g.下载并安装一个静态URL托管的Windows安装程序?我想我可以把它放在GitRepo中,然后把它取下来,但是我想知道是否有一种更优雅的方式可以直接从提供者的站点上取下来,类似于wget 下载后如何运行windows installer,并在安装例程中提供所需的参数?e、 g.windows no compi

我见过几个使用Chef Git资源安装windows应用程序的示例。关于这一点,我有两个问题:

安装Git中未提供且厨师社区中没有现有食谱的windows应用程序的最佳实践是什么

e、 g.下载并安装一个静态URL托管的Windows安装程序?我想我可以把它放在GitRepo中,然后把它取下来,但是我想知道是否有一种更优雅的方式可以直接从提供者的站点上取下来,类似于wget

下载后如何运行windows installer,并在安装例程中提供所需的参数?e、 g.windows no compile的等价物是什么:运行“bash[compile_app_name]”,以及如何在厨师食谱中包含安装实用程序(install dir等)所需的参数?

这是迄今为止的“最佳实践”,但我还是勉强通过了。它主要利用
windows
。基本上,我一遍又一遍地阅读并运行chef client/solo。

其中确实包含一个
windows\u软件包。文档包括几个示例,包括如何从URL安装。
然而,我发现在某些情况下,它并不总是工作得很好。例如,卸载过程有时会失败。
在我的食谱中,我用了一个家常菜。它并不完美,但它可以让您控制下载和安装过程

(1) 定义(或重用)下载机制

def download_from_ftp package 
  ftp_info = data_bag_item(node.chef_environment, 'ftp-credentials')['credentials']['ftp']

  ftp_file_path="/#{package}"
  target = "#{node['downloads']}/#{package}" 

  remote_file "#{target}" do
    source "ftp://#{ftp_info['user']}:#{ftp_info['password']}@#{ftp_info['host']}/#{ftp_file_path}"
    action :create_if_missing
  end

  target
end
(2) 创建:安装操作

    action :install do
        package = "#{new_resource.name}_#{new_resource.build}.exe" 

        location = download_from_ftp(package)

        execute "install #{new_resource.name}" do
          command "call #{location} #{dir} /sp /verysilent /suppressmsgboxes"
        end
    end

它有点简化,但这是它的要点。

一些现有的烹饪书支持windows平台,但根据我的经验,它们往往有相当多的缺陷。我在coobook上取得了更大的成功