更新ChefDK之后,我在测试厨房中收到错误“未定义的局部变量或方法'credentials_file'”,或在刀中凭据.rb中出现错误。

时间:2019-08-27 20:00:34

标签: knife test-kitchen chefdk

此问题是在从ChefDK 3.2.30升级到4.2.0之后发现的,并且在升级之前一切正常(包括这两个命令)。

“刀节点列表”中的完整错误:

C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/rbvmomi-1.13.0/lib/rbvmomi/vim.rb:8: warning: Win32API is deprecated after Ruby 1.9.1; use fiddle directly instead
Traceback (most recent call last):
8: from C:/opscode/chefdk/bin/knife:359:in <main>' 7: from C:/opscode/chefdk/bin/knife:359:inload'
6: from C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.1.36-universal-mingw32/bin/knife:24:in <top (required)>' 5: from C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.1.36-universal-mingw32/lib/chef/application/knife.rb:162:inrun'
4: from C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.1.36-universal-mingw32/lib/chef/knife.rb:221:in run' 3: from C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.1.36-universal-mingw32/lib/chef/knife.rb:440:inconfigure_chef'
2: from C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.1.36-universal-mingw32/lib/chef/knife.rb:185:in load_config' 1: from C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-config-15.1.36/lib/chef-config/workstation_config_loader.rb:72:inload'
C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-config-15.1.36/lib/chef-config/mixin/credentials.rb:92:in load_credentials': undefined local variable or methodcredentials_file' for #<ChefConfig::WorkstationConfigLoader:0x000000000c311e68> (NameError)

“厨房融合”的全部错误:

------Exception-------
Class: Kitchen::ClientError
Message: Could not load the 'chef_zero' provisioner. Error: undefined local variable or method `credentials_file' for #<ChefConfig::WorkstationConfigLoader:0x0000000006f176a0>
Did you mean?  credentials_profile
credentials_found
@credentials_found
----------------------
Please see .kitchen/logs/kitchen.log for more details
Also try running kitchen diagnose --all for configuration

1 个答案:

答案 0 :(得分:0)

我们发现这种情况下的问题是所请求的个人资料无效。

可以使用CHEF_PROFILE环境变量设置概要文件,也可以在用户主目录.chef目录(在Linux中为〜/ .chef,在Windows中为C:\ Users \ username.chef)的名为“ context”的文件中进行设置。

如果指定的配置文件不是“ default”,则ChefDK将在同一目录中查找名为“ credentials”的文件。然后它将解析该文件并查找与配置文件名称匹配的部分。

如果找不到匹配的配置文件,则会生成类似问题中的错误的信息。

为解决此用户的问题,我们将“上下文”文件的值更改为“默认”(不带引号),然后一切又开始正常工作。

有几种可能的解决方案,哪种最适合您取决于问题的出处

  • 如果配置文件名称有效,则将适当的部分添加到〜/ credentials文件中
  • 如果环境变量CHEF_PROFILE的值有问题,请将其更改为“默认”或有效名称
  • 如果〜/ context文件的值有问题,则可以将其删除,或将其值更改为有效的配置文件(注意:,请始终备份文件,然后删除或进行更改)

我通过浏览C:/opscode/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-config-15.1.36/中的代码,发现了上面列出的详细信息,这使我得以解决。 lib / chef-config / mixin / credentials.rb(这是引发初始异常的地方)