application-workloads/jenkins/jenkins-cicd-vmss/scripts/terraform/vmss.tf (181 lines of code) (raw):

resource "azurerm_resource_group" "vmss" { name = "${var.resource_group_name}" location = "${var.location}" tags { environment = "codelab" } } resource "azurerm_virtual_network" "vmss" { name = "vmss-vnet" address_space = ["10.0.0.0/16"] location = "${var.location}" resource_group_name = "${azurerm_resource_group.vmss.name}" tags { environment = "codelab" } } resource "azurerm_subnet" "vmss" { name = "vmss-subnet" resource_group_name = "${azurerm_resource_group.vmss.name}" virtual_network_name = "${azurerm_virtual_network.vmss.name}" address_prefix = "10.0.2.0/24" } resource "azurerm_public_ip" "vmss" { name = "vmss-public-ip" location = "${var.location}" resource_group_name = "${azurerm_resource_group.vmss.name}" public_ip_address_allocation = "static" domain_name_label = "${lower(var.dns_name)}" tags { environment = "codelab" } } resource "azurerm_lb" "vmss" { name = "vmss-lb" location = "${var.location}" resource_group_name = "${azurerm_resource_group.vmss.name}" frontend_ip_configuration { name = "PublicIPAddress" public_ip_address_id = "${azurerm_public_ip.vmss.id}" } tags { environment = "codelab" } } resource "azurerm_lb_backend_address_pool" "bpepool" { resource_group_name = "${azurerm_resource_group.vmss.name}" loadbalancer_id = "${azurerm_lb.vmss.id}" name = "BackEndAddressPool" } resource "azurerm_lb_probe" "vmss" { resource_group_name = "${azurerm_resource_group.vmss.name}" loadbalancer_id = "${azurerm_lb.vmss.id}" name = "ssh-running-probe" port = "${var.application_port}" } resource "azurerm_lb_rule" "lbnatrule" { resource_group_name = "${azurerm_resource_group.vmss.name}" loadbalancer_id = "${azurerm_lb.vmss.id}" name = "http" protocol = "Tcp" frontend_port = "${var.application_port}" backend_port = "${var.application_port}" backend_address_pool_id = "${azurerm_lb_backend_address_pool.bpepool.id}" frontend_ip_configuration_name = "PublicIPAddress" probe_id = "${azurerm_lb_probe.vmss.id}" } data "azurerm_resource_group" "image" { name = "${var.image_resource_group_name}" } data "azurerm_image" "image" { name = "${var.image_name}" resource_group_name = "${data.azurerm_resource_group.image.name}" } resource "azurerm_virtual_machine_scale_set" "vmss" { name = "vmscaleset" location = "${var.location}" resource_group_name = "${azurerm_resource_group.vmss.name}" upgrade_policy_mode = "Manual" sku { name = "Standard_DS1_v2" tier = "Standard" capacity = 2 } storage_profile_image_reference { id="${data.azurerm_image.image.id}" } storage_profile_os_disk { name = "" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } storage_profile_data_disk { lun = 0 caching = "ReadWrite" create_option = "Empty" disk_size_gb = 10 } os_profile { computer_name_prefix = "vmlab" admin_username = "${var.admin_username}" admin_password = "${var.admin_password}" } os_profile_linux_config { disable_password_authentication = false ssh_keys { path = "/home/${var.admin_username}/.ssh/authorized_keys" key_data = "${file("~/.ssh/id_rsa.pub")}" } } network_profile { name = "terraformnetworkprofile" primary = true ip_configuration { name = "IPConfiguration" subnet_id = "${azurerm_subnet.vmss.id}" load_balancer_backend_address_pool_ids = ["${azurerm_lb_backend_address_pool.bpepool.id}"] } } tags { environment = "codelab" } } resource "azurerm_public_ip" "jumpbox" { name = "jumpbox-public-ip" location = "${var.location}" resource_group_name = "${azurerm_resource_group.vmss.name}" public_ip_address_allocation = "static" domain_name_label = "${lower(var.dns_name)}-ssh" tags { environment = "codelab" } } resource "azurerm_network_interface" "jumpbox" { name = "jumpbox-nic" location = "${var.location}" resource_group_name = "${azurerm_resource_group.vmss.name}" ip_configuration { name = "IPConfiguration" subnet_id = "${azurerm_subnet.vmss.id}" private_ip_address_allocation = "dynamic" public_ip_address_id = "${azurerm_public_ip.jumpbox.id}" } tags { environment = "codelab" } } resource "azurerm_virtual_machine" "jumpbox" { name = "jumpbox" location = "${var.location}" resource_group_name = "${azurerm_resource_group.vmss.name}" network_interface_ids = ["${azurerm_network_interface.jumpbox.id}"] vm_size = "Standard_DS1_v2" storage_image_reference { publisher = "Canonical" offer = "UbuntuServer" sku = "16.04-LTS" version = "latest" } storage_os_disk { name = "jumpbox-osdisk" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } os_profile { computer_name = "jumpbox" admin_username = "${var.admin_username}" admin_password = "${var.admin_password}" } os_profile_linux_config { disable_password_authentication = false ssh_keys { path = "/home/${var.admin_username}/.ssh/authorized_keys" key_data = "${file("~/.ssh/id_rsa.pub")}" } } tags { environment = "codelab" } }