对于terrafrom来说是新手,需要第二双眼睛,因为我正在努力寻找看似简单的东西 . 在我看来,提供者的on_failure输入不支持插值 . 如果使用output指令,我可以看到正确的值 .

我试图做的是允许terraform供应商(如果开发人员正在对开发工作区工作,如果供应“失败”则调用ansible继续,但确保供应商在所有其他情况下将该资源标记为污染)

我正在使用https://github.com/nbering/terraform-provider-ansible来为terraform构建ansible的库存文件 . 这允许我使用ansible作为terraform中的配置器(它只运行一次)并允许开发人员通过直接调用ansible(缩短调试周期)而不是在其他工作空间中重新运行开发工作区中的配置器 .

供应者块是

provisioner "local-exec" {
    command = "ansible-playbook -i ~/scripts/terrform.py site.yml"
    on_failure = "${terraform.workspace == "development" ? "continue" : "fail"}"
}

并且输出块是

output "testingwithequalequal" {
  value = "${terraform.workspace == "development" ? "continue" : "fail"}"
}

但是在使用terraform计划时我遇到了错误

错误:加载错误/Users/phart/Development/git/terraform-provider-azurerm/examples/vm-simple-linux-managed-disk/main.tf:读取azurerm_virtual_machine [vm]的配置程序时出错:位置110:15: 'provisioner'on_failure必须'继续'或'失败'

如果我注释掉on_failure,我会收到“申请完成!...”同

testingwithequalequal =失败

我想也许我需要它来返回“失败”或“失败”并转义单引号或双引号,(因此输出将返回“失败”或“失败”,但一个失败,同样的错误,另一个不是有效的语法 .

我尝试使用变量而不是==?声明

variable "on_failure" {
  type = "map"
  default = {
    development = "continue"
    default = "fail"
  }
}

provisioner "local-exec" {
        command = "ansible-playbook -i ~/scripts/terrform.py site.yml"
        on_failure = "${var.on_failure[terraform.workspace]}"
}

output testingwithmap {
  value = "${var.on_failure[terraform.workspace]}"
}

但这具有完全相同的输出 . . .