/deploy/terraform/terraform-units/modules/sap_system/app_tier/vm-webdisp.tf
https://github.com/Azure/sap-hana · Terraform · 249 lines · 206 code · 34 blank · 9 comment · 106 complexity · 17aba6f7966369e530f79b30ad58caec MD5 · raw file
- # Create Web dispatcher NICs
- resource "azurerm_network_interface" "web" {
- provider = azurerm.main
- count = local.enable_deployment ? local.webdispatcher_count : 0
- name = format("%s%s%s%s", local.prefix, var.naming.separator, local.web_virtualmachine_names[count.index], local.resource_suffixes.nic)
- location = var.resource_group[0].location
- resource_group_name = var.resource_group[0].name
- enable_accelerated_networking = local.web_sizing.compute.accelerated_networking
- ip_configuration {
- name = "IPConfig1"
- subnet_id = local.sub_web_deployed.id
- private_ip_address = local.use_DHCP ? (
- null) : (
- try(local.web_nic_ips[count.index], local.sub_web_defined ?
- cidrhost(local.sub_web_prefix, (tonumber(count.index) + local.ip_offsets.web_vm)) :
- cidrhost(local.sub_app_prefix, (tonumber(count.index) * -1 + local.ip_offsets.web_vm))
- )
- )
- private_ip_address_allocation = local.use_DHCP ? "Dynamic" : "Static"
- }
- }
- resource "azurerm_network_interface_application_security_group_association" "web" {
- count = local.enable_deployment ? local.webdispatcher_count : 0
- network_interface_id = azurerm_network_interface.web[count.index].id
- application_security_group_id = azurerm_application_security_group.web[0].id
- }
- # Create Application NICs
- resource "azurerm_network_interface" "web_admin" {
- provider = azurerm.main
- count = local.enable_deployment && local.apptier_dual_nics ? local.webdispatcher_count : 0
- name = format("%s%s%s%s", local.prefix, var.naming.separator, local.web_virtualmachine_names[count.index], local.resource_suffixes.admin_nic)
- location = var.resource_group[0].location
- resource_group_name = var.resource_group[0].name
- enable_accelerated_networking = local.app_sizing.compute.accelerated_networking
- ip_configuration {
- name = "IPConfig1"
- subnet_id = var.admin_subnet.id
- private_ip_address = local.use_DHCP ? (
- null) : (
- try(local.web_admin_nic_ips[count.index],
- cidrhost(var.admin_subnet.address_prefixes[0], tonumber(count.index) + local.admin_ip_offsets.web_vm
- )
- ))
- private_ip_address_allocation = local.use_DHCP ? "Dynamic" : "Static"
- }
- }
- # Create the Linux Web dispatcher VM(s)
- resource "azurerm_linux_virtual_machine" "web" {
- provider = azurerm.main
- depends_on = [var.anydb_vm_ids, var.hdb_vm_ids]
- count = local.enable_deployment ? (upper(local.web_ostype) == "LINUX" ? local.webdispatcher_count : 0) : 0
- name = format("%s%s%s%s", local.prefix, var.naming.separator, local.web_virtualmachine_names[count.index], local.resource_suffixes.vm)
- computer_name = local.web_computer_names[count.index]
- location = var.resource_group[0].location
- resource_group_name = var.resource_group[0].name
- proximity_placement_group_id = local.web_zonal_deployment ? var.ppg[count.index % max(local.web_zone_count, 1)].id : var.ppg[0].id
- //If more than one servers are deployed into a single zone put them in an availability set and not a zone
- availability_set_id = local.use_web_avset ? azurerm_availability_set.web[count.index % max(local.web_zone_count, 1)].id : null
- //If length of zones > 1 distribute servers evenly across zones
- zone = local.use_web_avset ? null : local.web_zones[count.index % max(local.web_zone_count, 1)]
- network_interface_ids = local.apptier_dual_nics ? (
- local.legacy_nic_order ? (
- [azurerm_network_interface.web_admin[count.index].id, azurerm_network_interface.web[count.index].id]) : (
- [azurerm_network_interface.web[count.index].id, azurerm_network_interface.web_admin[count.index].id]
- )
- ) : (
- [azurerm_network_interface.web[count.index].id]
- )
- size = length(local.web_size) > 0 ? local.web_size : local.web_sizing.compute.vm_size
- admin_username = var.sid_username
- admin_password = local.enable_auth_key ? null : var.sid_password
- disable_password_authentication = !local.enable_auth_password
- dynamic "admin_ssh_key" {
- for_each = range(var.deployment == "new" ? 1 : (local.enable_auth_password ? 0 : 1))
- content {
- username = var.sid_username
- public_key = var.sdu_public_key
- }
- }
- dynamic "os_disk" {
- iterator = disk
- for_each = flatten(
- [
- for storage_type in local.web_sizing.storage : [
- for disk_count in range(storage_type.count) :
- {
- name = storage_type.name,
- id = disk_count,
- disk_type = storage_type.disk_type,
- size_gb = storage_type.size_gb,
- caching = storage_type.caching
- }
- ]
- if storage_type.name == "os"
- ]
- )
- content {
- name = format("%s%s%s%s", local.prefix, var.naming.separator, local.web_virtualmachine_names[count.index], local.resource_suffixes.osdisk)
- caching = disk.value.caching
- storage_account_type = disk.value.disk_type
- disk_size_gb = disk.value.size_gb
- disk_encryption_set_id = try(var.options.disk_encryption_set_id, null)
- }
- }
- source_image_id = local.web_custom_image ? local.web_os.source_image_id : null
- dynamic "source_image_reference" {
- for_each = range(local.web_custom_image ? 0 : 1)
- content {
- publisher = local.web_os.publisher
- offer = local.web_os.offer
- sku = local.web_os.sku
- version = local.web_os.version
- }
- }
- boot_diagnostics {
- storage_account_uri = var.storage_bootdiag_endpoint
- }
- tags = local.web_tags
- }
- # Create the Windows Web dispatcher VM(s)
- resource "azurerm_windows_virtual_machine" "web" {
- provider = azurerm.main
- depends_on = [var.anydb_vm_ids, var.hdb_vm_ids]
- count = local.enable_deployment ? (upper(local.web_ostype) == "WINDOWS" ? local.webdispatcher_count : 0) : 0
- name = format("%s%s%s%s", local.prefix, var.naming.separator, local.web_virtualmachine_names[count.index], local.resource_suffixes.vm)
- computer_name = local.web_computer_names[count.index]
- location = var.resource_group[0].location
- resource_group_name = var.resource_group[0].name
- proximity_placement_group_id = local.web_zonal_deployment ? var.ppg[count.index % max(local.web_zone_count, 1)].id : var.ppg[0].id
- //If more than one servers are deployed into a single zone put them in an availability set and not a zone
- availability_set_id = local.use_web_avset ? azurerm_availability_set.web[count.index % max(local.web_zone_count, 1)].id : null
- //If length of zones > 1 distribute servers evenly across zones
- zone = local.use_web_avset ? null : local.web_zones[count.index % max(local.web_zone_count, 1)]
- network_interface_ids = local.apptier_dual_nics ? (
- local.legacy_nic_order ? (
- [azurerm_network_interface.web_admin[count.index].id, azurerm_network_interface.web[count.index].id]) : (
- [azurerm_network_interface.web[count.index].id, azurerm_network_interface.web_admin[count.index].id]
- )
- ) : (
- [azurerm_network_interface.web[count.index].id]
- )
- size = local.web_sizing.compute.vm_size
- admin_username = var.sid_username
- admin_password = var.sid_password
- dynamic "os_disk" {
- iterator = disk
- for_each = flatten(
- [
- for storage_type in local.web_sizing.storage : [
- for disk_count in range(storage_type.count) :
- {
- name = storage_type.name,
- id = disk_count,
- disk_type = storage_type.disk_type,
- size_gb = storage_type.size_gb,
- caching = storage_type.caching
- }
- ]
- if storage_type.name == "os"
- ]
- )
- content {
- name = format("%s%s%s%s", local.prefix, var.naming.separator, local.web_virtualmachine_names[count.index], local.resource_suffixes.osdisk)
- caching = disk.value.caching
- storage_account_type = disk.value.disk_type
- disk_size_gb = disk.value.size_gb
- disk_encryption_set_id = try(var.options.disk_encryption_set_id, null)
- }
- }
- source_image_id = local.web_custom_image ? local.web_os.source_image_id : null
- dynamic "source_image_reference" {
- for_each = range(local.web_custom_image ? 0 : 1)
- content {
- publisher = local.web_os.publisher
- offer = local.web_os.offer
- sku = local.web_os.sku
- version = local.web_os.version
- }
- }
- boot_diagnostics {
- storage_account_uri = var.storage_bootdiag_endpoint
- }
- tags = local.web_tags
- }
- # Creates managed data disk
- resource "azurerm_managed_disk" "web" {
- provider = azurerm.main
- count = local.enable_deployment ? length(local.web_data_disks) : 0
- name = format("%s%s%s%s", local.prefix, var.naming.separator, local.web_virtualmachine_names[local.web_data_disks[count.index].vm_index], local.web_data_disks[count.index].suffix)
- location = var.resource_group[0].location
- resource_group_name = var.resource_group[0].name
- create_option = "Empty"
- storage_account_type = local.web_data_disks[count.index].storage_account_type
- disk_size_gb = local.web_data_disks[count.index].disk_size_gb
- disk_encryption_set_id = try(var.options.disk_encryption_set_id, null)
- zones = local.web_zonal_deployment && (local.webdispatcher_count == local.web_zone_count) ? (
- upper(local.web_ostype) == "LINUX" ? (
- [azurerm_linux_virtual_machine.web[local.web_data_disks[count.index].vm_index].zone]) : (
- [azurerm_windows_virtual_machine.web[local.web_data_disks[count.index].vm_index].zone]
- )) : (
- null
- )
- }
- resource "azurerm_virtual_machine_data_disk_attachment" "web" {
- provider = azurerm.main
- count = local.enable_deployment ? length(local.web_data_disks) : 0
- managed_disk_id = azurerm_managed_disk.web[count.index].id
- virtual_machine_id = upper(local.web_ostype) == "LINUX" ? (
- azurerm_linux_virtual_machine.web[local.web_data_disks[count.index].vm_index].id) : (
- azurerm_windows_virtual_machine.web[local.web_data_disks[count.index].vm_index].id
- )
- caching = local.web_data_disks[count.index].caching
- write_accelerator_enabled = local.web_data_disks[count.index].write_accelerator_enabled
- lun = local.web_data_disks[count.index].lun
- }