Chef-provisioning没有获得融合选项

时间:2017-06-29 19:15:21

标签: ruby windows server chef devops

使用chef-provisioning使用以下convergence_options配置一组Windows Server 2012 VM。

  convergence_options: {
    chef_config: "ssl_verify_mode :verify_none", # String containing additional text to inject into client.rb
    chef_version: '12.18.31',
    install_msi_url: 'https://packages.chef.io/files/stable/chef/12.18.31/windows/2012r2/chef-client-12.18.31-1-x64.msi',
    ignore_failure: [259, 35, 37]
  }

根据文档,ignore_failure属性应忽略指定退出代码的失败,但看起来该属性根本没有任何效果。

配置计算机上的收敛失败(重启时从非零退出代码)仍然停止整个配置操作。

================================================================================
Error executing action `converge` on resource 'machine[dvps01]'
================================================================================

RuntimeError
------------
Error: command '$env:path = [System.Environment]::GetEnvironmentVariable('PATH', 'MACHINE');chef-client -l auto' exited with code 259.

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

经过进一步调查后,简单地将ignore_failure作为收敛选项传递似乎不够。

我必须确保包含driver.rb

require 'chef/provisioning/convergence_strategy/ignore_convergence_failure'

我还参考了厨师配置回购中的测试,看看他们希望ignore_failure功能如何运作。在ignore_convergence_failure_spec.rb中,我们看到以下内容:

  let(:test_class) do
    t = TestConvergeClass.new(convergence_options, test_error)
    t.extend(Chef::Provisioning::ConvergenceStrategy::IgnoreConvergenceFailure)
    t
  end

为此,我将以下内容添加到convergence_strategy_for中的driver.rb

machine.extend(Chef::Provisioning::ConvergenceStrategy::IgnoreConvergenceFailure)

所有这些都导致了ignore_failure的预期行为,从而忽略了客户端收敛失败。