azurerm_virtual_machine

Create a virtual machine.

Example Usage

resource "azurerm_resource_group" "test" {
    name = "acctestrg"
    location = "West US"
}

resource "azurerm_virtual_network" "test" {
    name = "acctvn"
    address_space = ["10.0.0.0/16"]
    location = "West US"
    resource_group_name = "${azurerm_resource_group.test.name}"
}

resource "azurerm_subnet" "test" {
    name = "acctsub"
    resource_group_name = "${azurerm_resource_group.test.name}"
    virtual_network_name = "${azurerm_virtual_network.test.name}"
    address_prefix = "10.0.2.0/24"
}

resource "azurerm_network_interface" "test" {
    name = "acctni"
    location = "West US"
    resource_group_name = "${azurerm_resource_group.test.name}"

    ip_configuration {
        name = "testconfiguration1"
        subnet_id = "${azurerm_subnet.test.id}"
        private_ip_address_allocation = "dynamic"
    }
}

resource "azurerm_storage_account" "test" {
    name = "accsa"
    resource_group_name = "${azurerm_resource_group.test.name}"
    location = "westus"
    account_type = "Standard_LRS"

    tags {
        environment = "staging"
    }
}

resource "azurerm_storage_container" "test" {
    name = "vhds"
    resource_group_name = "${azurerm_resource_group.test.name}"
    storage_account_name = "${azurerm_storage_account.test.name}"
    container_access_type = "private"
}

resource "azurerm_virtual_machine" "test" {
    name = "acctvm"
    location = "West US"
    resource_group_name = "${azurerm_resource_group.test.name}"
    network_interface_ids = ["${azurerm_network_interface.test.id}"]
    vm_size = "Standard_A0"

    storage_image_reference {
        publisher = "Canonical"
        offer = "UbuntuServer"
        sku = "14.04.2-LTS"
        version = "latest"
    }

    storage_os_disk {
        name = "myosdisk1"
        vhd_uri = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/myosdisk1.vhd"
        caching = "ReadWrite"
        create_option = "FromImage"
    }

    os_profile {
        computer_name = "hostname"
        admin_username = "testadmin"
        admin_password = "Password1234!"
    }

    os_profile_linux_config {
        disable_password_authentication = false
    }

    tags {
        environment = "staging"
    }
}

Example Usage with additional Empty DataDisk

resource "azurerm_resource_group" "test" {
  name     = "acctestrg"
  location = "West US"
}

resource "azurerm_virtual_network" "test" {
  name                = "acctvn"
  address_space       = ["10.0.0.0/16"]
  location            = "West US"
  resource_group_name = "${azurerm_resource_group.test.name}"
}

resource "azurerm_subnet" "test" {
  name                 = "acctsub"
  resource_group_name  = "${azurerm_resource_group.test.name}"
  virtual_network_name = "${azurerm_virtual_network.test.name}"
  address_prefix       = "10.0.2.0/24"
}

resource "azurerm_network_interface" "test" {
  name                = "acctni"
  location            = "West US"
  resource_group_name = "${azurerm_resource_group.test.name}"

  ip_configuration {
    name                          = "testconfiguration1"
    subnet_id                     = "${azurerm_subnet.test.id}"
    private_ip_address_allocation = "dynamic"
  }
}

resource "azurerm_storage_account" "test" {
  name                = "accsa"
  resource_group_name = "${azurerm_resource_group.test.name}"
  location            = "westus"
  account_type        = "Standard_LRS"

  tags {
    environment = "staging"
  }
}

resource "azurerm_storage_container" "test" {
  name                  = "vhds"
  resource_group_name   = "${azurerm_resource_group.test.name}"
  storage_account_name  = "${azurerm_storage_account.test.name}"
  container_access_type = "private"
}

resource "azurerm_virtual_machine" "test" {
  name                  = "acctvm"
  location              = "West US"
  resource_group_name   = "${azurerm_resource_group.test.name}"
  network_interface_ids = ["${azurerm_network_interface.test.id}"]
  vm_size               = "Standard_A0"

  storage_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "14.04.2-LTS"
    version   = "latest"
  }

  storage_os_disk {
    name          = "myosdisk1"
    vhd_uri       = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/myosdisk1.vhd"
    caching       = "ReadWrite"
    create_option = "FromImage"
  }

  storage_data_disk {
    name          = "datadisk0"
    vhd_uri       = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/datadisk0.vhd"
    disk_size_gb  = "1023"
    create_option = "empty"
    lun           = 0
  }

  os_profile {
    computer_name  = "hostname"
    admin_username = "testadmin"
    admin_password = "Password1234!"
  }

  os_profile_linux_config {
    disable_password_authentication = false
  }

  tags {
    environment = "staging"
  }
}

Argument Reference

