厨房属性仅适用于一个平台

Kitchen attributes only working on one platform

我的 .kitchen.yml 文件有问题。我希望为 all 我的平台加载我的属性,但它只为我的 one 平台加载。这是我的 .kitchen.yml 文件内容的样子:

.kitchen.yml
---
driver:
  name: vagrant
  gui: true

provisioner:
  name: chef_zero

transport:
  name: winrm
  elevated: true

platforms:
  - name: win2012r2-standard
    driver:
      box: eltuko/win2012r2-chef-pester
      customize:
        memory: 2048
  - name: win2008r2-standard
    driver:
      box: charris/windows-2008-r2-x64
      customize:
        memory: 2048

suites:
  - name: default
    run_list:
      - recipe[xxx]
      - recipe[yyy]
    attributes:
      web:
        app:
          name: "MyApp"
          zip: "MyApp.zip"
      chef_client:
        config:
          log_level: ":debug"

需要更多上下文?

我的食谱需要设置 2 个属性 才能正常工作。默认情况下,这些属性值设置为 nil.

attributes/default.rb
default['web']['app']['name'] = nil
default['web']['app']['zip'] = nil

我的默认配方在开始时检查是否在继续脚本之前设置了属性,我使用以下方法执行此操作:

recipes/default.rb
ruby_block 'Check if node is configured correctly' do
  block do
    raise 'app name is not set.' if node['web']['app']['name'].nil?
    raise 'app zip is not set.' if node['web']['app']['zip'].nil?
  end
end

当我 运行 kitchen converge 时,kitchen 启动我的 Windows Server 2012 R2 VM 并成功部署我的应用程序(属性有效)。一旦该平台完成,kitchen 就会为我的 Windows Server 2008 R2 VM 重新开始整个过程​​。虽然,此时它抛出了我在 recipes/default.rb 文件中创建的异常。

我在 Windows Server 2008 R2 VM 上 收到以下错误:

控制台日志
================================================================================
Error executing action `run` on resource 'ruby_block[Check if node is configured correctly]'
================================================================================

    RuntimeError
    ------------
    app name is not set.

因为这是答案,所以将其复制下来:当您在测试实例上添加、删除或更改属性数据时,您需要销毁并重新创建该实例。属性数据在创建阶段被收集和缓存,所以简单地 re-运行 converge 不会做任何事情。