Size: a a a

2020 June 19

LS

Leonid Shestera in terraform_ru
сответственно создание сети и создание k8s - это два разных модуля
источник

LS

Leonid Shestera in terraform_ru
Вопрос был немного в другом, как в зависимости от размера списка, генерировать разные по структуре ответы
источник

VT

Victor Tur in terraform_ru
ок,
терраформ сперва идет в module.yc-network.
Делает prediction compute ресурсов и далее он идет в yc-kubernetes, там он споткнется о то что количество наших compute ресурсов он не может в графе предугадать.
(хотя почему бы не делать прогон несколько с частичными планами? правда?)
посмотрим что сделает terrafom 0.13 - там был подвижки в эту сторону
источник

AR

Alexey Remizov in terraform_ru
Leonid Shestera
Вопрос был немного в другом, как в зависимости от размера списка, генерировать разные по структуре ответы
locals {
 regions = length(var.master_zones) > 1 ? [{
   region    = var.master_region
   locations = var.master_zones
 }] : []

 zones = length(var.master_zones) > 1 ? [] : var.master_zones
}

.  .  .

 master {
   version   = var.master_version
   public_ip = var.master_public_ip

   dynamic "zonal" {
     for_each = local.zones

     content {
       zone      = zonal.value["zone"]
       subnet_id = zonal.value["id"]
     }
   }

   dynamic "regional" {
     for_each = local.regions

     content {
       region = regional.value["region"]

       dynamic "location" {
         for_each = regional.value["locations"]

         content {
           zone      = location.value["zone"]
           subnet_id = location.value["id"]
         }
       }
     }
   }
 }
источник

VT

Victor Tur in terraform_ru
Как решают - создают две папки (очень грубо)
network/
eks/
в каждом делаешь terraform apply,
в eks ссылаешься на output из network через data remote_state ресурс.
источник

VT

Victor Tur in terraform_ru
Alexey Remizov
locals {
 regions = length(var.master_zones) > 1 ? [{
   region    = var.master_region
   locations = var.master_zones
 }] : []

 zones = length(var.master_zones) > 1 ? [] : var.master_zones
}

.  .  .

 master {
   version   = var.master_version
   public_ip = var.master_public_ip

   dynamic "zonal" {
     for_each = local.zones

     content {
       zone      = zonal.value["zone"]
       subnet_id = zonal.value["id"]
     }
   }

   dynamic "regional" {
     for_each = local.regions

     content {
       region = regional.value["region"]

       dynamic "location" {
         for_each = regional.value["locations"]

         content {
           zone      = location.value["zone"]
           subnet_id = location.value["id"]
         }
       }
     }
   }
 }
вот! все переменные статичны👍
источник

LS

Leonid Shestera in terraform_ru
Victor Tur
ок,
терраформ сперва идет в module.yc-network.
Делает prediction compute ресурсов и далее он идет в yc-kubernetes, там он споткнется о то что количество наших compute ресурсов он не может в графе предугадать.
(хотя почему бы не делать прогон несколько с частичными планами? правда?)
посмотрим что сделает terrafom 0.13 - там был подвижки в эту сторону
а зачем ему предугадывать, сеть то создалась, сохранилась в стейт и больше не измениться если не поменять настройки сети, или я не прав?
источник

LS

Leonid Shestera in terraform_ru
Alexey Remizov
locals {
 regions = length(var.master_zones) > 1 ? [{
   region    = var.master_region
   locations = var.master_zones
 }] : []

 zones = length(var.master_zones) > 1 ? [] : var.master_zones
}

.  .  .

 master {
   version   = var.master_version
   public_ip = var.master_public_ip

   dynamic "zonal" {
     for_each = local.zones

     content {
       zone      = zonal.value["zone"]
       subnet_id = zonal.value["id"]
     }
   }

   dynamic "regional" {
     for_each = local.regions

     content {
       region = regional.value["region"]

       dynamic "location" {
         for_each = regional.value["locations"]

         content {
           zone      = location.value["zone"]
           subnet_id = location.value["id"]
         }
       }
     }
   }
 }
