首页 > 解决方案 > 使用 local-exec 供应商更新资源

问题描述

我用 local-exec 供应商写了一个 null_resource :

resource "null_resource" "custom-users" {
  depends_on = [azurerm_sql_database.db]
  for_each   = { for user_def in var.custom_users : format("%s-%s", user_def.name, user_def.database) => user_def }

  triggers = {
    user           = each.value.name
    password       = random_password.custom-users[each.key].result
    roles          = join(",", each.value.roles)
    database       = each.value.database
    server         = azurerm_sql_server.server.fully_qualified_domain_name
    admin_login    = var.administrator_login
    admin_password = var.administrator_password
  }

  provisioner "local-exec" {
    command = <<EOC
${path.module}/scripts/mssql_users.py --debug \
                                              -s ${azurerm_sql_server.server.fully_qualified_domain_name} \
                                              -d ${each.value.database} \
                                              --admin-user ${var.administrator_login} \
                                              --admin-password '${var.administrator_password}' \
                                              --user ${each.value.name} \
                                              --password '${random_password.custom-users[each.key].result}' \
                                              --roles ${join(",", each.value.roles)}
EOC
  }

  provisioner "local-exec" {
    when    = destroy
    command = <<EOC
${path.module}/scripts/mssql_users.py --debug \
                                              -s ${self.triggers.server} \
                                              -d ${self.triggers.database} \
                                              --admin-user ${self.triggers.admin_login} \
                                              --admin-password '${self.triggers.admin_password}' \
                                              --user ${self.triggers.user} \
                                              --delete
EOC
  }

}

当“密码”属性改变时,terraform 销毁并创建资源。

我想在不破坏资源的情况下对资源进行真正的更新。

如果 terraform 只是再次运行 local-exec 配置程序,就足够了。

我将在 python 脚本中管理更新。

有没有办法不破坏资源?

谢谢。

大卫。

标签: terraform

解决方案


推荐阅读