使用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.
有什么想法吗?
答案 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
的预期行为,从而忽略了客户端收敛失败。