2016-12-06 146 views
0

我有一个terraform资源,看起来像下面如何删除terraform覆盖资源中的属性。

resource "aws_instance" "web" { 
    ami = "ami-408c7f28" 
    tags = { Name = "hello World"} 
} 

我要重写它来删除标记,并让它看起来像这样

resource "aws_instance" "web" { 
    ami = "ami-408c7f28" 
} 

基本上去除标签。

有没有办法在覆盖文件中做到这一点,如此处所述? https://www.terraform.io/docs/providers/aws/r/instance.html

以上是一个例子。一般来说,我真的想知道我是否可以在覆盖中移除一个属性。

回答

1

是的,Terraform应该能够从资源中删除属性。例如,假设我已经用下面的.tf文件运行terraform apply

resource "aws_instance" "web" { 
    ami = "ami-408c7f28" 
    instance_type = "m1.small" 
    tags = { Name = "hello World"} 
} 

现在,如果我改变.tf文件:

resource "aws_instance" "web" { 
    ami = "ami-408c7f28" 
    instance_type = "m1.small" 
} 

和运行terraform plan,我应该看到这样的输出这个:

~ aws_instance.web 
    tags.%: "1" => "0" 
    tags.Name: "hello World" => "" 

这表明terraform希望通过删除Name标签来修改实例。如果我运行terraform apply,标签将被删除。

如果你想删除的标签在override file(override.tf,例如),你会明确设置标记为空地图:

resource "aws_instance" "web" { 
    ami = "ami-408c7f28" 
    instance_type = "m1.small" 
    tags = {} 
} 

注意这些具体的例子只有当你的工作在我们东1帐户仍支持EC2-Classic

+0

当我第一次看到你的问题时,我错过了你正在询问有关使用[覆盖文件](https://www.terraform.io/docs/configuration/override.html),特别是(我认为你粘贴了错误的链接)。您仍然可以使用覆盖来做到这一点,但您需要明确清除tags属性。例如,在override.tf中,您可以指定'tags = {}'来获得相同的效果。 –

+0

我想我需要更精确地使用我的用例。这在技术上回答了我的问题,但并未解决我的问题。荣誉。 –