Не удалось прочитать выходной атрибут из источника данных удаленного состояния

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

Я попытался найти в Интернете все, что смог найти, чтобы узнать, была ли у кого-нибудь эта проблема и как они ее исправили.

###vnet.tf
#Remote State pulling data from bastion resource group state
data "terraform_remote_state" "network" {
  backend = "azurerm"
  config = {
    storage_account_name = "terraformstatetracking"
    container_name       = "bastionresourcegroups"
    key                  = "terraform.terraformstate"
  }
}

#creating virtual network and putting that network in resource group created by bastion.tf file
module "quannetwork" {
    source              = "Azure/network/azurerm"
resource_group_name = "data.terraform_remote_state.network.outputs.quan_netwk"
    location            = "centralus"
    vnet_name           = "quan"
    address_space       = "10.0.0.0/16"
    subnet_prefixes     = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
    subnet_names        = ["subnet1", "subnet2", "subnet3"]

    tags                = {
                            environment = "quan"
                            costcenter  = "it"
                          }
}

terraform {
  backend "azurerm" {
    storage_account_name  = "terraformstatetracking"
    container_name        = "quannetwork"
    key                   = "terraform.terraformstate"
  }
}

###resourcegroups.tf
# Create a resource group
#Bastion
resource "azurerm_resource_group" "cm" {
    name     = "${var.prefix}cm.RG"
    location = "${var.location}"
    tags     = "${var.tags}"
}

#Bastion1
resource "azurerm_resource_group" "network" {
    name     = "${var.prefix}network.RG"
    location = "${var.location}"
    tags     = "${var.tags}"
}

#bastion2
resource "azurerm_resource_group" "storage" {
    name     = "${var.prefix}storage.RG"
    location = "${var.location}"
    tags     = "${var.tags}"
}

terraform {
  backend "azurerm" {
    storage_account_name  = "terraformstatetracking"
    container_name        = "bastionresourcegroups"
    key                   = "terraform.terraformstate"
  }
}

###outputs.tf
output "quan_netwk" {
  description = "Quan Network Resource Group"
  value       = "${azurerm_resource_group.network.id}"
}

При запуске кода vnet.tf он должен считывать выходные данные из outputs.tf, который хранится в файле состояния учетной записи внутреннего хранилища Azure, и использовать это значение для resource_group_name в модуле quannetwork. Вместо этого он создает группу ресурсов с именем data.terraform_remote_state.network.outputs.quan_netwk. Любая помощь будет принята с благодарностью.


person Ralphael Johnson    schedule 21.08.2019    source источник
comment
я починил это. Это был недосмотр в моем коде. в моем файле outputs.tf изменен value = "${azurerm_resource_group.network.id}" на value ="${azurerm_resource_group.network.name}"   -  person Ralphael Johnson    schedule 23.08.2019


Ответы (1)


Во-первых, вам нужно ввести строку для resource_group_name в вашем модуле quannetwork, а не идентификатор группы ресурсов.

Во-вторых, если вы хотите процитировать что-то в удаленном состоянии, не просто помещайте это в двойные кавычки, правильный формат ниже:

resource_group_name = "${data.terraform_remote_state.network.outputs.quan_netwk}"
person Charles Xu    schedule 22.08.2019
comment
не могли бы вы рассказать подробнее? Я новичок в терраформе. Resouce_group_name имеет максимальную длину 80 символов, поэтому мне придется вернуться и внести некоторые небольшие изменения в сокращенные элементы, если мне нужно вставить интерполяцию. Я думал, что в версии .12 нет необходимости делать это, см. Здесь terraform. io / docs / Provider / terraform / d / remote_state.html Представленный вами код должен выглядеть в моем quannetwork модуле? - person Ralphael Johnson; 22.08.2019
comment
Вот коды ошибок, которые я получил при добавлении вашего resource_group_name в свой код. Код ошибки 1: Error: "name" may not exceed 80 characters in length on .terraform/modules/quannetwork/Azure-terraform-azurerm-network-564155f/main.tf line 2, in resource "azurerm_resource_group" "network": 2: resource "azurerm_resource_group" "network" { - person Ralphael Johnson; 22.08.2019
comment
Код ошибки 2: Error: "name" may only contain alphanumeric characters, dash, underscores, parentheses and periods on .terraform/modules/quannetwork/Azure-terraform-azurerm-network-564155f/main.tf line 2, in resource "azurerm_resource_group" "network": 2: resource "azurerm_resource_group" "network" { - person Ralphael Johnson; 22.08.2019
comment
@RalphaelJohnson Вы можете указать удаленное состояние в формате "${data.terraform_remote_state.network.outputs.quan_netwk}" или напрямую data.terraform_remote_state.network.outputs.quan_netwk. Но не может нравится "data.terraform_remote_state.network.outputs.quan_netwk", это означает строку, а не цитату. И группа должна соответствовать ограничению Azure. - person Charles Xu; 23.08.2019
comment
да, я понимаю это. Я пробовал все три из них. Первые 2 дали мне указанные выше коды ошибок, а третий - группу ресурсов data.terraform_remote_state.network.outputs.quan_netwk. Я не понимаю, почему первые 2 не работают. Я понимаю ошибку в отношении 80 символов, которые я могу исправить, но второй я не смог исправить. - person Ralphael Johnson; 23.08.2019
comment
@RalphaelJohnson Можете ли вы предоставить полное сообщение об ошибке в своем вопросе? Скриншот самый лучший. То, что я сказал, работает с моей стороны, и это правда. Если я получу более подробную информацию, возможно, дам вам какой-нибудь совет. - person Charles Xu; 26.08.2019