繁体   English   中英

Terraform Azurerm:如果不存在则创建 blob

[英]Terraform Azurerm: Create blob if not exists

我从创建存储帐户、容器和块 blob 的代码中获得了 Terra。 是否可以配置仅当块 blob 不存在时才创建它?

在重新运行 terraform 的情况下,如果 blob 已经存在,我不想替换它,因为内容可能已被手动修改,我想保留它。

有小费吗? 我唯一能想到的替代方案是在进一步的部署步骤中运行 powershell/bash 脚本,如果需要,它会创建文件,但我很好奇这是否可以仅使用 Terraform 来完成。

locals {
  storage_account_name_teast = format("%s%s", local.main_pw_prefix_short, "teast")
}

resource "azurerm_storage_account" "teaststorage" {
  name                            = local.storage_account_name_teast
  resource_group_name             = azurerm_resource_group.main.name
  location                        = var.location
  account_tier                    = var.account_tier
  account_replication_type        = var.account_replication_type
  allow_nested_items_to_be_public = false
  min_tls_version                 = "TLS1_2"

  network_rules {
    default_action = "Deny"
    bypass = [
      "AzureServices"
    ]
    virtual_network_subnet_ids = []
    ip_rules                   = local.ip_rules
  }
  tags = var.tags
}

resource "azurerm_storage_container" "teastconfig" {
  name                  = "config"
  storage_account_name  = azurerm_storage_account.teaststorage.name
  container_access_type = "private"
}


resource "azurerm_storage_blob" "teastfeaturetoggle" {
  name                   = "featureToggles.json"
  storage_account_name   = azurerm_storage_account.teaststorage.name
  storage_container_name = azurerm_storage_container.teastconfig.name
  type                   = "Block"
  source                 = "vars-pr-default-toggles.json"
}

扫描完 terraform 计划后,我发现它正在强制替换 blob,因为:

content_md5 = "9a95db04fb1ff3abcd7ff81fcfb96307" -> null # forces replacement

我将生命周期挂钩添加到 blob 资源以防止它:

resource "azurerm_storage_blob" "teastfeaturetoggle" {
  name                   = "featureToggles.json"
  storage_account_name   = azurerm_storage_account.teaststorage.name
  storage_container_name = azurerm_storage_container.teastconfig.name
  type                   = "Block"
  source                 = "vars-pr-default-toggles.json"

  lifecycle {     
    ignore_changes = [       
      content_md5,     
    ]   
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM