Мне удалось перемещать оповещения SQL между именами ресурсов в моем терраформе, например:
moved {
from = module.myproj_sqldbs.azurerm_monitor_metric_alert.alert_storage_percentage_exceeds_80["mydb"]
to = azurerm_monitor_metric_alert.alert_storage_percentage_exceeds_80
}
Вышеупомянутое приводит к «замене» при запуске terraform plan
Однако эквивалентный шаг для моей базы данных SQL:
moved {
from = module.myproj_sqldbs.azurerm_mssql_database.sql_database["mydb"]
to = module.sqldb.azurerm_mssql_database.sql_database
}
Выдает следующую ошибку:
╷
│ Error: Unsupported `moved` across resource types
│
│ on imports.tf line 10:
│ 10: moved {
│
│ The provider "terraformregistry.mycompany.com/hashicorp/azurerm" does not support moved operations across resource types and providers.
╵
Я думал, что, возможно, они относятся к ним как к разным ресурсам, типам, но я не думаю, что это так. Т.е. Без этого plan
означает следующее:
# module.sqldb.azurerm_mssql_database.sql_database will be created
......
# module.myproj_sqldbs.azurerm_mssql_database.sql_database["mydb"] will be destroyed
Я также заметил, что он опирается на реестр mycompany. Может ли это быть вещью?
Вы на высоте! Я перехожу от центрального ресурса, предоставляемого террформой, к абстрактному ресурсу нашего собственного провайдера. Если вы предпочитаете добавить это в качестве ответа, я буду рад проголосовать за него и принять.
Воспроизведение всего решения в ожидаемой конфигурации может оказаться затруднительным. Вам было бы удобно получить более поясняющий ответ, а не воспроизведенный? и опубликуйте то же, что и решение @jamesWiseman
@ВинайБ. Спасибо. Думаю, я просто говорил, что опубликуйте свой первый комментарий в качестве ответа, и я бы проголосовал за него и принял. Я изменил вопрос, чтобы он имел больше смысла.
Блок Terraform
move
для перемещения базы данных SQL Azure на другое имя ресурса.
В общем, перемещение используется для перемещения ресурса внутри конфигурации с одного ресурса на другой. Однако этот блок имеет некоторые ограничения, особенно при работе с индивидуальными поставщиками или реестрами.
В этом случае операция перемещения между двумя базами данных SQL обрабатывает разные ресурсы в types
и providers
. Это связано с использованием собственного домена.
файловая структура выглядит примерно так
├── main.tf
├── variables.tf
├── modules/
│ ├── sqldb/
│ │ ├── main.tf
│ │ ├── variables.tf
│ ├── myproj_sqldbs/
│ │ ├── main.tf
│ │ ├── variables.tf
Ссылаться:
https://developer.hashicorp.com/terraform/language/moved
https://developer.hashicorp.com/terraform/language/modules/develop/refactoring
https://developer.hashicorp.com/terraform/cli/import
azurerm_monitor_metric_alert | Ресурсы | хашикорп/азурерм | Терраформировать | Реестр Терраформ
иногда различия в том, как ресурсы управляются этим пользовательским поставщиком, также могут привести к тому, что Terraform будет по-разному обращаться с ресурсами, что может быть проблемой, поскольку вы используете собственный поставщик согласно описанию ошибки @JamesWiseman.