ошибка плана terraform "особенности": обязательное поле не установлено - PullRequest
0 голосов
/ 28 февраля 2020

terraform init инициализируется успешно, ниже мой main.tf

############################################################################
# VARIABLES
#############################################################################

variable "resource_group_name" {
  type  = string
}

variable "location" {
  type    = string
  default = "eastus"
}


variable "vnet_cidr_range" {
  type    = string
  default = "10.0.0.0/16"
}

variable "subnet_prefixes" {
  type    = list(string)
  default = ["10.0.0.0/24", "10.0.1.0/24"]
}

variable "subnet_names" {
  type    = list(string)
  default = ["web", "database"]
}

#############################################################################
# PROVIDERS
#############################################################################

provider "azurerm" {

}

#############################################################################
# RESOURCES
#############################################################################

module "vnet-main" {
  source              = "Azure/vnet/azurerm"
  resource_group_name = var.resource_group_name
  location            = var.location
  vnet_name           = var.resource_group_name
  address_space       = var.vnet_cidr_range
  subnet_prefixes     = var.subnet_prefixes
  subnet_names        = var.subnet_names
  nsg_ids             = {}

  tags = {
    environment = "dev"
    costcenter  = "it"

  }
}

#############################################################################
# OUTPUTS
#############################################################################

output "vnet_id" {
  value = module.vnet-main.vnet_id
}

Когда я запускаю terraform plan -var resource_group_name=vnet-main -out vnet.tfplan, получая предупреждения ниже:

Предупреждение: выражения только для интерполяции устарела

в .terraform / modules / vnet -main / Azure -terraform-azurerm- vnet -e0b9155 / main.tf строка 3, в ресурсе "azurerm_resource_group" "vnet": 3: name
= "$ {var.resource_group_name}"

Предупреждение. Ограничения цитируемых типов устарели

в .terraform / modules / vnet -main / Azure - terraform-azurerm- vnet -e0b9155 / variables.tf строка 39, в переменной "nsg_ids": 39: type = "map"

, наконец, ошибка ниже:

Ошибка: «функции»: обязательное поле не установлено

В соответствии с предложением, упомянутым в статье stackoverflow, если я запускаю команду обновления (terraform 0.12upgrade) для обновления до 0.12, получая ошибку ниже:

Исправлено предупреждение «Только интерполяционные выражения устарели» в Terraform

Ошибка: синтаксическая ошибка в ко nfiguration file

в строке main.tf 6, в переменной "имя_группы ресурсов": 6: type = string

Ошибка при разборе: в 6:11: неизвестный токен: 6:11 строка IDENT

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Эй, вы должны указать блок features, как показано ниже, чтобы решить проблему

provider "azurerm" {
  version = "=2.4.0"
  features {}
}
1 голос
/ 28 февраля 2020

Кажется, здесь есть несколько вопросов, но это не обязательно прямой вопрос, поэтому я постараюсь рассмотреть каждый из них. Обратите внимание, что вам НЕ НУЖНО исправлять предупреждения, только ошибки, хотя рекомендуется исправлять оба.

Предупреждение: выражения только для интерполяции устарели

В более новых версиях terraform атрибуты ресурса должны передаваться напрямую, а не упаковывать их в интерполяции.

То же самое можно сделать

resource "my_resource" "name" {
  some_attr = var.some_value
}

вместо

resource "my_resource" "name" {
  some_attr = "${var.some_value}"
}

, если для построения фактически не требуется интерполяция строк строка из других значений.

Предупреждение. Ограничения цитируемых типов устарели

в .terraform / modules / vnet -main / Azure -terraform-azurerm- vnet -e0b9155 / variables.tf строка 39, в переменной "nsg_ids": 39: type = "map"

Похоже, что модуль, от которого вы зависите, не совместим с версия терраформы, которую вы используете (по крайней мере, с точки зрения «Предупреждение»).

Эта жалоба c обусловлена ​​тем, что она использует кавычки вокруг типа map (например, "map", а не просто *) 1027 *). Это видно из источника модуля .

Единственный реальный вариант здесь - это разветвить модуль и исправить предупреждения / обновить или открыть PR и надеяться, что сопровождающие сливаются (хотя это выглядит вроде того, что репо не было активности в течение 2 лет).

Ошибка: «функции»: обязательное поле не установлено

Это реальное ошибка, я думаю, вы, вероятно, хотите исправить. Ответ прост: ваш провайдер пропускает требуемый требуемый features блок (может даже быть пустым).

Таким образом, использование следующего должно исправить эту ошибку

provider "azurerm" {
  features {}
}

Ошибка: синтаксическая ошибка в файле конфигурации

в строке main.tf 6, в переменной "resource_group_name": 6: type = string

Ошибка при синтаксическом анализе: в 6:11 : Неизвестный токен: 6:11 строка IDENT

Я полагаю, что проблема заключается в том, что команда обновления ожидает, что терраформа, которая обновляется, будет действительным 0.11 кодом. А в 0.11 поля type должны иметь значения string (например, "map", "string", et c ...).

...