terraform plan 返回错误:不支持的参数

lea*_*ner 10 terraform-provider-azure

我有以下三个文件:main.tf、variables.tf 和 dev.auto.tfvars

main.tf中的片段

module "sql_vms" {
  source                  = "git::git@github.com:xxxxxxxxxxxx/terraform-modules//azure/"
  rg_name                 = var.resource_group_name
  location                = module.resource_group.external_rg_location
  vnet_name               = var.virtual_network_name
  subnet_name             = var.sql_subnet_name
  app_nsg                 = var.application_nsg
  vm_count                = var.count_vm
  base_hostname           = var.sql_host_basename
  sto_acc_suffix          = var.storage_account_suffix
  vm_size                 = var.virtual_machine_size
  vm_publisher            = var.virtual_machine_image_publisher
  vm_offer                = var.virtual_machine_image_offer
  vm_sku                  = var.virtual_machine_image_sku
  vm_img_version          = var.virtual_machine_image_version
  username                = var.username
  password                = var.password
}
Run Code Online (Sandbox Code Playgroud)

来自variables.tf的片段

variable "app_subnet_name" {
  type    = string
}

variable "sql_subnet_name" {
  type    = string
}
Run Code Online (Sandbox Code Playgroud)

来自dev.auto.tfvars的片段

app_subnet_name = "subnet_1"

sql_subnet_name = "subnet_2"

application_nsg = "test_nsg"
Run Code Online (Sandbox Code Playgroud)

但是,我收到如下错误

Error: Unsupported argument

  on main.tf line 7, in module "sql_vms":
   7:   subnet_name    = var.sql_subnet_name

An argument named "subnet_name" is not expected here.


Error: Unsupported argument

  on main.tf line 8, in module "sql_vms":
   8:   app_nsg        = var.application_nsg

An argument named "app_nsg" is not expected here.
Run Code Online (Sandbox Code Playgroud)

我的模块目录结构如下所示

$ ls -R terraform-modules/
terraform-modules/:
aws  azure  gcp

terraform-modules/aws:
alb  ec2-instance-rhel

terraform-modules/aws/alb:

terraform-modules/aws/ec2-instance-rhel:
main.tf

terraform-modules/azure:
compute  resourcegroup  sqlserver

terraform-modules/azure/compute:
main.tf  README.md  variable.tf

terraform-modules/azure/resourcegroup:
data.tf  outputs.tf  variables.tf

terraform-modules/azure/sqlserver:
main.tf  README.md  variables.tf

terraform-modules/gcp:
compute

terraform-modules/gcp/compute:
main.tf
Run Code Online (Sandbox Code Playgroud)

知道这里出了什么问题吗?

Cyc*_*ave 16

如果您开始使用 Terraform,如果您的模块参数引用资源属性而不是变量名称,您将收到错误消息(“此处不需要名为“example”的参数”),请参阅下面的示例:

您想要从模块调用的 Terraform 模块“example_mod.tf”的示例:

variable "sg_name" { }   # Usually in a separate file
variable "sg_desc" { }   # called variables.tf

resource "example_resource" "example_name" {
  name        = var.sg_name
  description = var.sg_desc
...
}
Run Code Online (Sandbox Code Playgroud)

正确方法:

module "my_module" {
  source = "./modules/example_mod.tf"

  sg_name = "whatever"  # NOTE the left hand side "sg_name" is the variable name
  sg_desc = "whatever"    
...
}
Run Code Online (Sandbox Code Playgroud)

错误的方式:(给出错误“此处不需要名为“name”的参数”)

module "my_module" {
  source = "./modules/example_mod.tf"

  name   = "whatever" # WRONG because the left hand side "name" is a resource property
  description = "whatever" # WRONG for the same reason   
...
}
Run Code Online (Sandbox Code Playgroud)


Cha*_* Xu 3

我认为问题在于您没有引用源代码中的确切模块。我看到源代码中有三个模块:

source = "git::git@github.com:xxxxxxxxxxxx/terraform-modules//azure/"
Run Code Online (Sandbox Code Playgroud)

他们是computeresourcegroupsqlserver。但您想将它们加载到一个模块中。所以它找不到模块的相关变量。我也不认为这是加载所有模块的正确方法。我建议您一一加载模块,如下所示:

module "compute" {
  source = "git::git@github.com:xxxxxxxxxxxx/terraform-modules//azure/compute"
  ...
}

module "resourcegroup" {
  source = "git::git@github.com:xxxxxxxxxxxx/terraform-modules//azure/resourcegroup"
  ...
}

module "sqlserver" {
  source = "git::git@github.com:xxxxxxxxxxxx/terraform-modules//azure/sqlserver"
  ...
}
Run Code Online (Sandbox Code Playgroud)