Список проблем при обновлении с Terraform 0.11 до 0.12 - PullRequest
1 голос
/ 19 марта 2020

У меня проблема при попытке переписать список для работы в Terraform 0.12, который работает в Terraform 0.11.

Это мой список:

variable "master_authorized_networks_config" {
  type        = list(string)
  description = "The list of CIDR blocks of master authorized networks."

  default = [
    {
      cidr_blocks = [
        { 
          cidr_block   = "XXXXXX/32"
          display_name = "XXXXX"
        },
        { 
          cidr_block   = "XXXXXX/32"
          display_name = "XXXXX"
        },
        { 
          cidr_block   = "XXXXXX/32"
          display_name = "XXXXX"
        },
        { 
          cidr_block   = "XXXXXX/32"
          display_name = "XXXXX"
        },
      ]
    },
  ]

Я добавил его в модуль: master_authorized_networks_config = var.master_authorized_networks_config

После запуска terraform apply появляется следующая ошибка:

Error: Invalid default value for variable

  on ../../modules/xxx/xxx/variables.tf line 71, in variable "master_authorized_networks_config":
  71:   default = [
  72:     {
  73:       cidr_blocks = [
  74:         {
  75:           cidr_block   = "XXXXXX/32"
  76:           display_name = "XXXXX"
  77:         },
  78:         {
  79:           cidr_block   = "XXXXXX/32"
  80:           display_name = "XXXXX"
  81:         },
  82:         {
  83:           cidr_block   = "XXXXXX/32"
  84:           display_name = "XXXXX"
  85:         },
  86:         {
  87:           cidr_block   = "XXXXXX/32"
  88:           display_name = "XXXXX"
  89:         },
 102:       ]
 103:     },
 104:   ]

This default value is not compatible with the variable's type constraint:
element 0: string required.

Я не могу решить эту проблему. Вы можете мне помочь?

1 Ответ

3 голосов
/ 19 марта 2020

Ошибка говорит о том, что значение по умолчанию не соответствует ограничению типа, о котором вы сообщили Terraform с помощью type = list(string). Это ограничение типа говорит о том, что это должен быть список строк, и по умолчанию он приходит от 0.11 с помощью инструмента 0.12upgrade, который вы, возможно, использовали для получения этого результата, если у вас было type = list ранее.

Вы можете измените ограничение типа на list(object). Если вы упростили свою структуру данных так, что у вас просто был список объектов с ключами cidr_block и display_name вместо списка объектов с ключом cidr_blocks, который имеет список вышеупомянутых объектов, то вы могли бы даже go что касается более точной проверки:

variable "master_authorized_networks_config" {
  type = list(object{
    cidr_block   = string
    display_name = string
  })

  description = "The list of CIDR blocks of master authorized networks."

  default = [
    { 
      cidr_block   = "XXXXXX/32"
      display_name = "XXXXX"
    },
# ...
  ]
}

Или, что гораздо проще, при предоставлении значения по умолчанию вы можете позволить Terraform автоматически выводить ожидаемый тип объекта, удаляя параметр type из переменной. Затем, если кто-то попытается передать переменную, которая не соответствует типу по умолчанию, Terraform сообщит вам в план или во время проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...