fly*_*uin 5 terraform terraform0.12+
我正在尝试管理数据库用户以及天蓝色实例的数据库,但令人惊讶的是 \xe2\x80\xa6 是不可能的。我以为我找到了一种使用本地执行提供程序的方法,但是 \xe2\x80\xa6 好吧,显然不是。代码和错误消息如下。
\n它归结为 terraform 抱怨我引用了其他资源中的非静态内容,我只是 \xe2\x80\xa6 don\xe2\x80\x99t。我只使用静态参数,没有其他。我不明白\xe2\x80\x99不明白的是,我什至可以在提供者配置中引用变量 - 但对于销毁提供者来说,它\xe2\x80\x99s太动态了?
\n感谢任何帮助!
\n并转到代码 \xe2\x80\xa6 :
\nresource "azurerm_postgresql_database" "db" {\n server_name = var.server_name\n resource_group_name = var.server_rg\n name = var.db_name\n charset = var.db_charset\n collation = var.db_collation\n\n\n provisioner "local-exec" {\n command = "${path.module}/mgt-user.sh create '${var.server_fqdn}' '${var.server_admin_user}' '${var.db_name}' '${var.db_user_pass}'"\n }\n\n provisioner "local-exec" {\n when = destroy\n command = "${path.module}/mgt-user.sh destroy '${var.server_fqdn}' '${var.server_admin_user}' '${var.db_name}' '${var.db_user_pass}'"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n现在当我运行 terraform init 时我得到这个:
\nError: Invalid reference from destroy provisioner\n\n on ../modules/dbs/pg-db-and-user/db_and_user.tf line 27, in resource "azurerm_postgresql_database" "db":\n 27: command = "echo ${path.module}/create_user.sh destroy '${var.server_fqdn}' '${var.server_admin_user}' '${var.db_name}' '${var.db_user_pass}'"\n\nDestroy-time provisioners and their connection configurations may only\nreference attributes of the related resource, via 'self', 'count.index', or\n'each.key'.\n\nReferences to other resources during the destroy phase can cause dependency\ncycles and interact poorly with create_before_destroy.\nRun Code Online (Sandbox Code Playgroud)\n
har*_*vmb 10
下面的答案不起作用。null_resource一种方法是与local-exec&一起使用triggers。一个例子就像::
resource "null_resource" "delete_venafi_cert" {
triggers = {
venafi_url = var.venafi_url
cert_name = var.cert_name
venafi_scope = var.venafi_delete_scope
venafi_client = var.venafi_client_id
venafi_oath_url = var.venafi_oauth_url
}
provisioner "local-exec" {
when = destroy
command = "${path.module}/delete-venafi-certificate.sh ${self.triggers.venafi_url} ${self.triggers.cert_name} ${self.triggers.venafi_scope} ${self.triggers.venafi_client} ${self.triggers.venafi_oath_url}"
on_failure = continue
}
}
Run Code Online (Sandbox Code Playgroud)
下面的代码片段必须带有警告而不是抛出错误。问题是因为path.module变量与配置程序一起使用destroy。
Terraform 表示这将在进一步的版本中得到改进。在那之前,您可以传递working_dir指向path.modulevar 的指针。
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
}
}
Run Code Online (Sandbox Code Playgroud)
欲了解更多详情,您可以参考以下链接::
| 归档时间: |
|
| 查看次数: |
16347 次 |
| 最近记录: |