Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tags 地形覆盖子模块中的标记值_Tags_Terraform_Terraform Modules - Fatal编程技术网

Tags 地形覆盖子模块中的标记值

Tags 地形覆盖子模块中的标记值,tags,terraform,terraform-modules,Tags,Terraform,Terraform Modules,我正在使用terraform模块,并将一组默认的_标记传递给子模块,以实现一致的标记。如下所示,其优点是子模块继承其父模块的标记,但也可以添加自己的标记 然而,我也希望能够覆盖一些继承的标记值,特别是“Name”。但我似乎没办法做到这一点 在下面的示例中(AWS的terraform 13.5),为任何标签指定的第一个值,例如根模块中的“划痕测试”被级联到子模块,并且不能更改。因此,VPC名称标签和子网名称标签均为“scratch test” 如何覆盖子模块中的标记值? # root variab

我正在使用terraform模块,并将一组默认的_标记传递给子模块,以实现一致的标记。如下所示,其优点是子模块继承其父模块的标记,但也可以添加自己的标记

然而,我也希望能够覆盖一些继承的标记值,特别是“Name”。但我似乎没办法做到这一点

在下面的示例中(AWS的terraform 13.5),为任何标签指定的第一个值,例如根模块中的“划痕测试”被级联到子模块,并且不能更改。因此,VPC名称标签和子网名称标签均为“scratch test”

如何覆盖子模块中的标记值?

# root variables.tf
variable "default_tags" {
    type = map
    default = {
        environment_type = "Dev Environment"
    }
} 


# root main.tf
provider "aws" {
    region = var.region
}

module "vpc" {
    source = "../../../../scratch/tags-pattern"
    vpc_name                = "scratch-test"
    public_subnets          = ["10.0.0.0/26"]

    default_tags = merge(map(
        "Name", "scratch-test"
    ), var.default_tags)
}

每个模块的variable.tf文件包含以下语句:

variable "default_tags" {}
通过覆盖参数序列中定义的后一个映射来设置优先级:

merge
获取任意数量的映射或对象,并返回一个包含所有参数的合并元素集的映射或对象

如果多个给定的映射或对象定义了相同的键或属性,则参数序列中后面的键或属性优先。如果参数类型不匹配,则在应用合并规则后,生成的类型将是与属性的类型结构匹配的对象

因此,为了允许您覆盖默认标记,您可以先指定默认标记,如下所示:

# root variables.tf
variable "default_tags" {
    type = map
    default = {
        environment_type = "Dev Environment"
    }
} 


# root main.tf
provider "aws" {
    region = var.region
}

module "vpc" {
    source = "../../../../scratch/tags-pattern"
    vpc_name                = "scratch-test"
    public_subnets          = ["10.0.0.0/26"]

    default_tags = merge(var.default_tags, map(
        "Name", "scratch-test"
    ))
}
使用
{}
映射语法(而不是太多)也可以使上述内容看起来更清晰:

map
函数文档中所述,此函数已被弃用,最终将被删除:

此功能已弃用。来自Terraform v0.12的Terraform 该语言具有使用
{
}
分隔符。改用内置语法。
map
功能将被禁用 在Terraform的未来版本中删除

到目前为止,这可以更简单地完成。看见这是使用新提供程序实现的请求,没有
标记
变量

# root main.tf
provider "aws" {
  region = var.region
  default_tags {
    tags = {
      environment_type = "Dev Environment"
    }
  }
}

module "vpc" {
  source         = "../../../../scratch/tags-pattern"
  vpc_name       = "scratch-test"
  public_subnets = ["10.0.0.0/26"]
}

# ../../../../scratch/tags-pattern/main.tf
module "the_vpc" {
  source = "../../terraform/tf-lib/network/vpc"

  vpc_name = var.vpc_name
  vpc_cidr = "10.0.0.0/24"

}

# tf-lib/network/vpc/main.tf
resource "aws_vpc" "vpc" {
  cidr_block           = var.vpc_cidr
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name    = "scratch-test-vpc"
    module  = "tf-lib/network/vpc"
    vpc_tag = "vpc"
  }
}

这是。

谢谢,太好了,您还可以添加更多标签!
# root variables.tf
variable "default_tags" {
    type = map
    default = {
        environment_type = "Dev Environment"
    }
} 


# root main.tf
provider "aws" {
    region = var.region
}

module "vpc" {
    source = "../../../../scratch/tags-pattern"
    vpc_name                = "scratch-test"
    public_subnets          = ["10.0.0.0/26"]

    default_tags = merge(var.default_tags, map(
        "Name", "scratch-test"
    ))
}
# root main.tf
provider "aws" {
    region = var.region
}

module "vpc" {
    source = "../../../../scratch/tags-pattern"
    vpc_name                = "scratch-test"
    public_subnets          = ["10.0.0.0/26"]

    default_tags = merge(var.default_tags, {
      Name = "scratch-test",
    })
}
# root main.tf
provider "aws" {
  region = var.region
  default_tags {
    tags = {
      environment_type = "Dev Environment"
    }
  }
}

module "vpc" {
  source         = "../../../../scratch/tags-pattern"
  vpc_name       = "scratch-test"
  public_subnets = ["10.0.0.0/26"]
}

# ../../../../scratch/tags-pattern/main.tf
module "the_vpc" {
  source = "../../terraform/tf-lib/network/vpc"

  vpc_name = var.vpc_name
  vpc_cidr = "10.0.0.0/24"

}

# tf-lib/network/vpc/main.tf
resource "aws_vpc" "vpc" {
  cidr_block           = var.vpc_cidr
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name    = "scratch-test-vpc"
    module  = "tf-lib/network/vpc"
    vpc_tag = "vpc"
  }
}