From efe7669b58b85c34da6496185021194b4408a07e Mon Sep 17 00:00:00 2001 From: Troy McConaghy Date: Fri, 10 Feb 2017 18:01:19 +0100 Subject: [PATCH] working Terraform configuration for a VM w/ data disk --- .../terraform/network-interface1.tf | 12 ++++++ .../terraform/network-security-group1.tf | 20 +++++++++ azure/starter-vm/terraform/public_ip1.tf | 10 +++++ azure/starter-vm/terraform/resource-group.tf | 7 ++-- azure/starter-vm/terraform/storage-account.tf | 6 +++ .../terraform/storage-container1.tf | 6 +++ azure/starter-vm/terraform/subnet1.tf | 7 ++++ azure/starter-vm/terraform/variables.tf | 9 +++- .../starter-vm/terraform/virtual-machine1.tf | 41 +++++++++++++++++++ .../starter-vm/terraform/virtual-network1.tf | 6 +++ 10 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 azure/starter-vm/terraform/network-interface1.tf create mode 100644 azure/starter-vm/terraform/network-security-group1.tf create mode 100644 azure/starter-vm/terraform/public_ip1.tf create mode 100644 azure/starter-vm/terraform/storage-account.tf create mode 100644 azure/starter-vm/terraform/storage-container1.tf create mode 100644 azure/starter-vm/terraform/subnet1.tf create mode 100644 azure/starter-vm/terraform/virtual-machine1.tf create mode 100644 azure/starter-vm/terraform/virtual-network1.tf diff --git a/azure/starter-vm/terraform/network-interface1.tf b/azure/starter-vm/terraform/network-interface1.tf new file mode 100644 index 00000000..107540c9 --- /dev/null +++ b/azure/starter-vm/terraform/network-interface1.tf @@ -0,0 +1,12 @@ +resource "azurerm_network_interface" "bdb_node_NIC_1" { + name = "bdb_node_NIC_1" + location = "${var.location}" + resource_group_name = "${azurerm_resource_group.bdb_node_RG.name}" + + ip_configuration { + name = "bdb_node_IP_config_1" + subnet_id = "${azurerm_subnet.bdb_node_subnet_1.id}" + private_ip_address_allocation = "dynamic" + public_ip_address_id = "${azurerm_public_ip.bdb_node_IP_1.id}" + } +} diff --git a/azure/starter-vm/terraform/network-security-group1.tf b/azure/starter-vm/terraform/network-security-group1.tf new file mode 100644 index 00000000..9675a0a9 --- /dev/null +++ b/azure/starter-vm/terraform/network-security-group1.tf @@ -0,0 +1,20 @@ +# Azure Network Security Group docs: +# https://www.terraform.io/docs/providers/azurerm/r/network_security_group.html +# https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-nsg +resource "azurerm_network_security_group" "bdb_node_NSG_1" { + name = "bdb_node_NSG_1" + location = "${var.location}" + resource_group_name = "${azurerm_resource_group.bdb_node_RG.name}" + + security_rule { + name = "ssh" + priority = 100 + direction = "Inbound" + access = "Allow" + protocol = "Tcp" # Tcp, Udp, or * for both + source_port_range = "*" + destination_port_range = "22" + source_address_prefix = "*" + destination_address_prefix = "*" + } +} diff --git a/azure/starter-vm/terraform/public_ip1.tf b/azure/starter-vm/terraform/public_ip1.tf new file mode 100644 index 00000000..0dd2defa --- /dev/null +++ b/azure/starter-vm/terraform/public_ip1.tf @@ -0,0 +1,10 @@ +resource "azurerm_public_ip" "bdb_node_IP_1" { + name = "bdb_node_IP_1" + location = "${var.location}" + resource_group_name = "${azurerm_resource_group.bdb_node_RG.name}" + public_ip_address_allocation = "static" +} + +output "bdb_node_IP_1" { + value = "${azurerm_public_ip.bdb_node_IP_1.ip_address}" +} diff --git a/azure/starter-vm/terraform/resource-group.tf b/azure/starter-vm/terraform/resource-group.tf index e84ff151..9528300b 100644 --- a/azure/starter-vm/terraform/resource-group.tf +++ b/azure/starter-vm/terraform/resource-group.tf @@ -1,5 +1,4 @@ -# Create a resource group -resource "azurerm_resource_group" "bdbNodeRG" { - name = "bdbNodeRG" +resource "azurerm_resource_group" "bdb_node_RG" { + name = "bdb_node_RG" location = "${var.location}" -} \ No newline at end of file +} diff --git a/azure/starter-vm/terraform/storage-account.tf b/azure/starter-vm/terraform/storage-account.tf new file mode 100644 index 00000000..883a7c1e --- /dev/null +++ b/azure/starter-vm/terraform/storage-account.tf @@ -0,0 +1,6 @@ +resource "azurerm_storage_account" "bdb_node_SA" { + name = "bdbnodestorageaccount" + location = "${var.location}" + resource_group_name = "${azurerm_resource_group.bdb_node_RG.name}" + account_type = "Standard_LRS" +} diff --git a/azure/starter-vm/terraform/storage-container1.tf b/azure/starter-vm/terraform/storage-container1.tf new file mode 100644 index 00000000..7236ab12 --- /dev/null +++ b/azure/starter-vm/terraform/storage-container1.tf @@ -0,0 +1,6 @@ +resource "azurerm_storage_container" "bdb_node_SC_1" { + name = "bdbnodestoragecontainer1" + resource_group_name = "${azurerm_resource_group.bdb_node_RG.name}" + storage_account_name = "${azurerm_storage_account.bdb_node_SA.name}" + container_access_type = "private" +} diff --git a/azure/starter-vm/terraform/subnet1.tf b/azure/starter-vm/terraform/subnet1.tf new file mode 100644 index 00000000..13cd3c85 --- /dev/null +++ b/azure/starter-vm/terraform/subnet1.tf @@ -0,0 +1,7 @@ +resource "azurerm_subnet" "bdb_node_subnet_1" { + name = "bdb_node_subnet_1" + resource_group_name = "${azurerm_resource_group.bdb_node_RG.name}" + virtual_network_name = "${azurerm_virtual_network.bdb_node_VN_1.name}" + address_prefix = "10.0.2.0/24" + network_security_group_id = "${azurerm_network_security_group.bdb_node_NSG_1.id}" +} diff --git a/azure/starter-vm/terraform/variables.tf b/azure/starter-vm/terraform/variables.tf index 449deaf1..9cecbcd8 100644 --- a/azure/starter-vm/terraform/variables.tf +++ b/azure/starter-vm/terraform/variables.tf @@ -1,7 +1,14 @@ # Use this file for Terraform variables that: # 1) you don't mind sharing with the world on GitHub (if default provided) or # 2) you want Terraform to ask the user for at runtime (if no default provided) -# Secret variables should be put in secret.tfvars or similar. + +# Secret variables should be put in secret.tfvars with the following contents: +# subscription_id = "..." +# client_id = "..." +# client_secret = "..." +# tenant_id = "..." +# The secret.tfvars file will be read if you use: +# $ terraform -var-file="secret.tfvars" variable "location" { default = "westeurope" diff --git a/azure/starter-vm/terraform/virtual-machine1.tf b/azure/starter-vm/terraform/virtual-machine1.tf new file mode 100644 index 00000000..196031e0 --- /dev/null +++ b/azure/starter-vm/terraform/virtual-machine1.tf @@ -0,0 +1,41 @@ +variable "vm1_admin_password" {} + +resource "azurerm_virtual_machine" "bdb_node_VM_1" { + name = "bdb_node_VM_1" + location = "${var.location}" + resource_group_name = "${azurerm_resource_group.bdb_node_RG.name}" + network_interface_ids = ["${azurerm_network_interface.bdb_node_NIC_1.id}"] + vm_size = "Standard_A2_v2" + + storage_image_reference { + publisher = "Canonical" + offer = "UbuntuServer" + sku = "16.04-LTS" + version = "latest" + } + + storage_os_disk { + name = "vm1osdisk1" + vhd_uri = "${azurerm_storage_account.bdb_node_SA.primary_blob_endpoint}${azurerm_storage_container.bdb_node_SC_1.name}/vm1osdisk1.vhd" + caching = "ReadWrite" + create_option = "FromImage" + } + + storage_data_disk { + name = "vm1datadisk1" + vhd_uri = "${azurerm_storage_account.bdb_node_SA.primary_blob_endpoint}${azurerm_storage_container.bdb_node_SC_1.name}/vm1datadisk1.vhd" + disk_size_gb = "30" + create_option = "empty" + lun = 0 + } + + os_profile { + computer_name = "vm1" + admin_username = "vm1admin" + admin_password = "${var.vm1_admin_password}" + } + + os_profile_linux_config { + disable_password_authentication = false + } +} diff --git a/azure/starter-vm/terraform/virtual-network1.tf b/azure/starter-vm/terraform/virtual-network1.tf new file mode 100644 index 00000000..51594887 --- /dev/null +++ b/azure/starter-vm/terraform/virtual-network1.tf @@ -0,0 +1,6 @@ +resource "azurerm_virtual_network" "bdb_node_VN_1" { + name = "bdb_node_VN_1" + location = "${var.location}" + resource_group_name = "${azurerm_resource_group.bdb_node_RG.name}" + address_space = ["10.0.0.0/16"] +}