Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
tech:terraform:variables [25/03/2020 02:40] – [modules] matetech:terraform:variables [10/06/2025 06:50] (actual) – [input variables] mate
Línia 1: Línia 1:
 = terraform variables = terraform variables
 +  * [[https://developer.hashicorp.com/terraform/tutorials/configuration-language/variables]]
 +== declaración
 +  * recomendado en fichero aparte **variables.tf**
 +declaración: <code properties variables.tf>
 +variable "aws_region" {
 +  description = "AWS region"
 +  type        = string
 +  default     = "us-west-2"
 +}
 +
 +variable "instance_count" {
 +  description = "Number of instances to provision."
 +  type        = number
 +  default     = 2
 +}
 +
 +variable "enable_vpn_gateway" {
 +  description = "Enable a VPN gateway in your VPC."
 +  type        = bool
 +  default     = false
 +}
 +
 +variable "resource_tags" {
 +  description = "Tags to set for all resources"
 +  type        = map(string)
 +  default     = {
 +    project     = "project-alpha",
 +    environment = "dev"
 +  }
 +}
 +</code>
 +
 +uso: <code properties> provider "aws" {
 +  region  = var.aws_region
 + }
 +
 + module "ec2_instances" {
 +   source = "./modules/aws-instance"
 +
 +   depends_on = [module.vpc]
 +
 +   instance_count = var.instance_count
 +
 +   #tags = {
 +   #  project     = "project-alpha",
 +   #  environment = "dev"
 +   #}
 +   tags = var.resource_tags
 + }
 +
 +
 +</code>
 +
 +== list, map, set
 +
 +  * **list**: lista de valores del mismo tipo, retornados en el mismo orden.
 +    * Admite el uso de varios tipos: ''list(string)'', ''list(list)'', ''list(map)'', ...
 +    * <code properties>list("a", "b", "c") # <=0.11</code>
 +    * <code properties>["a", "b", "c"] # >=0.12</code>
 +    * <code properties>variable "public_subnet_cidr_blocks" {
 +  description = "Available cidr blocks for public subnets."
 +  type        = list(string)
 +  default     = [
 +    "10.0.1.0/24",
 +    "10.0.2.0/24",
 +    "10.0.3.0/24",
 +    "10.0.4.0/24",
 +    "10.0.5.0/24",
 +    "10.0.6.0/24",
 +    "10.0.7.0/24",
 +    "10.0.8.0/24",
 +  ]
 +}</code>
 +  * **map**: colección de valores key=value, identificado cada uno con una cadena
 +    * <code properties>map("a", "b", "c", "d")
 +{
 +  "a" = "b"
 +  "c" = "d"
 +}</code>
 +    * <code properties>{"a" = "b", "c" = "d"}
 +{
 +  "a" = "b"
 +  "c" = "d"
 +}</code>
 +  * **set**: colección de __valores únicos__ sin identificadores secundarios y sin orden
 +
 +=== funciones
 +  * [[https://developer.hashicorp.com/terraform/language/functions/slice|slice()]]: obtener parte de una lista. 
 +
 +== más tipos
 +  * **object**: colección de atributos identificados, con posibilidad de diferentes tipos
 +    * <code javascript>{
 +  name = "John"
 +  age  = 52
 +}</code>
 +    * <code ruby>variable "wks_rg_name" {
 +  type = object({
 +    pre     = string,
 +    int     = string,
 +    default = string
 +  })
 +}
 +wks_rg_name = {
 +  pre     = "prepre",
 +  int     = "intint",
 +  default = ""
 +}
 +
 +resource "azurerm_resource_group" "rg" {
 +  name     = "rg1-rg-${var.wks_rg_name[terraform.workspace]}"
 +  location = "${var.location}"
 +}</code>
 +  * **tuple**: colección de elementos consecutiva de diferentes tipos
 +    * <code properties>["a", 15, true]</code>
 +
 +/via: [[https://www.terraform.io/docs/configuration/types.html]]
 +
 == input variables == input variables
   * bloque declaración/valor por defecto:<code properties>   * bloque declaración/valor por defecto:<code properties>
Línia 32: Línia 149:
   * uso:<code properties>var.<NOMBRE_DECLARATIVO></code>   * uso:<code properties>var.<NOMBRE_DECLARATIVO></code>
  
 +== interpolación
 +<code properties>
 +name        = "web-sg-${var.resource_tags["project"]}-${var.resource_tags["environment"]}"
 +</code>
 +
 +== validación
 +<code properties>
 +variable "resource_tags" {
 +  description = "Tags to set for all resources"
 +  type        = map(string)
 +  default     = {
 +    project     = "my-project",
 +    environment = "dev"
 +  }
 +
 +  validation {
 +    condition     = length(var.resource_tags["project"]) <= 16 && length(regexall("[^a-zA-Z0-9-]", var.resource_tags["project"])) == 0
 +    error_message = "The project tag must be no more than 16 characters, and only contain letters, numbers, and hyphens."
 +  }
 +
 +  validation {
 +    condition     = length(var.resource_tags["environment"]) <= 8 && length(regexall("[^a-zA-Z0-9-]", var.resource_tags["environment"])) == 0
 +    error_message = "The environment tag must be no more than 8 characters, and only contain letters, numbers, and hyphens."
 +  }
 +}
 +
 +</code>
 == asignación de valores en variables del módulo raiz (Root Module) == asignación de valores en variables del módulo raiz (Root Module)
   * mediante parámetro en el cli ''-var='<KEY>="<VALUE>"%%'%%''   * mediante parámetro en el cli ''-var='<KEY>="<VALUE>"%%'%%''
Línia 42: Línia 186:
       * **terraform.tfvars** o **terraform.tfvars.json**       * **terraform.tfvars** o **terraform.tfvars.json**
       * **%%*%%.auto.tfvars** o **%%*%%.auto.tfvars.json**       * **%%*%%.auto.tfvars** o **%%*%%.auto.tfvars.json**
-    * o especificado como parámetro en el cli ''-var-file="<FILE.TFVARS>"''+    * o especificado como parámetro en el cli 
 +      * en fichero específico ''-var-file="<FILE.TFVARS>"'' 
 +      * en el propio comando ''-var "server=web"''
     * en estos ficheros solo se realiza la asignación de la variable     * en estos ficheros solo se realiza la asignación de la variable
     * los ficheros acabados en JSON se parsean como objeto<code javascript>{     * los ficheros acabados en JSON se parsean como objeto<code javascript>{
  • tech/terraform/variables.1585129229.txt.gz
  • Darrera modificació: 25/03/2020 02:40
  • per mate