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"
}
}