如果存在现有资源,则将其用作数据
if there is a existing resource then use it as a data
Terraform 中有 if else select 吗? Azure 门户中已经手动配置了许多资源。有没有办法通过 Terraform 中的 if else select 语句来检测资源,这样如果资源退出,那么我将它用作数据,否则创建资源。
您可以尝试使用自定义数据源构建类似的东西,然后在资源本身上设置一个计数参数,当未找到数据源时为 1,如果找不到则为 0 否则会导致创建资源,并且不做任何其他事情。
但是你不应该那样做。您应该做的是按照您希望的资源在 terraform 中定义资源,然后使用 运行 terraform import
语句将现有的 azure 资源导入您的 terraform 状态。
因为 Terraform 有一个声明式编程模型,所以编写诸如“如果存在则读取它,如果不存在则创建它”这样的语句实际上是行不通的,因为创建它的行为会改变条件的结果并且会因此导致 Terraform 在创建和销毁对象之间摇摆不定。
Terraform 文档模块组合指南中的 Conditional Creation of Objects.
部分提供了有关此主题的更多详细信息
该指南提出了一种不同的方法,即编写一个将 possibly-already-existing 对象作为输入变量的子模块,然后让调用模块声明它将管理该对象或声明它打算管理该对象读取现有对象:
# In situations where the AMI will be directly managed:
resource "aws_ami_copy" "example" {
name = "local-copy-of-ami"
source_ami_id = "ami-abc123"
source_ami_region = "eu-west-1"
}
module "example" {
source = "./modules/example"
ami = aws_ami_copy.example
}
# Or, in situations where the AMI already exists:
data "aws_ami" "example" {
owner = "9999933333"
tags = {
application = "example-app"
environment = "dev"
}
}
module "example" {
source = "./modules/example"
ami = data.aws_ami.example
}
这是一个使用模块组合将您的配置分解为更小部分的示例,因此您的每个配置都可以使用与其建模的特定情况相关的模块的任何子集,并以不同的方式连接它们以产生不同的结果,而不是试图写一个涵盖所有可能性的单个“super-module”。
Terraform 中有 if else select 吗? Azure 门户中已经手动配置了许多资源。有没有办法通过 Terraform 中的 if else select 语句来检测资源,这样如果资源退出,那么我将它用作数据,否则创建资源。
您可以尝试使用自定义数据源构建类似的东西,然后在资源本身上设置一个计数参数,当未找到数据源时为 1,如果找不到则为 0 否则会导致创建资源,并且不做任何其他事情。
但是你不应该那样做。您应该做的是按照您希望的资源在 terraform 中定义资源,然后使用 运行 terraform import
语句将现有的 azure 资源导入您的 terraform 状态。
因为 Terraform 有一个声明式编程模型,所以编写诸如“如果存在则读取它,如果不存在则创建它”这样的语句实际上是行不通的,因为创建它的行为会改变条件的结果并且会因此导致 Terraform 在创建和销毁对象之间摇摆不定。
Terraform 文档模块组合指南中的 Conditional Creation of Objects.
部分提供了有关此主题的更多详细信息该指南提出了一种不同的方法,即编写一个将 possibly-already-existing 对象作为输入变量的子模块,然后让调用模块声明它将管理该对象或声明它打算管理该对象读取现有对象:
# In situations where the AMI will be directly managed:
resource "aws_ami_copy" "example" {
name = "local-copy-of-ami"
source_ami_id = "ami-abc123"
source_ami_region = "eu-west-1"
}
module "example" {
source = "./modules/example"
ami = aws_ami_copy.example
}
# Or, in situations where the AMI already exists:
data "aws_ami" "example" {
owner = "9999933333"
tags = {
application = "example-app"
environment = "dev"
}
}
module "example" {
source = "./modules/example"
ami = data.aws_ami.example
}
这是一个使用模块组合将您的配置分解为更小部分的示例,因此您的每个配置都可以使用与其建模的特定情况相关的模块的任何子集,并以不同的方式连接它们以产生不同的结果,而不是试图写一个涵盖所有可能性的单个“super-module”。