【问题标题】:How do I test things in test kitchen that are only externally accessible?如何在测试厨房中测试只能从外部访问的东西?
【发布时间】:2016-10-21 23:24:50
【问题描述】:

我有一个配方,它使用文件资源授予活动目录组对本地文件夹的访问权限。

我无法从运行测试厨房的 Chef 工作站访问 AD。

我希望能够融合厨房虚拟机(不仅仅是规范测试)。

所以我打算使用环境

  • 将组名存储在一个可以作为 env 属性的属性中
  • prod env 在属性中设置了 AD 组
  • 测试环境在属性中有一些本地组
  • 在 .kitchen.yml 中指定测试环境

这是对环境的适当使用吗?是否有其他 Chef 机制可用于此目的?

【问题讨论】:

  • 我会将本地组设置为食谱中的默认属性,并在 env 中设置 AD 组,因此您将在厨房中使用食谱属性和使用 AD 组的真实世界节点进行测试。我认为这个问题对于 SO 来说太基于意见了。
  • 你可以回答这个问题,我会接受的
  • 完成 ;) (但对于未来的读者:这将更适合 discourse.chef.io,因为有很多选择)

标签: chef-infra chef-recipe cookbook test-kitchen


【解决方案1】:

对于这种情况,我将使用说明书属性作为默认(测试)情况。

然后根据attribute precedence documentation 环境属性将替换食谱属性(在同一级别),因此在实际情况下,您将在环境中设置 AD 组。

这允许使用每个环境组。

注意:对环境的任何更改都会影响所有节点,如果您只想更改环境节点的子集,则必须编写具有上层(通常是覆盖)的包装说明书。

【讨论】:

  • 我敦促您使用 node.normal 代替在环境本身中设置它,因为环境集是相当不可见的。从现实世界的经验来看,当有人来修改您的代码时,他们会在几天内对为什么他们所做的任何事情都没有改变价值观感到困惑。数据包也是一种不错的方法,因为它们需要使用配方中的代码,因此为后面的人留下了沉重的面包屑痕迹。只是我的 0.02 美元
  • @Jack 从不使用 node.normal 或 node.set ,除非你完全知道自己在做什么。此级别永久写入节点对象,从配方中删除该行不会恢复为默认值,这是造成很多问题的原因。如果您真的想在配方中使用 node.default ,它们会在属性之后进行评估,因此它们优先,请参阅我的答案中的链接。在这种特定情况下,根据 Op 的描述,环境是好的,因此是警告部分。但是,请不要为简单的用例提倡 node.normal,我们花了太多时间调试它们以前的使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
相关资源
最近更新 更多