gpt4 book ai didi

local-exec DESTROY provisioner 中的 terraform 和引用

转载 作者:行者123 更新时间:2023-12-05 02:47:31 24 4
gpt4 key购买 nike

我正在尝试为 Azure 实例管理数据库用户和数据库,这令人惊讶……不可能。我以为我找到了一种使用 local-exec 提供程序的方法,但是……好吧,显然不是。代码和错误消息如下。

它归结为 terraform 提示我从其他资源中引用了非静态的东西,而我只是……没有。我只使用静态参数,没有别的。我不明白的是,我什至可以在提供者配置中引用变量 - 但对于销毁提供者来说,它太动态了?

感谢任何帮助!

接着是代码……:

resource "azurerm_postgresql_database" "db" {
server_name = var.server_name
resource_group_name = var.server_rg
name = var.db_name
charset = var.db_charset
collation = var.db_collation


provisioner "local-exec" {
command = "${path.module}/mgt-user.sh create '${var.server_fqdn}' '${var.server_admin_user}' '${var.db_name}' '${var.db_user_pass}'"
}

provisioner "local-exec" {
when = destroy
command = "${path.module}/mgt-user.sh destroy '${var.server_fqdn}' '${var.server_admin_user}' '${var.db_name}' '${var.db_user_pass}'"
}
}

现在,当我运行 terraform init 时,我得到了这个:

Error: Invalid reference from destroy provisioner

on ../modules/dbs/pg-db-and-user/db_and_user.tf line 27, in resource "azurerm_postgresql_database" "db":
27: command = "echo ${path.module}/create_user.sh destroy '${var.server_fqdn}' '${var.server_admin_user}' '${var.db_name}' '${var.db_user_pass}'"

Destroy-time provisioners and their connection configurations may only
reference attributes of the related resource, via 'self', 'count.index', or
'each.key'.

References to other resources during the destroy phase can cause dependency
cycles and interact poorly with create_before_destroy.

最佳答案

下面的代码片段必须与警告一起使用,而不是抛出错误。问题是因为 path.module 变量与 destroy provisioner 一起使用。

Terraform 表示这将在以后的版本中得到改进。在那之前,您可以传递指向 path.module var 的 working_dir

resource "azurerm_postgresql_database" "db" {
server_name = var.server_name
resource_group_name = var.server_rg
name = var.db_name
charset = var.db_charset
collation = var.db_collation


provisioner "local-exec" {
command = "${path.module}/mgt-user.sh create '${var.server_fqdn}' '${var.server_admin_user}' '${var.db_name}' '${var.db_user_pass}'"
}

provisioner "local-exec" {
when = destroy
command = "./mgt-user.sh destroy '${var.server_fqdn}' '${var.server_admin_user}' '${var.db_name}' '${var.db_user_pass}'"
working_dir = path.module
}
}

更多详情,您可以引用以下链接::

关于local-exec DESTROY provisioner 中的 terraform 和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64952745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com