title: Terraform Azure run bash script on VM
body: <p>I'm trying to run a bash script on an Azure VM after deploying it with Terraform. I've tried different approaches but none of them have worked. With "custom_data", I assumed that the file will be uploaded and executed, however I'm not even seeing the file inside the VM. </p>
  
  <p>I've also looked at "azurerm_virtual_machine_extension", but this does not give me the option to upload the file, only to execute commands or download from remote location (can't use fileUris due to requirements): </p>
  
  <pre><code>resource "azurerm_virtual_machine_extension" "test" {
    name                 = "hostname"
    location             = "${azurerm_resource_group.test.location}"
    resource_group_name  = "${azurerm_resource_group.test.name}"
    virtual_machine_name = "${azurerm_virtual_machine.test.name}"
    publisher            = "Microsoft.Azure.Extensions"
    type                 = "CustomScript"
    type_handler_version = "2.0"
  
    settings = &lt;&lt;SETTINGS
      {
          "commandToExecute": "sh my_script.sh"
      }
  SETTINGS
  
    tags = {
      environment = "Production"
    }
  }
  </code></pre>
  
  <pre><code>resource "azurerm_virtual_machine" "middleware_vm" {
      name                  = "${var.middleware_vm}"
      location              = "${var.location}"
      resource_group_name   = "${azurerm_resource_group.middleware.name}"
      network_interface_ids = ["${azurerm_network_interface.middleware.id}"]
      vm_size               = "Standard_DS4_v2"        
  
      storage_os_disk {
          name              = "centos_os_disk"
          caching           = "ReadWrite"
          create_option     = "FromImage"
          managed_disk_type = "Premium_LRS"
      }
  
      storage_data_disk {
          name                 = "managed_backup_disk"
          create_option        = "Empty"
          caching              = "ReadWrite"
          disk_size_gb         = "256"  
          managed_disk_type    = "Premium_LRS"
          lun                  = 0
      }
  
      storage_image_reference {
          publisher = "OpenLogic"
          offer     = "CentOS"
          sku       = "7.5"
          version   = "latest"
      }
  
      os_profile {
          computer_name  = "${var.middleware_vm}"
          admin_username = "middlewareadmin"
          custom_data    = "${file("scripts/middleware_disk.sh")}"
    }
  </code></pre>