我正在使用 Terraform 0.12 版。如果已存在具有相同名称的资源,我需要跳过资源创建。
我为此做了以下工作:
阅读自定义图像列表,
data "ibm_is_images" "custom_images" {
}
Run Code Online (Sandbox Code Playgroud)
检查图像是否已经存在,
locals {
custom_vsi_image = contains([for x in data.ibm_is_images.custom_images.images: "true" if x.visibility == "private" && x.name == var.vnf_vpc_image_name], "true")
}
output "abc" {
value="${local.custom_vsi_image}"
}
Run Code Online (Sandbox Code Playgroud)
仅当图像存在时创建为假。
resource "ibm_is_image" "custom_image" {
count = "${local.custom_vsi_image == true ? 0 : 1}"
depends_on = ["data.ibm_is_images.custom_images"]
href = "${local.image_url}"
name = "${var.vnf_vpc_image_name}"
operating_system = "centos-7-amd64"
timeouts {
create = "30m"
delete = "10m"
}
}
Run Code Online (Sandbox Code Playgroud)
这在第一次使用“terraform apply”时效果很好。它发现图像不存在,因此创建图像。
当我第二次运行“terraform apply”时。它正在删除上面创建的资源“custom_image”。知道为什么要在第二次运行时删除资源吗?
另外,如何根据某些条件创建资源(例如仅当它不存在时)?
我正在尝试使用 AWS 秘密管理器来声明 RDS 管理员凭据。
variable "RdsAminCred" {
default = {
username = "dbadmin"
password = "dbadmin#02avia"
}
type = map(string)
}
resource "aws_secretsmanager_secret" "RdsAminCred" {
name = "RdsAminCred"
}
resource "aws_secretsmanager_secret_version" "RdsAminCred" {
secret_id = aws_secretsmanager_secret.RdsAminCred.id
secret_string = jsonencode(var.RdsAminCred)
}
Run Code Online (Sandbox Code Playgroud)
resource "aws_db_instance" "default" {
identifier = "testdb"
allocated_storage = 20
storage_type = "gp2"
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t2.medium"
name = "mydb"
username = "dbadmin"
password = …Run Code Online (Sandbox Code Playgroud)