在Terraform外部数据源脚本中获取阶段

时间:2018-09-18 14:19:12

标签: terraform

我将使用外部数据源来创建当前不支持的AWS资源(AWS Organizations OU)。我正在对创建S3存储桶进行一些测试,因为工作流程相似。我正在使用外部数据源调用bash脚本,并传递参数(例如,存储桶名称,区域)。

该脚本正在检查S3存储桶是否存在,如果不存在,则创建它。编写脚本以返回成功等信息(如果它已经存在的话)。

我看到的是,即使在“地形计划”阶段也执行了脚本,并且似乎没有传递stdin参数或环境变量来指示脚本/应用/破坏阶段。这可能做/演绎吗?理想情况下,脚本将使用“计划”进行调用,如果资源已经存在,则返回该脚本。然后,如有必要,可以创建“应用”阶段。

是否可以在脚本中获得Terraform阶段(计划/应用/销毁)?还是其他避免脚本在计划阶段被完全调用的方法?

提醒一下,最终我并不是要创建S3存储桶(因为我知道我已经可以在Terraform中做到这一点),所以我想创建一个Organizations OU,但这是一个更易于测试的工作流程。

示例调用代码:

data "external" "create_bucket" { 
    program = ["bash", "create_bucket.sh"]
    query = { 
        region = "ca-central-1" 
        bucket_name = "mytestbucket" 
    }
}

也尝试使用local-exec:

当我有以下调用代码时:

variable "bucket_name_list" {
    type = "list"
    default = ["neilp-dummylist-1","neilp-dummylist-2",
               "neilp-dummylist-3"]
}

module "local" {
    source           = "../local"
    bucket_name_list = ["${var.bucket_name_list}"]
    bucket_region    = "ca-central-1"
}

使用模块:

resource "null_resource" "test" {
    count = "${length(var.bucket_name_list)}"

    provisioner "local-exec" {
        command = "aws s3api create-bucket 
                       --bucket 
                         ${element(var.bucket_name_list, count.index)} 
                       --create-bucket-configuration
                         LocationConstraint=${var.bucket_region}"
    }
}

这里的问题是,它仅跟踪bucket_name_list中的条目数,并且如果我更改一个值但保持条目数不变,则不会注意到。

0 个答案:

没有答案