使用 Chef 搜索获取属性值 - AWS OpsWorks

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

使用 Chef 搜索获取属性值

重要

AWS OpsWorks Stacks 不再接受新客户。在 2024 年 5 月 26 日之前,现有客户将能够正常使用 OpsWorks 控制台、API、CLI 和 CloudFormation 资源,届时它们将停产。为准备此过渡,我们建议您 AWS Systems Manager 尽快将堆栈过渡到。有关更多信息,请参阅 AWS OpsWorks Stacks 生命周期终结常见问题解答将 AWS OpsWorks Stacks 应用程序迁移到 AWS Systems Manager 应用程序管理器

注意

此方法可用于 Windows 堆栈和 Chef 11.10 Linux 堆栈。

直接从节点对象获取堆栈配置和部署属性值可能很复杂,并且不能用于 Windows 堆栈。替代方法是使用 Chef 搜索查询相关的属性。如果你熟悉 Chef 服务器,你会发现 Chef 搜索与 AWS OpsWorks Stacks 的工作方式略有不同。由于 AWS OpsWorks Stacks 在本地模式下使用 chef-client,因此 Chef 搜索依赖于名为 chef-zero 的 Chef 服务器的本地版本,因此搜索对存储在实例节点对象中的本地数据而不是远程服务器上的数据进行搜索。

实际上,将搜索限制在本地存储的数据上通常并不重要,因为 AWS OpsWorks Stacks 实例上的节点对象包含堆栈配置和部署属性。它们包含食谱通常从Chef服务器获取的大部分(如果不是全部)数据,并且使用相同的名称,因此您通常可以在 AWS OpsWorks Stacks实例上使用为Chef服务器编写的搜索代码,而无需修改。有关更多信息,请参阅 使用 Chef 搜索

下面显示了搜索查询的基本结构:

result = search(:search_index, "key:pattern")
  • 搜索索引指定了查询应用于的属性并确定了返回的对象的类型。

  • 键指定了属性名称。

  • 该模式指定要检索的属性的值。

    您可查询特定属性值或使用通配符查询一系列值。

  • 结果将显示一张列表,当中包含满足查询条件的对象,每个列表均为包含多个相关属性的哈希表。

    例如,如果您使用 node 搜索索引,则查询将返回一个实例对象列表 (每个满足查询的实例对应一个实例对象)。每个对象均为一个哈希表,其中包含一组定义实例配置的属性 (如主机名和 IP 地址)。

例如,以下查询使用 node 搜索索引,此索引是适用于堆栈的实例 (Chef 术语中的节点) 的标准 Chef 索引。它使用主机名 myhost 搜索实例。

result = search(:node, "hostname:myhost")

搜索将返回主机名为 myhost 的实例对象的列表。例如,如果您需要第一个实例的操作系统,它将由 result[0][:os] 表示。如果查询返回多个对象,则可枚举它们以检索必需信息。

如何在配方中使用搜索的详细信息取决于您使用的是 Linux 还是 Windows 堆栈。下列主题提供了这两种堆栈类型的示例。