错误:不支持的属性。此对象没有名为“nsg_name”的属性
Posted
技术标签:
【中文标题】错误:不支持的属性。此对象没有名为“nsg_name”的属性【英文标题】:Error: Unsupported attribute. This object does not have an attribute named "nsg_name" 【发布时间】:2021-05-07 04:57:35 【问题描述】:NSG 创建得很好,所以我在 env/dev 和 modules 文件夹中创建并输入 nsg 规则的所有配置 我运行 terraform plan,这是我得到的错误:
错误:不支持的属性
在 nsg_rules.tf 第 6 行,模块“nsgrules_app1”中:
6:nsg_name = module.nsg_app1.nsg_name
此对象没有名为“nsg_name”的属性。
我知道我的代码不正确,我只是不确定如何使用映射变量编写 nsg_rule 模块,然后将其附加到我的另一个模块中的 NSG。任何帮助将不胜感激:)
我的 terraform 相关文件夹结构是:
dev
|_ backend.tf
|_ outputs.tf
|_ provider.tf
|_ resource_groups.tf
|_ nsg.tf
|_ nsg_rules.tf
|_ storage.tf
|_ subnets.tf
|_ variables.tf
|_ vnets.tf
|_ vms_lin.tf
modules
|_ nsg
|_ outputs.tf
|_ variables.tf
|_ main.tf
|_ nsg_rules
|_ outputs.tf
|_ variables.tf
|_ main.tf
|_ resource_group
|_ outputs.tf
|_ variables.tf
|_ main.tf
|_ storage
|_ outputs.tf
|_ variables.tf
|_ main.tf
|_ network
|_ vnet
|_ outputs.tf
|_ variables.tf
|_ main.tf
|_ subnet
|_ outputs.tf
|_ variables.tf
|_ main.tf
开发/nsg.tf
module "nsg_app1"
source = "git::ssh://git@ssh.dev.azure.com/v3/myorg/my_code/terraform_modules//nsg"
nsg_name = "nsg-ansible"
rg_name = module.rg_app1.rg_name
location = module.rg_app1.rg_location
dev/nsg_rules.tf
module "nsgrules_app1"
source = "git::ssh://git@ssh.dev.azure.com/v3/myorg/my_code/terraform_modules//nsg_rule"
rg_name = module.rg_app1.rg_name
nsg_name = module.nsg_app1.nsg_name
# rules_map = var.rules_map
# rules_map =
# http_inbound = priority = 150, direction = "Inbound", access = "Allow", protocol = "TCP", destination_port_range = "80" ,
# https_inbound = priority = 151, direction = "Inbound", access = "Allow", protocol = "TCP", destination_port_range = "443"
#
模块/nsg/main.tf
resource "azurerm_network_security_group" "nsg"
name = var.nsg_name
location = var.location
resource_group_name = var.rg_name
模块/nsg/variables.tf
variable "rg_name"
description = "name of resource group"
variable "location"
description = "location of resource group"
variable "nsg_name"
description = "name of nsg group"
模块/nsg_rule/main.tf
resource "azurerm_network_security_rule" "nsg-rule-rdp"
name = "RDP"
priority = "105"
direction = "Inbound"
access = "Allow"
protocol = "TCP"
source_port_range = "*"
destination_port_range = "3389"
source_address_prefixes = var.default_ip_whitelist
destination_address_prefix = "*"
resource_group_name = var.rg_name
network_security_group_name = var.nsg_name
模块/nsg_rule/variables.tf
variable "rg_name"
description = "name of resource group"
variable "default_ip_whitelist"
description = "List of IPs to whitelist on all RDP | SSH enabled NSG rules."
default = []
variable "nsg_name"
description = "name of nsg group"
variable "rules_map"
type = map
default =
rule1 = priority = 105, direction = "Inbound", access = "Allow", protocol = "TCP", source_port_range = "*", destination_port_range = "*",source_address_prefix = "*", destination_address_prefix = "*" ,
rule2 = priority = 105, direction = "Outbound", access = "Deny", protocol = "TCP", source_port_range = "*", destination_port_range = "*",source_address_prefix = "*", destination_address_prefix = "*"
【问题讨论】:
【参考方案1】:您正在使用的模块module.nsg_app1
没有nsg_name
属性。这意味着它不输出这样的变量。
您要么必须修改 module.nsg_app1
模块以输出此类变量,要么在module.nsgrules_app1
中硬编码名称:
module "nsgrules_app1"
source = "git::ssh://git@ssh.dev.azure.com/v3/myorg/my_code/terraform_modules//nsg_rule"
rg_name = module.rg_app1.rg_name
nsg_name = "nsg-ansible"
# rules_map = var.rules_map
# rules_map =
# http_inbound = priority = 150, direction = "Inbound", access = "Allow", protocol = "TCP", destination_port_range = "80" ,
# https_inbound = priority = 151, direction = "Inbound", access = "Allow", protocol = "TCP", destination_port_range = "443"
#
【讨论】:
非常感谢 Marcin,当我对它的工作值进行硬编码时。输出对我来说仍然有点混乱。想尽可能地自动化这个,你能帮我写出来吗:) @Cyborganizer 您可以创建一个变量nsg_name
并在需要时使用var.nsg_name
。
感谢哥们对值进行硬编码,稍后将创建变量
@Cyborganizer 没问题。如果答案有帮助,我们将不胜感激。以上是关于错误:不支持的属性。此对象没有名为“nsg_name”的属性的主要内容,如果未能解决你的问题,请参考以下文章
收件箱中 Outlook 对象的 ReceivedTime 生成错误“对象不支持此属性或方法”