Я хочу развернуть свои модули terraform в 3 этапа из-за зависимостей. Я не хочу определять все зависимости в файлах .hcl terragrunt.
Чтобы добиться этого, я пересматриваю структуру каталогов. Во-первых, все было в одном каталоге (т. е. tree /infra-integratiehub/environments/uva-test
). Теперь я добавил такой подкаталог:
tree /infra-integratiehub/environments/uva-test/basis
├── appconfiguration
│ └── terragrunt.hcl
├── appinsights
│ └── terragrunt.hcl
├── identities
│ └── terragrunt.hcl
├── keyvault
│ └── terragrunt.hcl
├── loganalytics
│ └── terragrunt.hcl
├── networksecuritygroup
│ └── terragrunt.hcl
├── public-ip-addresses
│ └── terragrunt.hcl
├── resourcegroup
│ └── terragrunt.hcl
├── storageaccounts
│ └── terragrunt.hcl
└── subnets-azcli
└── terragrunt.hcl
Эти файлы относятся к файлам hcl с конфигурацией terragrunt, которые находятся по этому пути: /infra-integratiehub/environments/_env
Мои модули существуют в /infra-integratiehub/modules
.
Вот дерево для дальнейшего пояснения:
/infra-integratiehub
├── environments
│ ├── _env (this has the terragrunt config files)
│ ├── terragrunt.hcl
│ └── uva-test (/basis is the dir in which terragrunt -run-all is executed. With tree shown above)
├── modules (all the tf modules).
Когда я запускаю план terragrunt -run-all, он пытается загрузить необходимые модули. Путь должен быть /infra-integratiehub/modules/{modulename}
.
Вместо этого это: /infra-integratiehub/environments/uva-test/modules
Это (один из) содержимого файлов конфигурации hcl:
terraform {
source = "../../modules/appconfiguration"
}
locals {
env_vars = read_terragrunt_config(find_in_parent_folders("env.hcl"))
}
Это ошибка:
ERRO[0000] Module /infra-integratiehub/environments/uva-test/basis/appconfiguration has finished with an error: downloading source url file:///infra-integratiehub/environments/uva-test/modules/appconfiguration
1 error occurred:
* stat /infra-integratiehub/environments/uva-test/modules/appconfiguration: no such file or directory
prefix=[/infra-integratiehub/environments/uva-test/basis/appconfiguration]
Почему путь к модулям формируется именно так?
Когда я использую ссылку на жесткий путь, все работает нормально. Но я не хочу этого делать, потому что это должно быть динамично, поскольку выполняется в конвейере (в конце концов).
Происхождение проблемы, скорее всего, связано с использованием get_parent_terragrunt_dir
. Я считаю, что террагрунт использует это необъяснимо.
Я исправил (изменил), чтобы использовать следующее:
source =find_in_parent_folders("modules/{modulename}")
Это ищет комбинации папок и подпапок во всех загруженных файлах и добивается цели.
Похоже, что причина проблемы кроется в террагрунте, использующем
get_parent_terragrunt_dir
, и ценность этого -/infra-integratiehub/environments/uva-test/basis
. Вероятно, он использует этот путь, потому что папка /basis, из которой выполняется команда terragrunt run-all. Хотя в исходной настройке все прошло без проблем. Я только что создал дополнительную подпапку.