属性优先顺序 - AWS OpsWorks

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

属性优先顺序

重要

这些区域有: AWS OpsWorks Stacks 该服务已于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请联系 AWS Support 团队开启 AWS re: post 或通过 AWS 高级支持

如果一个属性是唯一定义的,Chef 则会简单地将它并入到节点对象中。但是,任何属性源可定义任何属性,因此有可能同一个属性会具有多个使用不同的值的定义。例如,内置apache2食谱定义了node[:apache][:keepalive],但你也可以在自定义JSON或自定义食谱中定义该属性。如果一个属性具有多个定义,则将按下文中描述的顺序对这些定义进行评估,节点对象将接收具有最高最先顺序的定义。

属性的定义如下所示:

node.type[:attribute][:sub_attribute][:...]=value

如果一个属性具有多个定义,则类型将确定哪个定义具有优先顺序,并将该定义并入到节点对象中。 AWS OpsWorks Stacks 使用下列属性类型:

  • default-这是最常见的类型,并且它实际上意味着“如果属性尚未定义,请使用此值。” 如果属性的所有定义都是 default 类型,则评估顺序中的第一个定义具有优先顺序并且后续值将被忽略。请注意 AWS OpsWorks Stacks 将所有堆栈配置和部署属性定义设置为default类型。

  • normal-此类型的属性将覆盖评估顺序中之前定义的任何 defaultnormal 属性。例如,如果第一个属性来自内置说明书并且具有 default 类型,第二个是具有 normal 类型的用户定义属性,则第二个定义具有优先顺序。

  • set -这是您可能会在早期说明书中看到的已弃用类型。它已由具有相同的优先顺序的 normal 取代。

Chef 支持多种其他属性类型,包括优先于所有其他属性定义的 automatic 类型。Chef 的 Ohai 工具生成的属性定义均为 automatic 类型,因此它们实际上是只读的。这通常不是问题,因为没有理由重写它们,而且它们不同于 AWS OpsWorks 堆栈的属性。但是,您应谨慎为您的自定义说明书属性命名,以便将它们与 Ohai 属性区分开。有关更多信息,请参阅关于属性

注意

Ohai 工具是您可通过命令行运行的可执行文件。要列出某个实例的 Ohai 属性,请登录该实例并在终端窗口中运行 ohai。请注意,此操作将生成一个非常长的输出。

下面是将各种属性定义并入到节点对象中的步骤:

  1. 将任何自定义堆栈配置属性合并到堆栈配置和部署属性中。

    可以为堆栈或特定部署设置自定义JSON属性。它们在评估顺序中优先并且实际上为 normal 类型。如果在自定义中还定义了一个或多个堆栈配置属性JSON,则优先使用自定义JSON值。否则 AWS OpsWorks 堆栈只需将自定义JSON属性合并到堆栈配置中即可。

  2. 将所有部署自定义JSON属性合并到堆栈配置和部署属性中。

    部署自定义JSON属性实际上也是normal类型,因此它们优先于内置和自定义堆栈配置JSON以及内置部署JSON。

  3. 将堆栈配置和部署属性合并到实例的节点对象中。

  4. 将实例的内置说明书属性合并到节点对象中。

    内置说明书属性均为 default 类型。如果在堆栈配置和部署属性中也定义了一个或多个内置食谱属性(通常是因为您使用自定义JSON定义了它们),则堆栈配置定义优先于内置食谱定义。所有其他内置说明书属性将简单地合并到节点对象中。

  5. 将实例的自定义说明书属性合并到节点对象中。

    自定义说明书属性通常是 normaldefault 类型。唯一属性将合并到节点对象中。如果在步骤 1—3 中还定义了任何自定义食谱属性(通常是因为您使用自定义定义了它们JSON),则优先级取决于自定义食谱属性的类型:

    • 步骤 1-步骤 3 中定义的属性优先于自定义说明书 default 属性。

    • 自定义说明书 normal 属性优先于步骤 1 - 步骤 3 中的定义。

重要

请勿使用自定义说明书 default 属性覆盖堆栈配置或内置说明书属性。由于自定义说明书属性将最后进行评估,因此 default 属性具有最低的优先顺序,并且无法覆盖任何属性。