【问题标题】:Chef-provisioning not picking up convergence optionsChef-provisioning 没有选择融合选项
【发布时间】:2017-07-04 03:02:16
【问题描述】:

与 chef-provisioning 一起使用以下收敛选项来配置一组 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.

有什么想法吗?

【问题讨论】:

  • 请粘贴整机资源调用。
  • ignore_failure 可以忽略特定资源上的结果代码。您在此处的哈希似乎是您传递给 chef_config 属性的内容,如果它用于 machine 资源选项,那么它不可能是正确的,那么 ignore_failure 应该是 True 或 False。正如 Szymon 所说,给出全貌,否则我们无能为力

标签: ruby windows server chef-infra devops


【解决方案1】:

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

我必须确保 driver.rb 包括:

require 'chef/provisioning/convergence_strategy/ignore_convergence_failure'

我还查阅了 chef-provisioning repo 中的测试,以了解他们期望 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

为此,我在driver.rb 中的convergence_strategy_for 中添加了以下内容:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多