Проблема с загрузкой azurerm_storage_blob, потому что существует azurerm_storage_container

я хочу загрузить сгенерированный файл как новый объект blobobject в лазурь. Моя проблема в том, что если azurerm_storage_container не существует, мне нужно создать его как ресурс. Но если этот контейнер уже присутствует в учетной записи хранения, я получаю сообщение об ошибке

"Указанный контейнер уже существует".

Поэтому я подумал, что могу определить свой azurerm_storage_container как объект данных. Но тогда я получаю сообщение об ошибке

module.components.data.azurerm_storage_container.blobstorage: поставщик не поддерживает источник данных: azurerm_storage_container

Чтобы уточнить: я хочу создать новый контейнер для хранения, если его нет в лазурном. после этого я хочу загрузить свой сгенерированный локальный файл в новый объект blobobject с включенным в контейнер хранилища.

Я попытался установить все объекты как ресурсы и данные. я не нахожу правильную комбинацию этих объектов для достижения моей цели


person immae1nova    schedule 07.09.2019    source источник


Ответы (1)


Насколько мне известно, вы можете просто использовать внешний источник данных Terraform, чтобы выполнить сценарий, чтобы получить информацию о существовании контейнера, а затем создать контейнер или нет в соответствии с состоянием.

Вот пример кода сценария bash с использованием команды Azure CLI:

#!/bin/bash

eval "$(jq -r '@sh "export container_name=\(.container_name) account_name=\(.account_name)"')"
flag=$(az storage container exists --name $container_name --account-name $account_name --query exists)
if [ $flag ]
then
    echo "{\"exists\":\"True\"}"
else
    echo "{\"exists\":\"False\"}"
fi

Терраформ:

variable "container_name" {}

data "azurerm_storage_account" "test" {
    name = "charlescloudshell"
    resource_group_name = "v-chaxu-ChinaCXPTeam"
}

data "external" "exists" {
    program = ["/bin/bash", "./container.sh"]

    query = {
        container_name = "${var.container_name}"
        account_name = "${data.azurerm_storage_account.test.name}"
    }
}

resource "azurerm_storage_container" "test" {
    count = "${data.external.exists.result["exists"] == "False" ? 1 : 0}"
    name  = "${var.container_name}"
    storage_account_name = "${data.azurerm_storage_account.test.name}"
    container_access_type = "private"
}
person Charles Xu    schedule 10.09.2019
comment
Хорошо спасибо. Это немного помогает, но, к сожалению, я не хочу использовать AZ cli (из-за блокировки поставщика). Я думаю, мне нужно сначала создать свою учетную запись хранения, а затем использовать только ресурс blobobject для создания моих файлов. - person immae1nova; 10.09.2019
comment
@ immae1nova Какой язык вы хотите использовать? Это всего лишь пример, вы можете использовать другой скрипт по своему усмотрению. Powershell или REST API. - person Charles Xu; 10.09.2019
comment
ах, ладно, может быть, REST API с питоном или что-то в этом роде! Спасибо за разъяснение :) - person immae1nova; 10.09.2019
comment
@ immae1nova Что ж, если ты думаешь, что все в порядке, можешь принять это как ответ. - person Charles Xu; 10.09.2019