Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

A managed resource "azurerm_network_interface" has not been declared in module

I’m running a "terraform plan" against my Linux VM and I’m receiving the following error:

│ Error: Reference to undeclared resource
│ 
│   on .terraform/modules/vm-ansiblecontroller/virtual-machine/linux/outputs.tf line 13, in output "nic_id":
│   13:   value = azurerm_network_interface.nic-linux.id
│ 
│ A managed resource "azurerm_network_interface" "nic-linux" has not been declared in module.vm-ansiblecontroller.

I haven’t included any code from my RGs & vNets, as I’m hoping what I have included is enough to solve this.

Any assistance would be appreciated, I just can’t figure it out

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

module "vm-ansiblecontroller" {
  resource_group_name = module.rg-ansiblecontroller.resource_group_name
  location            = local.location
  linux_machine_name  = "linux-test1"
  tags                = var.tags

  nic_id = module.vm-ansiblecontroller.nic_id
  subnet_id = module.subnet-networkcore.subnet_id

  virtual_machine_size = "Standard_D2"

  admin_username       = "jpadmin"
  admin_ssh_public_key = file("~/.ssh/id_rsa.pub")

  source_image_publisher = "Canonical"
  source_image_offer     = "UbuntuServer"
  source_image_sku       = "16.04-LTS"
  source_image_version   = "latest"

  operating_system_disk_cache = "ReadWrite"
  operating_system_disk_type  = "Standard_LRS"

  ip_configuration_name         = "internal"
  private_ip_address_allocation = "Dynamic"

  public_ip_allocation_method = "Static"
  public_ip_sku               = "Standard"

}

modules/virtualmachine/main.tf

    # Linux Virtual Machine
    resource "azurerm_linux_virtual_machine" "vm-linux" {
    
      name                = var.linux_machine_name
      location            = var.location
      resource_group_name = var.resource_group_name
      tags                = var.tags
    
      size                            = var.virtual_machine_size
      admin_username                  = var.admin_username
      disable_password_authentication = true
      # network_interface_ids           = [azurerm_network_interface.nic-linux.id]
      network_interface_ids = var.nic_id
    
      admin_ssh_key {
        username   = var.admin_username
        public_key = var.admin_ssh_public_key
      }
    
      source_image_reference {
    
        publisher = var.source_image_publisher
        offer     = var.source_image_offer
        sku       = var.source_image_sku
        version   = var.source_image_version
      }
    
      os_disk {
        caching              = var.operating_system_disk_cache
        storage_account_type = var.operating_system_disk_type
      }
    }
    
    # Network Interfaces for Linux VM
    
    resource "azurerm_network_interface" "nic-linux" {
      name                = var.linux_machine_name
      location            = var.location
      resource_group_name = var.resource_group_name
      tags                = var.tags
    
      ip_configuration {
        name                          = var.ip_configuration_name
        # subnet_id                     = azurerm_subnet.subnet.id
        subnet_id                     = var.subnet_id
        private_ip_address_allocation = var.private_ip_address_allocation
        public_ip_address_id          = azurerm_public_ip.pip-linux.id
      }
    }
    resource "azurerm_public_ip" "pip-linux" {
      name                = var.linux_machine_name
      location            = var.location
      resource_group_name = var.resource_group_name
      tags                = var.tags
    
      allocation_method = var.public_ip_allocation_method
      sku               = var.public_ip_sku
    }

modules/virtualmachine/variables.tf

# VM Name
variable "linux_machine_name" {
  description = "Linux Virtual Machine Name - If left blank generated from metadata module"
  type        = string
  default     = ""
}

variable "resource_group_name" {
  description = "Resource group name"
  type        = string
}

variable "location" {
  description = "Azure region"
  type        = string
}

variable "tags" {
  description = "tags to be applied to resources"
  type        = map(string)
}

# VM Size
variable "virtual_machine_size" {
  description = "Instance size to be provisioned"
  type        = string
}

variable "admin_username" {
  description = "names to be applied to resources"
  type        = string
}

variable "admin_ssh_public_key" {
  description = "(Linux) Public SSH Key - Generated if left blank"
  type        = string
  default     = ""
  sensitive   = true
}

# Operating System
variable "source_image_publisher" {
  description = "Operating System Publisher"
  type        = string
}

variable "source_image_offer" {
  description = "Operating System Name"
  type        = string
}

variable "source_image_sku" {
  description = "Operating System SKU"
  type        = string
}

variable "source_image_version" {
  description = "Operating System Version"
  type        = string
  default     = "latest"
}

# Operating System Disk
variable "operating_system_disk_cache" {
  description = "Type of caching to use on the OS disk - Options: None, ReadOnly or ReadWrite"
  type        = string
  default     = "ReadWrite"
}

variable "operating_system_disk_type" {
  description = "Type of storage account to use with the OS disk - Options: Standard_LRS, StandardSSD_LRS or Premium_LRS"
  type        = string
  default     = "StandardSSD_LRS"
}

variable "ip_configuration_name" {
  description = "ip configuration name"
  type        = string
  default     = ""
}

# Networking
variable "nic_id" {
  type        = list(string)
  description = "ID of the nic"
}

variable "subnet_id" {
  type        = string
  description = "ID of the subnet"
}

variable "private_ip_address_allocation" {
  type        = string
  description = "Private ip allocation method"
}

variable "public_ip_allocation_method" {
  type        = string
  description = "Public ip allocation method"
}


variable "public_ip_sku" {
  description = "SKU to be used with this public IP - Basic or Standard"
  type        = string
  default     = "Standard"
}

modules/virtualmachine/outputs.tf

output "nic_id" {
  description = "ids of the vm nics provisoned."
  value = azurerm_network_interface.nic-linux.id
}

NEW ERROR:

Error: Invalid value for module argument
│
│   on compute_lin_vm.tf line 10, in module "vm-ansiblecontroller":
│   10:   nic_id = module.vm-ansiblecontroller.nic_id
│
│ The given value is not suitable for child module variable "nic_id" defined at
│ .terraform/modules/vm-ansiblecontroller/virtual-machine/linux/variables.tf:83,1-18: list of string required.

>Solution :

You placed your azurerm_network_interface inside azurerm_linux_virtual_machine. It should be:

resource "azurerm_linux_virtual_machine" "vm-linux" {

  name                = var.linux_machine_name
  location            = var.location
  resource_group_name = var.resource_group_name
  tags                = var.tags

  size                            = var.virtual_machine_size
  admin_username                  = var.admin_username
  disable_password_authentication = true
  # network_interface_ids           = [azurerm_network_interface.nic-linux.id]
  network_interface_ids           = var.nic_id

  admin_ssh_key {
    username   = var.admin_username
    public_key = var.admin_ssh_public_key
  }

  source_image_id = var.source_image_id
  custom_data     = var.custom_data

  source_image_reference {

    publisher = var.source_image_publisher
    offer     = var.source_image_offer
    sku       = var.source_image_sku
    version   = var.source_image_version
  }

  os_disk {
    caching              = var.operating_system_disk_cache
    storage_account_type = var.operating_system_disk_type
  }


  }


    # Network Interfaces for Linux VM

resource "azurerm_network_interface" "nic-linux" {
  name                = var.linux_machine_name
  location            = var.location
  resource_group_name = var.resource_group_name
  tags                = var.tags

  ip_configuration {
    name                          = var.ip_configuration_name
    subnet_id                     = azurerm_subnet.subnet.id
    private_ip_address_allocation = var.private_ip_address_allocation
    public_ip_address_id          = azurerm_public_ip.pip-linux.id
  }

  }
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading