跳至内容

~> 弃用通知 Equinix Metal 将于2026年6月30日停止服务。所有 Metal 数据源将在该提供商的 5.0.0 版本中移除。如需继续使用,请使用该提供商的 4.x 版本直至服务终止。更多信息,请访问 https://docs.equinix.com/metal/。

equinix_metal_plans

提供 Equinix Metal 套餐计划数据源。可用于查找符合筛选条件的套餐计划。

用法示例

# Following example will select device plans which are under 2.5$ per hour, are available in metro 'da' (Dallas)
# OR 'sv' (Sillicon Valley) and sort it by the hourly price ascending.
data "equinix_metal_plans" "example" {
sort {
attribute = "pricing_hour"
direction = "asc"
}
filter {
attribute = "pricing_hour"
values = [2.5]
match_by = "less_than"
}
filter {
attribute = "available_in_metros"
values = ["da", "sv"]
}
}

output "plans" {
value = data.equinix_metal_plans.example.plans
}
# Following example will select device plans with class containing string 'large', are available in metro 'da' (Dallas)
# AND 'sv' (Sillicon Valley), are elegible for spot_market deployments.
data "equinix_metal_plans" "example" {
filter {
attribute = "class"
values = ["large"]
match_by = "substring"
}
filter {
attribute = "deployment_types"
values = ["spot_market"]
}
filter {
attribute = "available_in_metros"
values = ["da", "sv"]
all = true
}
}

output "plans" {
value = data.equinix_metal_plans.example.plans
}

忽略计划变更/地铁

创建新的执行计划时,保留已部署的设备计划、设施和地铁区域。

data-resource-behavior中所述,Terraform 在 terraform plan 和 terraform apply 命令的规划阶段都会读取数据资源。如果数据源的输出与之前的状态不同,它会建议对引用其属性的资源进行更改。

对于 equinix_metal_plans,设备方案可能在某个 Metro 中不再可用,原因可能是当时库存不足,或者您使用的是旧版服务器方案。因此,返回的符合您搜索条件的方案列表将与上次 plan/apply 的结果不同。所以,如果像 equinix_metal_device 这样的资源使用此数据源的输出来选择设备方案或 Metro,Terraform 计划将报告需要重新创建 equinix_metal_device

为了防止这种情况发生,您可以利用 Terraform lifecycle ignore_changes 功能,如下例所示。

# Following example will use equinix_metal_plans to select the cheapest plan available in metro 'sv' (Sillicon Valley)
data "equinix_metal_plans" "example" {
sort {
attribute = "pricing_hour"
direction = "asc"
}
filter {
attribute = "name"
values = ["c3.small.x86", "c3.medium.x86", "m3.large.x86"]
}
filter {
attribute = "available_in_metros"
values = ["sv"]
}
}

# This equinix_metal_device will use the first returned plan and the first metro in which that plan is available
# It will ignore future changes on plan and metro
resource "equinix_metal_device" "example" {
hostname = "example"
plan = data.equinix_metal_plans.example.plans[0].name
metro = data.equinix_metal_plans.example.plans[0].available_in_metros[0]
operating_system = "ubuntu_24_04"
billing_cycle = "hourly"
project_id = var.project_id

lifecycle {
ignore_changes = [
plan,
metro,
]
}
}

如果您的使用场景需要动态更改设备方案或城域网,您可以使用条件定义生命周期。

# Following example uses a boolean variable that may eventually be set to you false when you update your equinix_metal_plans filter criteria because you need a device plan with a new feature.
variable "ignore_plans_metros_changes" {
type = bool
description = "If set to true, it will ignore plans or metros changes"
default = false
}

data "equinix_metal_plans" "example" {
// new search criteria
}

resource "equinix_metal_device" "example" {
// required device arguments

lifecycle {
ignore_changes = var.ignore_plans_metros_changes ? [
plan,
metro,
] : []
}
}

论证参考

以下论点得到支持:

  • sort - (可选)用于对结果进行排序的一个或多个属性/方向对。如果提供了多个排序条件,则会按顺序应用它们。
    • attribute - (必填)用于对结果进行排序的属性。排序属性区分大小写。
    • direction - (可选)排序结果按升序或降序排列。字符串按字母顺序排序。可选值:asc、desc
  • filter - (可选)要筛选的一个或多个属性/值对
    • attribute - (必填)用于筛选的属性。筛选属性区分大小写。
    • values - (必填)筛选值。筛选值区分大小写。如果为筛选器指定多个值,则默认情况下这些值使用“或”连接,并且请求返回与任何指定值匹配的所有结果。
    • match_by - (可选)要应用的比较类型。取值范围为:inresubstringless_thanless_than_or_equalgreater_thangreater_than_or_equal。默认值为 in
    • all - (可选)如果设置为 true,则值之间使用 AND 连接,请求仅返回与所有指定值都匹配的结果。默认值为 false

下面定义的 plans 块中的所有字段都可以用作 sortfilter 块的属性。

属性参考

除了上述所有参数外,还会导出以下属性:

  • plans
    • id - 计划的 ID
    • name - 计划名称
    • slug-计划蛞蝓
    • description- 计划描述
    • line- 平面线,例如裸金属
    • legacy - 指示是否为旧版计划的标志
    • class- 计划类
    • pricing_hour- 计划每小时价格
    • pricing_month- 计划月费
    • deployment_types - 部署类型列表,例如按需部署、现货市场
    • available_in-(已弃用)提供该计划的设施列表
    • available_in_metros- 提供该计划的都市区列表
此页面有帮助吗?