
terraform-provider-aws 数据源 aws_fsx_ontap_storage_virtual_machines批量查询 FSx ONTAP SVM ID 的完整指南【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws导读aws_fsx_ontap_storage_virtual_machines是 terraform-provider-aws 提供的一个复数形式数据源plural data source用于一次性返回当前区域中符合条件的全部 FSx ONTAP 存储虚拟机Storage Virtual Machine简称 SVMID 列表。它与单数形式的aws_fsx_ontap_storage_virtual_machine数据源互补后者要求过滤器精确匹配一个SVM 并导出完整属性前者则批量收集多个SVM 的 ID非常适合按文件系统枚举全部 SVM或配合for_each/count批量管理 SVM 子资源的自动化场景。读完本文你将掌握该数据源的配置语法、过滤器用法、返回属性以及它在底层如何调用 AWS SDK 实现分页查询。数据源是什么FSx ONTAP 存储虚拟机SVM是 Amazon FSx for NetApp ONTAP 中承载数据访问的逻辑单元类似于传统 NetApp 系统中的 vServer。每个 SVM 归属于一个 ONTAP 文件系统以fs-开头并拥有独立的命名空间、NFS/SMB/iSCSI 端点与 Active Directory 配置。该数据源的用途正如其描述所示getting back a set of FSx ONTAP Storage Virtual Machine (SVM) IDs——即批量取回 SVM ID。典型应用包括对一个 ONTAP 文件系统下所有 SVM 执行枚举用返回的ids列表驱动其他资源的for_each动态创建例如为每个 SVM 创建卷或挂载配置在导入import或数据迁移脚本中批量核对现存 SVM。它与单数数据源aws_fsx_ontap_storage_virtual_machine见 website/docs/d/fsx_ontap_storage_virtual_machine.html.markdown的区别在于单数版本通过id或过滤器精确锁定唯一 SVM并导出 ARN、endpoints、AD 配置等完整属性复数版本只做批量匹配并导出ids列表。基础用法示例以下配置展示如何通过file-system-id过滤器取回某个 FSx ONTAP 文件系统fs-12345678下的全部 SVM IDdata aws_fsx_ontap_storage_virtual_machines example { filter { name file-system-id values [fs-12345678] } } output all_svm_ids { value data.aws_fsx_ontap_storage_virtual_machines.example.ids }数据源会在当前 Terraform 配置的 AWS 区域默认取 Provider 配置中的区域内执行查询命中的每个 SVM 的 ID形如svm-xxxxxxxx都会出现在ids列表中。参数说明Argument Reference该数据源支持以下参数参数是否必填说明filter可选配置块用于按字段过滤 SVM详见下文filter块说明region可选该数据源实际发起查询的区域默认为 Provider 配置中设置的区域filter块详解filter块支持构造复合过滤条件其结构如下name-必填要过滤的字段名称字段名以底层 AWS API 的定义为准对应 AWS FSx API 中的StorageVirtualMachineFilter结构体。官方文档与仓库测试中最典型的取值是file-system-id即按所属 ONTAP 文件系统过滤。values-必填该字段可接受的一组取值。匹配语义为或OR只要 SVM 在该字段上的值与values中的任意一个匹配该 SVM 就会被选中。该数据源的filter块允许多个以 Terraform 的 Set 语义去重多个filter块之间在 AWS API 侧按 AND 逻辑组合从而支持文件系统 生命周期状态等多维度精确筛选。属性说明Attribute Reference除上述参数外数据源还会导出以下属性ids- 查询找到的全部 SVM ID 列表list(string)即本数据源的核心输出。注意复数数据源不导出单个 SVM 的 ARN、名称、endpoints 等详细属性——如果需要某个具体 SVM 的完整信息应在ids基础上继续调用单数数据源aws_fsx_ontap_storage_virtual_machine支持传入id或直接引用管理资源aws_fsx_ontap_storage_virtual_machine实现见 internal/service/fsx/ontap_storage_virtual_machine.go。与单数数据源配合的实战模式复数数据源最常见的用法是与单数数据源联动先批量拿到 ID再对每个 ID 查询详细信息。data aws_fsx_ontap_storage_virtual_machines example { filter { name file-system-id values [aws_fsx_ontap_file_system.test.id] } } data aws_fsx_ontap_storage_virtual_machine each { for_each toset(data.aws_fsx_ontap_storage_virtual_machines.example.ids) id each.value } output svm_names { value { for id, svm in data.aws_fsx_ontap_storage_virtual_machine.each : id svm.name } }这种复数枚举 单数详情的组合是处理资源集合的标准姿势既避免了在配置中硬编码 SVM ID也规避了对单个数据源做大量重复定义的问题。源码级原理数据源如何实现批量查询数据源定义与 Schema数据源的入口实现在 internal/service/fsx/ontap_storage_virtual_machines_data_source.go通过注解// SDKDataSource(aws_fsx_ontap_storage_virtual_machines, ...)注册见 internal/service/fsx/service_package_gen.go。其 Schema 只有两个顶层字段filter类型为schema.TypeSet元素为nameRequired String与valuesRequired List of String定义于 internal/service/fsx/common_schema_data_source.goidsComputed的字符串列表用于承载查询结果。读取流程与 AWS API 调用链dataSourceONTAPStorageVirtualMachinesRead是核心读取函数完整调用链如下从 meta 中获取 FSx 客户端conn : meta.(*conns.AWSClient).FSxClient(ctx)构造fsx.DescribeStorageVirtualMachinesInput把 Terraform 侧的filterSet 通过newStorageVirtualMachineFilterList转换为 AWS SDK 的[]awstypes.StorageVirtualMachineFilter转换逻辑位于 common_schema_data_source.go逐项映射name/values字段调用findStorageVirtualMachines执行实际查询。findStorageVirtualMachines定义于 internal/service/fsx/ontap_storage_virtual_machine.go其实现体现了 SDK 分页的最佳实践使用fsx.NewDescribeStorageVirtualMachinesPaginator分页器循环拉取全部页for pages.HasMorePages()逐页收集page.StorageVirtualMachines中通过谓词过滤的条目最终返回完整切片。这意味着即使文件系统下 SVM 数量超过单页上限数据源也能保证结果完整、不遗漏。结果回写与数据源 ID查询成功后数据源的逻辑 ID 被设置为当前区域d.SetId(meta.(*conns.AWSClient).Region(ctx))——这是该数据源区域级结果集语义的直接体现通过tfslices.ApplyToAll将每个 SVM 的StorageVirtualMachineId提取出来写入ids属性。从源码可以看到ids列表的元素是每个awstypes.StorageVirtualMachine结构体的StorageVirtualMachineId字段aws.ToString解引用后的字符串。生命周期与单数查询的佐证在同一文件中单数查询路径findStorageVirtualMachineByID使用StorageVirtualMachineIds: []string{id}精确检索并通过tfresource.AssertSingleValueResult强制要求恰好一个结果——这正是单数数据源必须精确匹配一个 SVM的底层保障。而waitStorageVirtualMachineCreated中引用的生命周期枚举CREATING/PENDING→CREATED/MISCONFIGURED也说明SVM 存在多种生命周期状态如需按状态筛选可在filter中结合 AWS API 支持的过滤字段进一步收窄范围。验收测试数据源行为的权威示例仓库中的验收测试 internal/service/fsx/ontap_storage_virtual_machines_data_source_test.go 直观展示了数据源的预期行为先创建count 2的两个aws_fsx_ontap_storage_virtual_machine测试资源归属同一 ONTAP 文件系统再定义本数据源用filter { name file-system-id; values [文件系统 ID] }过滤通过resource.TestCheckResourceAttr(dataSourceName, ids.#, 2)断言结果列表恰好包含 2 个 ID。这段测试同时证明了三点过滤字段名file-system-id的有效性、任一值匹配即选中的 OR 语义、以及ids属性返回完整集合的行为。配置中通过depends_on显式声明依赖确保数据源查询发生在 SVM 创建之后——这也是在实际使用时需要注意的时序要点若 SVM 由同一配置创建建议同样加上依赖关系避免竞态导致的查询结果不完整。使用注意事项时序依赖若查询的目标 SVM 与数据源在同一个 Terraform 配置中创建务必通过depends_on或资源引用隐式依赖确保先创建后查询区域语义查询范围为当前区域跨区域枚举需为该数据源显式设置region或使用 Provider alias仅返回 ID本数据源不提供 SVM 的详细属性需要详细信息时请配合单数数据源aws_fsx_ontap_storage_virtual_machine使用过滤器字段name的合法取值由 AWS FSx API 的StorageVirtualMachineFilter定义配置前请以官方 API 文档为准避免使用不受支持的字段名导致查询失败。总结aws_fsx_ontap_storage_virtual_machines是一个轻量但实用的批量查询数据源一个filter块即可枚举指定 ONTAP 文件系统下的全部 SVM ID配合for_each与单数数据源可以构建出先枚举、后细化的完整资源管理链路。从源码看其实现基于DescribeStorageVirtualMachinesAPI 的分页遍历ontap_storage_virtual_machine.go结果以区域为数据源 ID、以ids列表为输出行为被验收测试明确锁定ontap_storage_virtual_machines_data_source_test.go。对于需要在 Terraform 中批量管理 FSx ONTAP SVM 的开发者这是最直接、最可靠的入口。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考