Спсибо, пошел пробовать )
источник

AR

Alexey Remizov in terraform_ru
Идея в том, что в декларации кластера ты объявляешь и блок zonal и блок regional, но по построению гарантируешь, что один из блоков обязательно будет пустой.
источник

VT

Victor Tur in terraform_ru
Leonid Shestera
а зачем ему предугадывать, сеть то создалась, сохранилась в стейт и больше не измениться если не поменять настройки сети, или я не прав?
Создай попробуй с нуля
Когда ты сперва создал сеть в одном стейте, а потом со второго прогона создал дополнительные ресурсы - проблем нет. Всё уже известно в графе зависимостей.
Если у тебя пустой стейт и ты делаешь первый прогон - он будет жаловаться на это.
источник

LS

Leonid Shestera in terraform_ru
Victor Tur
Создай попробуй с нуля
Когда ты сперва создал сеть в одном стейте, а потом со второго прогона создал дополнительные ресурсы - проблем нет. Всё уже известно в графе зависимостей.
Если у тебя пустой стейт и ты делаешь первый прогон - он будет жаловаться на это.
а depends_on разве как раз не для этого? чтобы вначале создать один ресурс перед тем как его использовать в другом
источник

VT

Victor Tur in terraform_ru
не очень красиво решение - -target при первом прогоне на сеть.
красиво - через terragrunt dependency output и/или data terraform remote state
источник

VT

Victor Tur in terraform_ru
Leonid Shestera
а depends_on разве как раз не для этого? чтобы вначале создать один ресурс перед тем как его использовать в другом
Нет.
источник

LS

Leonid Shestera in terraform_ru
Ок, понял. Пойду продолжу изучать.
Спасибо вам за помощь 🙂
источник

VT

Victor Tur in terraform_ru
Это надо в шапку закреплять:
https://github.com/hashicorp/terraform/issues/4149
источник

VT

Victor Tur in terraform_ru
Leonid Shestera
Ок, понял. Пойду продолжу изучать.
Спасибо вам за помощь 🙂
источник

VT

Victor Tur in terraform_ru
Just went ahead and restructured all my projects. Split them into a bunch of seperated things. Wherever there is a provider that depends on the output of a previous step, I split it.

Have done both makefiles to run them all in order and individual ci projects for each of them chained together in a pipeline depending. It's not that bad, but it does go against the flow of how you assume things should be structured.
@ pbecotte
источник

VT

Victor Tur in terraform_ru
Alexey Remizov
locals {
 regions = length(var.master_zones) > 1 ? [{
   region    = var.master_region
   locations = var.master_zones
 }] : []

 zones = length(var.master_zones) > 1 ? [] : var.master_zones
}

.  .  .

 master {
   version   = var.master_version
   public_ip = var.master_public_ip

   dynamic "zonal" {
     for_each = local.zones

     content {
       zone      = zonal.value["zone"]
       subnet_id = zonal.value["id"]
     }
   }

   dynamic "regional" {
     for_each = local.regions

     content {
       region = regional.value["region"]

       dynamic "location" {
         for_each = regional.value["locations"]

         content {
           zone      = location.value["zone"]
           subnet_id = location.value["id"]
         }
       }
     }
   }
 }
и еще раз UP - ответ на вторую половину вопроса 👌
источник

LS

Leonid Shestera in terraform_ru
А можно тогда еще вопрос, стоит ли использовать terragrunt для небольшой инфрастуктуры или ванильного terraforma хватит?
источник

VT

Victor Tur in terraform_ru
Leonid Shestera
А можно тогда еще вопрос, стоит ли использовать terragrunt для небольшой инфрастуктуры или ванильного terraforma хватит?
для небольшой наверное пойдет terraform с каким-нибудь Makefile'ом или враппером простеньким
источник