【问题标题】:Terraform reports 'No module called "name of the module" is declared' in "root" moduleTerraform 在“根”模块中报告“未声明名为“模块名称”的模块
【发布时间】:2020-03-26 16:10:46
【问题描述】:

我已经进行了探索,我想坚持自定义模块概念,而不是使用 Azure 公共模块注册表。

源码位置在这里

https://github.com/ameyaagashe/help_me_cross_2

我使用以下参数在命令行上运行 terraform:

terraform plan -var "resource_group_name=nxt-grp-prd-manage-rgp-au-se" -var "virtual_network_name=virtual_network_1" -var "sql_subnet_name=subnet_1" -var "app_subnet_name=subnet_2" -var "application_nsg=test_nsg" -var "count_vm=2" -var "sql_host_basename=sqlvms" -var "app_host_basename=appvms" -var "storage_account_suffix=sta" -var "virtual_machine_size=Standard_B1ms" -var "virtual_machine_image_publisher=MicrosoftWindowsServer" -var "virtual_machine_image_offer=WindowsServer" -var "virtual_machine_image_sku=2012-R2-Datacenter" -var "virtual_machine_image_version=latest" -var "username=devopsadmin" -var "password=Angular12#$%"

但是,我收到如下错误:

Error: Reference to undeclared module

  on ../../modules/compute/main.tf line 25, in resource "azurerm_virtual_machine" "tf-vm":
  25:   location                         = module.resourcegroup.external_rg_location

No module call named "resourcegroup" is declared in sql_vms.


Error: Reference to undeclared module

  on ../../modules/compute/main.tf line 26, in resource "azurerm_virtual_machine" "tf-vm":
  26:   resource_group_name              = module.resourcegroup.external_rg_name

No module call named "resourcegroup" is declared in sql_vms.


Error: Reference to undeclared module

  on ../../modules/compute/main.tf line 27, in resource "azurerm_virtual_machine" "tf-vm":
  27:   network_interface_ids            = [element(module.network.network_interface_ids,count.index)]

No module call named "network" is declared in sql_vms.


Error: Reference to undeclared module

  on ../../modules/network/data.tf line 5, in data "azurerm_virtual_network" "tf-vn":
   5:   resource_group_name  = module.resource_groups.external_rg_name

No module call named "resource_groups" is declared in networking.


Error: Reference to undeclared module

  on ../../modules/nsg/main.tf line 3, in resource "azurerm_network_security_group" "tf-nsg":
   3:   location            = module.resourcegroup.external_rg_location

No module call named "resourcegroup" is declared in network_security_group.


Error: Reference to undeclared module

  on ../../modules/nsg/main.tf line 4, in resource "azurerm_network_security_group" "tf-nsg":
   4:   resource_group_name = module.resourcegroup.external_rg_name

No module call named "resourcegroup" is declared in network_security_group.


Error: Reference to undeclared input variable

  on ../../modules/resourcegroup/data.tf line 2, in data "azurerm_resource_group" "tf-rg-external":
   2:   name = var.rg_name

An input variable with the name "rg_name" has not been declared. This variable
can be declared with a variable "rg_name" {} block.

无法理解根本问题...

我在自己的 terraform 配置文件中定义所有模块并在根模块中调用它们?

衷心感谢您的帮助。

【问题讨论】:

    标签: azure-virtual-machine azure-virtual-network terraform-provider-azure azure-security


    【解决方案1】:

    从长远来看,单独解决每个问题可能对您没有帮助,因此我将提供一个一般性的错误认识,并分享参考资料以帮助未来的 Terraform 配置。

    module.sql_vms 内部引用 module.resource_group 输出将不起作用,因为 Terraform 模块组合不允许兄弟模块直接相互引用输出。

    文档中有一段解释它:

    输出只能通过根模块从一个模块传递到另一个模块。

    这是 Terraform 文档中的一个示例:

    module "network" {
      source = "./modules/aws-network"
    
      base_cidr_block = "10.0.0.0/8"
    }
    
    module "consul_cluster" {
      source = "./modules/aws-consul-cluster"
    
      vpc_id     = module.network.vpc_id
      subnet_ids = module.network.subnet_ids
    }
    

    一旦解决了这个问题,下一个问题就是模块没有被正确的名称引用。根据 git repo 中的main.tf,已经声明了 4 个模块:

    module.sql_vms
    module.resource_group
    module.networking
    module.network_security_group
    

    由于模块被声明为resource_group,因此应该引用它而不是resourcegroup

    最后,应该在modules/resourcegroup/ 目录中声明一个名为rg_name 的变量。请参阅以下内容了解变量声明:

    这可能不是所有问题,但它是一个开始。如果可能,我强烈建议您阅读有关创建模块的 Terraform 文档。它们可以在这里找到:

    【讨论】:

    • 感谢百万伴侣。现在明白了。
    • 然后是模块部署顺序。
    【解决方案2】:

    只需注意检查文件中使用的模块和元素的名称/拼写。如果您认为一切都已正确完成,则不得发生此错误,可能存在 terraform 文件中的拼写错误。

    【讨论】:

    • 我遇到了类似的问题,这是由于拼写错误
    猜你喜欢
    • 1970-01-01
    • 2020-06-30
    • 2016-09-06
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多