The following arguments are supported:

  • name - (Required) Specifies the name of the virtual machine resource. Changing this forces a new resource to be created.
  • resource_group_name - (Required) The name of the resource group in which to create the virtual machine.
  • location - (Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.
  • plan - (Optional) A plan block as documented below.
  • availability_set_id - (Optional) The Id of the Availablity Set in which to create the virtual machine
  • vm_size - (Required) Specifies the size of the virtual machine.
  • storage_image_reference - (Optional) A Storage Image Reference block as documented below.
  • storage_os_disk - (Required) A Storage OS Disk block as referenced below.
  • delete_os_disk_on_termination - (Optional) Flag to enable deletion of the OS Disk VHD blob when the VM is deleted, defaults to false
  • storage_data_disk - (Optional) A list of Storage Data disk blocks as referenced below.
  • delete_data_disks_on_termination - (Optional) Flag to enable deletion of Storage Disk VHD blobs when the VM is deleted, defaults to false
  • os_profile - (Required) An OS Profile block as documented below.
  • os_profile_windows_config - (Required, when a windows machine) A Windows config block as documented below.
  • os_profile_linux_config - (Required, when a linux machine) A Linux config block as documented below.
  • os_profile_secrets - (Optional) A collection of Secret blocks as documented below.
  • network_interface_ids - (Required) Specifies the list of resource IDs for the network interfaces associated with the virtual machine.
  • tags - (Optional) A mapping of tags to assign to the resource.

For more information on the different example configurations, please check out the azure documentation

Plan supports the following:

  • name - (Required) Specifies the name of the image from the marketplace.
  • publisher - (Optional) Specifies the publisher of the image.
  • product - (Optional) Specifies the product of the image from the marketplace.

storage_image_reference supports the following:

  • publisher - (Required) Specifies the publisher of the image used to create the virtual machine
  • offer - (Required) Specifies the offer of the image used to create the virtual machine.
  • sku - (Required) Specifies the SKU of the image used to create the virtual machine.
  • version - (Optional) Specifies the version of the image used to create the virtual machine.

storage_os_disk supports the following:

  • name - (Required) Specifies the disk name.
  • vhd_uri - (Required) Specifies the vhd uri.
  • create_option - (Required) Specifies how the virtual machine should be created. Possible values are attach and FromImage.
  • caching - (Optional) Specifies the caching requirements.
  • image_uri - (Optional) Specifies the image_uri in the form publisherName:offer:skus:version. image_uri can also specify the VHD uri of a custom VM image to clone. When cloning a custom disk image the os_type documented below becomes required.
  • os_type - (Optional) Specifies the operating system Type, valid values are windows, linux.

storage_data_disk supports the following:

  • name - (Required) Specifies the name of the data disk.
  • vhd_uri - (Required) Specifies the uri of the location in storage where the vhd for the virtual machine should be placed.
  • create_option - (Required) Specifies how the data disk should be created.
  • disk_size_gb - (Required) Specifies the size of the data disk in gigabytes.
  • lun - (Required) Specifies the logical unit number of the data disk.

os_profile supports the following:

  • computer_name - (Required) Specifies the name of the virtual machine.
  • admin_username - (Required) Specifies the name of the administrator account.
  • admin_password - (Required) Specifies the password of the administrator account.
  • custom_data - (Optional) Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes.

~> NOTE: admin_password must be between 6-72 characters long and must satisfy at least 3 of password complexity requirements from the following:

  1. Contains an uppercase character
  2. Contains a lowercase character
  3. Contains a numeric digit
  4. Contains a special character

os_profile_windows_config supports the following:

  • provision_vm_agent - (Optional)
  • enable_automatic_upgrades - (Optional)
  • winrm - (Optional) A collection of WinRM configuration blocks as documented below.
  • additional_unattend_config - (Optional) An Additional Unattended Config block as documented below.

winrm supports the following:

  • protocol - (Required) Specifies the protocol of listener
  • certificate_url - (Optional) Specifies URL of the certificate with which new Virtual Machines is provisioned.

additional_unattend_config supports the following:

  • pass - (Required) Specifies the name of the pass that the content applies to. The only allowable value is oobeSystem.
  • component - (Required) Specifies the name of the component to configure with the added content. The only allowable value is Microsoft-Windows-Shell-Setup.
  • setting_name - (Required) Specifies the name of the setting to which the content applies. Possible values are: FirstLogonCommands and AutoLogon.
  • content - (Optional) Specifies the base-64 encoded XML formatted content that is added to the unattend.xml file for the specified path and component.

os_profile_linux_config supports the following:

  • disable_password_authentication - (Required) Specifies whether password authentication should be disabled.
  • ssh_keys - (Optional) Specifies a collection of path and key_data to be placed on the virtual machine.

~> Note: Please note that the only allowed path is /home/<username>/.ssh/authorized_keys due to a limitation of Azure_

os_profile_secrets supports the following:

  • source_vault_id - (Required) Specifies the key vault to use.
  • vault_certificates - (Required, on windows machines) A collection of Vault Certificates as documented below

vault_certificates support the following:

  • certificate_url - (Required) It is the Base64 encoding of a JSON Object that which is encoded in UTF-8 of which the contents need to be data, dataType and password.
  • certificate_store - (Required, on windows machines) Specifies the certificate store on the Virtual Machine where the certificate should be added to.

Attributes Reference

The following attributes are exported:

  • id - The virtual machine ID.