web-dev-qa-db-fra.com

Comment définir des variables optionnelles dans Terraform avec des valeurs par défaut définies dans Consul

J'ai un script Terraform avec certaines variables renseignées par Consul. Je souhaite utiliser ce script dans deux scénarios différents:

  • Scénario 1. Tout se passe bien avec les valeurs par défaut de Consul.
  • Scénario 2. Je dois remplacer certaines variables.

J'ai consulté la documentation de Terraform et constaté que je ne pouvais pas utiliser une variable définie dans Consul comme valeur par défaut pour une autre variable. Donc j'ai fini avec la solution suivante:

## vars.tf
## emulating undefined value using "null" string
variable "my_optional_variable" { default = "null" } 

## main.tf
my_optional_variable = "${var.my_optional_variable == "null" ? data.consul_keys.my_optional_variable : var.my_optional_variable}"

Quelqu'un peut-il me montrer un meilleur moyen de le faire? Comment éviter un bidouillage avec une chaîne "nulle"?

Merci

4
Maksym Demidas

Vous pouvez utiliser un fichier override . Donc, si vous avez vars.tf contenant:

variable "my_optional_variable" {
  default = "null"
}

Et override.tf qui contient:

variable "my_optional_variable" {
  default = "not null"
}

Alors ${var.my_optional_variable} devrait être égal à not null. Les fichiers de remplacement sont chargés en dernier et fusionnés dans votre configuration. Plutôt ensuite ajoutés ensemble comme les autres fichiers .tf du répertoire.

2
Brandon Miller

Une autre option est coalesce qui fonctionne avec des chaînes vides et est donc légèrement supérieure à votre chaîne "null".

Étant donné votre scénario ou un cas similaire avec deux variables/sources de données

variable "my_default_value" {
  default = "CentOS 7"
}
variable "my_optional_variable" {
  default = ""
}

Vous pouvez prendre la "première valeur non vide des arguments donnés. Au moins deux arguments doivent être fournis."

data "openstack_images_image_v2" "bastion_image" {
  name = "${coalesce(var.my_optional_variable, var.my_default_value)}"
}
2
KCD