问题标签 [chefspec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2617 浏览

ruby - Chefspec 和存根 shell_out 命令

我在我的食谱中编写了一个库方法,该方法将读取 /etc/fstab 文件并在缺少某些挂载选项时对其进行修改。

当我尝试编写 Chefspec 测试时,它们都无法返回存根信息,而是读取我计算机上的本地 /etc/fstab。

我想知道在生产服务器上存根示例 fstab 并在运行 Chefspec 时将该信息传递给库方法的正确语法是什么。

库方法在 library/fstab_quota.rb 文件中:

然后我会在食谱食谱中调用库方法:

0 投票
3 回答
2257 浏览

unit-testing - 如何创建在另一个配方中定义的虚拟资源而不在测试运行中包含另一个配方?

我有以下厨师食谱:

和另一个食谱

现在我想单独为default食谱编写一个 Chefspec 单元测试。所以我写了这个:

我如何创建一个虚拟的服务another_recipe来防止这种情况发生:

我知道这可能是一个糟糕的设计和一个相当简单的新手问题,但我真的被困在这里,我的情况是这样的:

  • 我有几个月的 Chef 经验,但除此之外没有 Ruby 经验
  • 这是一个生产代码,最初是在没有任何单元测试的情况下编写的
  • 真正的代码包含更多的东西,这里的这些代码片段只是特定问题的模型
  • 我的任务是修改default配方,所以我想添加一些单元测试来验证我的修改是否有效并且不会破坏现有功能
  • 在这一点上,我想尽可能避免修改任何其他文件(即another_recipe
  • 如果我也让测试运行,another_recipe那么我需要模拟并设置它需要的太多其他东西

谢谢 :) k6ps

0 投票
1 回答
745 浏览

ruby - Chefspec loads libraries repeatedly and gives the warning "already initialized constant CONSTANT"

I have a chef cookbook with a library, e.g. library.rb. It contains a CONSTANT:

When I write unit tests for this cookbook, it always gives me the warning:

The warnings come up repeatedly, as many times as the number of examples (test cases) minus one. I think it is because chefspec loads the libraries once for each example. Could someone tell me how to make the libraries load only once, or how to disable the warning message?

0 投票
2 回答
319 浏览

chef-infra - CHEF:生成并注册 node_name

我对 Chef 很陌生,我不知道如何生成和注册新的 node_name。这是我所做的:

1) 在 Chef https://manage.chef.io/login注册一个帐户并登录

2)假设我有一个组织

3) 在 Chef UI 门户上,单击 Administration 并下载 Starter Kit

4) 下载 Starter Kit 后,解压后有 3 个文件:my-login.pem、knife.rb 和 my-org-validator.pem

5)我测试,我能够列出食谱,列出客户,......

6) 当我打开 Knife.rb 时,我看到如下内容:

现在我的问题是:

1) 如果我使用带有 node_name "my-login" 的相同 Start Kit,并将其安装在我的所有服务器中,那么在 Chef UI 中,它只会显示 1 个服务器。我正在寻找一种可以在具有不同 node_name 的所有服务器中安装 Start Kit 的方法。我怎么做?

2) 我可以仅使用 my-org-validator.pem 文件动态生成 node_name 吗?

谢谢

0 投票
1 回答
479 浏览

rspec - 最佳实践:在 Jenkins 中测试使用 Berkshelf 的 Chefspecs

我想以一种方式将我的 ChefSpecs 与 Jenkins 集成,即有一个 Jenkins 作业可以运行所有食谱的所有规范并打印一个摘要。不幸的是,这似乎并不像我想象的那么容易。编写一个简单的 Rakefile 来创建一个 rspec rake 任务(例如在测试标准 Ruby 规范时)将无济于事,因为 rspec 在调用它的目录中需要一个 Berksfile。

所以似乎只有两种方法可以测试食谱规格......

  • 为每本食谱创建一个 Jenkins 作业
  • 手动遍历 Jenkins 中的说明书并在我找到的每本说明书中调用 rspec。这不会打印所有测试的摘要,并且由于多种其他原因看起来很愚蠢。

这里推荐的方式是什么?我需要为每本食谱创建一个单独的工作还是有更好的方法?尤其是与 Berkshelf 结合使用?

我可以看到为每本食谱的规范找一份工作的好处,但这也意味着从同一个 repo 中为几十本食谱做一个 git pull。我们目前使用“一个仓库中的所有食谱”-方法

干杯,斯特凡

0 投票
0 回答
187 浏览

ruby - 如何覆盖以编程方式添加到 run_context 的 chefspecs 资源

我的食谱中有以下代码,它运行返回用户(root 除外)的 bash 脚本。每行 1 个用户。

现在我设法模拟 shell 了Here,但我不知道为什么以及是否可以期待这样的资源。例如,如果命令返回

然后以下将起作用

但是如果我添加以下内容

它会失败,而在上下文中没有我没有涵盖的任何资源。(我正在使用 Chef::Coverage 所以我知道)。谢谢

0 投票
3 回答
821 浏览

chef-infra - 如何使用 chefspec 测试幂等性

我想使用 chefspec 来测试我的食谱的幂等性。

假设我有一个包含这两个资源语句的配方:

我如何编写一个chefspec示例来证明,如果文件/etc/app.config已经存在,那么app服务将不会被通知重新启动?

是否有一些嘲笑我可以这样做,以便“文件”资源认为该文件已经存在?我可以运行 ChefSpec::ServerRunner 两次,保持第一次运行的状态(我假设不会,因为文件不会真正创建)?或者我会被迫使用 test-kitchen 和 Vagrant 来为 realz 做事吗?

(注意:我的实际食谱有一个构建配置文件的自定义 LWRP。它从厨师服务器获取信息,这就是我使用 ServerRunner 的原因)

0 投票
1 回答
122 浏览

chef-infra - 我如何使用chefspec包含非厨师资源

我想为其中一个具有创建詹金斯用户的代码的食谱编写chefspec,如下所示。

这里的“jenkins_user”不是厨师资源。我如何编写chefspec 来对食谱进行单元测试。

或者,如果我们有任何其他方法可以对配方进行单元测试,请告诉我。

0 投票
2 回答
2311 浏览

rspec - Chef:如何测试节点属性未存储在 Chef Server 上?

在一些厨师零运行(将节点状态保存为本地 .json 文件)之后,我很沮丧地在节点文件中找到了这一点: ... "ssmtp": { "auth_username": "secret user name", "auth_password": "even-more-secret password" } 在 Chef Server 上运行相同的操作会将节点数据保存在服务器上。这当然是一个问题,我将不得不更换凭据,修改食谱等。我仍在调查最初是什么原因造成的,但我的问题是:

如何为配方创建 rspec/chefspec 测试以验证特定节点属性是否未永久保存在节点的 .json 文件或 Chef 服务器上?

我想将此添加到我的规格中,以确保它不再发生。

结语

这里的重要教训是,任何进入任何节点属性的方式最终都会保存在节点对象表示中。

0 投票
1 回答
412 浏览

rspec - RSpec:RSpec::Support:Module 的未定义方法“require_rspec_core”(NoMethodError)

我正在尝试使用 ChefSpec 运行 HelloWorld 类型的示例。我跑来$ chef generate cookbook learn_chef2生成具有正确目录结构的 Chef 食谱。

然后我在 default.rb 中创建了一个超级简单的 Chef 食谱:

还有我在 default_spec.rb 中的 ChefSpec 测试:

但是,当我运行 rspec 时,我得到以下信息:

我是 Ruby 和 RSpec 的新手,我确信这是一个简单的配置问题。有什么想法吗?

谢谢!