~> Deprecation Notice Equinix Metal arrivera en fin de vie le 30 juin 2026. Toutes les sources de données Metal seront supprimées dans la version 5.0.0 de ce fournisseur. Utilisez la version 4.x de ce fournisseur pour continuer à l'utiliser jusqu'à la fin de sa durée de vie. Pour plus d'informations, consultez le site https://docs.equinix.com/metal/.
equinix_metal_plans
Fournit une source de données sur les plans Metal d'Equinix. Vous pouvez l'utiliser pour trouver des plans qui répondent à un critère de filtrage.
Exemple d'utilisation
# 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
}
Ignorer les changements de plans/Metro
Conservez le plan d'équipement, l'installation et le métro déployés lors de la création d'un nouveau plan d'exécution.
Comme décrit dans data-resource-behavior, terraform lit les ressources de données pendant la phase de planification dans les commandes terraform plan et terraform apply. Si la sortie de la source de données est différente de l'état antérieur, il proposera des changements aux ressources où il y a une référence à leurs attributs.
Pour equinix_metal_plans, il peut arriver qu'un plan d'équipement ne soit plus disponible dans un métro parce qu'il n'y a pas de stock à ce moment-là ou que vous utilisiez un ancien plan de serveur, et donc la liste renvoyée des plans correspondant à vos critères de recherche sera différente de la dernière plan/apply. Par conséquent, si une ressource telle qu'un equinix_metal_device utilise la sortie de cette source de données pour sélectionner un plan d'équipement ou un métro, le plan Terraform signalera que le equinix_metal_device doit être recréé.
Pour éviter cela, vous pouvez utiliser la fonction Terraform lifecycle ignore_changes comme indiqué dans l'exemple ci-dessous.
# 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,
]
}
}
Si votre cas d'utilisation nécessite des changements dynamiques d'un plan d'appareil ou d'un métro, vous pouvez définir le cycle de vie à l'aide d'une condition.
# 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,
] : []
}
}
Référence de l'argument
Les arguments suivants sont soutenus :
sort- (Facultatif) Une ou plusieurs paires attribut/direction sur lesquelles trier les résultats. Si plusieurs tris sont fournis, ils seront appliqués dans l'ordre suivantattribute- (Obligatoire) L'attribut utilisé pour trier les résultats. Les attributs de tri sont sensibles à la cassedirection- (Facultatif) Triez les résultats par ordre croissant ou décroissant. Les chaînes sont triées par ordre alphabétique. L'un des éléments suivants : asc, desc
filter- (Facultatif) Une ou plusieurs paires attribut/valeur à filtrer à partir deattribute- (Obligatoire) L'attribut utilisé pour le filtrage. Les attributs de filtrage sont sensibles à la cassevalues- (Obligatoire) Les valeurs du filtre. Les valeurs du filtre sont sensibles à la casse. Si vous spécifiez plusieurs valeurs pour un filtre, les valeurs sont jointes par défaut à l'aide d'un OU et la requête renvoie tous les résultats qui correspondent à l'une des valeurs spécifiéesmatch_by- (Facultatif) Le type de comparaison à appliquer. L'un des éléments suivantsin,re,substring,less_than,less_than_or_equal,greater_than,greater_than_or_equal. La valeur par défaut estin.all- (Facultatif) Si la valeur est égale à true, les valeurs sont jointes par un AND et les requêtes ne renvoient que les résultats qui correspondent à toutes les valeurs spécifiées. La valeur par défaut estfalse.
Tous les champs du bloc plans défini ci-dessous peuvent être utilisés comme attributs pour les blocs sort et filter.
Référence des attributs
En plus de tous les arguments ci-dessus, les attributs suivants sont exportés :
plansid- identifiant du planname- nom du planslug- plan Slugdescription- description du planline- ligne de plan, par exemple baremetallegacy- drapeau indiquant s'il s'agit d'un plan existantclass- classe de planpricing_hour- plan prix horairepricing_month- plan prix mensueldeployment_types- liste des types de déploiement, par exemple on_demand, spot_marketavailable_in- (Obsolète) liste des installations où le plan est disponibleavailable_in_metros- liste des métropoles où le plan est disponible