Hi folks
I'm new in terraform and i would like a help with a issue.
I'm trying to make a deploy a linux vm(Ubuntu 18.04 LTS) on Azure and after vm its created, I would like to exec some commands, like add a repository install ansible client... but no happens.
My terraform code
-----------------------------------------
variable "admin_username" {
default = "some_user"
}
provider "azurerm" {
subscription_id = "xxxxxxxxxxxx"
tenant_id = "xxxxxxxxxxxx"
}
# Create a resource group if it doesn’t exist
resource "azurerm_resource_group" "myterraformgroup" {
name = "myResourceGroup"
location = "eastus"
}
# Create virtual network
resource "azurerm_virtual_network" "myterraformnetwork" {
name = "myVnet"
address_space = ["10.0.0.0/16"]
location = "eastus"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
}
# Create subnet
resource "azurerm_subnet" "myterraformsubnet" {
name = "mySubnet"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
virtual_network_name = "${azurerm_virtual_network.myterraformnetwork.name}"
address_prefix = "10.0.1.0/24"
}
# Create public IPs
resource "azurerm_public_ip" "publicip" {
name = "myPublicIP"
location = "eastus"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
allocation_method = "Dynamic"
}
# Create Network Security Group and rule
resource "azurerm_network_security_group" "myterraformnsg" {
name = "myNetworkSecurityGroup"
location = "eastus"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
security_rule {
name = "SSH"
priority = 1001
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
# Create network interface
resource "azurerm_network_interface" "myterraformnic" {
name = "myNIC"
location = "eastus"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
network_security_group_id = "${azurerm_network_security_group.myterraformnsg.id}"
ip_configuration {
name = "myNicConfiguration"
subnet_id = "${azurerm_subnet.myterraformsubnet.id}"
private_ip_address_allocation = "Dynamic"
public_ip_address_id = "${azurerm_public_ip.publicip.id}"
}
}
# Generate random text for a unique storage account name
resource "random_id" "randomId" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = "${azurerm_resource_group.myterraformgroup.name}"
}
byte_length = 8
}
# Create storage account for boot diagnostics
resource "azurerm_storage_account" "mystorageaccount" {
name = "diag${random_id.randomId.hex}"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
location = "eastus"
account_tier = "Standard"
account_replication_type = "LRS"
}
# Create virtual machine
resource "azurerm_virtual_machine" "myterraformvm" {
name = "myVM"
location = "eastus"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
network_interface_ids = ["${azurerm_network_interface.myterraformnic.id}"]
vm_size = "Standard_DS1_v2"
storage_os_disk {
name = "myOsDisk"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = "Premium_LRS"
}
storage_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "18.04-LTS"
version = "latest"
}
os_profile {
computer_name = "myvm"
admin_username = "some_user"
}
os_profile_linux_config {
disable_password_authentication = true
ssh_keys {
path = "/home/some_user/.ssh/authorized_keys"
key_data = "ssh-rsa key-xxxxxx"
}
}
provisioner "remote-exec" {
connection {
type = "ssh"
host = "${azurerm_public_ip.publicip.ip_address}"
user = "${var.admin_username}"
}
inline = [
"sudo apt install software-properties-common -y && sudo apt-add-repository ppa:ansible/ansible && sudo apt update && apt install ansible -y"
]
}
boot_diagnostics {
enabled = "true"
storage_uri = "${azurerm_storage_account.mystorageaccount.primary_blob_endpoint}"
}
}
output "ip" {
value = "${azurerm_public_ip.publicip.ip_address}"
}
--------------------------
Output
azurerm_resource_group.myterraformgroup: Creating...
azurerm_resource_group.myterraformgroup: Creation complete after 3s [id=/subscriptions/ff03ad4a-a974-4385-a0ad-2d3c3e3af154/resourceGroups/myResourceGroup]
azurerm_virtual_network.myterraformnetwork: Creating...
azurerm_public_ip.publicip: Creating...
azurerm_public_ip.publicip: Creation complete after 5s [id=/subscriptions/ff03ad4a-a974-4385-a0ad-2d3c3e3af154/resourceGroups/myResourceGroup/providers/Microsoft.Network/publicIPAddresses/myPublicIP]
azurerm_virtual_network.myterraformnetwork: Still creating... [10s elapsed]
azurerm_virtual_network.myterraformnetwork: Creation complete after 15s [id=/subscriptions/ff03ad4a-a974-4385-a0ad-2d3c3e3af154/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet]
azurerm_subnet.myterraformsubnet: Creating...
azurerm_subnet.myterraformsubnet: Creation complete after 2s [id=/subscriptions/ff03ad4a-a974-4385-a0ad-2d3c3e3af154/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet]
azurerm_network_interface.myterraformnic: Creating...
azurerm_network_interface.myterraformnic: Creation complete after 3s [id=/subscriptions/ff03ad4a-a974-4385-a0ad-2d3c3e3af154/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNIC]
azurerm_virtual_machine.myterraformvm: Creating...
azurerm_virtual_machine.myterraformvm: Still creating... [10s elapsed]
azurerm_virtual_machine.myterraformvm: Still creating... [20s elapsed]
azurerm_virtual_machine.myterraformvm: Still creating... [30s elapsed]
azurerm_virtual_machine.myterraformvm: Creation complete after 35s [id=/subscriptions/ff03ad4a-a974-4385-a0ad-2d3c3e3af154/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM]
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
Here I trying get the public_ip but come empty
Outputs:
ip =
All the best
Walber