2.Image.Builder/compute.gallery.tf (59 lines of code) (raw):

############################################################################################### # Compute Gallery (https://learn.microsoft.com/azure/virtual-machines/shared-image-galleries) # ############################################################################################### variable computeGallery { type = object({ name = string imageDefinitions = list(object({ name = string type = string generation = string publisher = string offer = string sku = string support = object({ networkAcceleration = bool machineConfidential = bool launchTrusted = bool hibernation = bool nvmeDisks = bool }) })) }) } locals { imageDefinitionLinux = one([ for imageDefinition in var.computeGallery.imageDefinitions : imageDefinition if lower(imageDefinition.type) == "linux" ]) } resource azurerm_shared_image_gallery studio { name = var.computeGallery.name resource_group_name = azurerm_resource_group.image_gallery.name location = azurerm_resource_group.image_gallery.location } resource azurerm_shared_image studio { for_each = { for imageDefinition in var.computeGallery.imageDefinitions : imageDefinition.name => imageDefinition if (module.core.image.linux.enable && lower(imageDefinition.type) == "linux") || (module.core.image.windows.enable && lower(imageDefinition.type) == "windows") } name = each.value.name resource_group_name = azurerm_resource_group.image_gallery.name location = azurerm_resource_group.image_gallery.location gallery_name = azurerm_shared_image_gallery.studio.name hyper_v_generation = each.value.generation os_type = each.value.type accelerated_network_support_enabled = each.value.support.networkAcceleration confidential_vm_supported = !each.value.support.launchTrusted ? each.value.support.machineConfidential : null trusted_launch_supported = !each.value.support.machineConfidential ? each.value.support.launchTrusted : null hibernation_enabled = each.value.support.hibernation disk_controller_type_nvme_enabled = each.value.support.nvmeDisks identifier { publisher = each.value.publisher offer = each.value.offer sku = each.value.sku } } output linux { value = module.core.image.linux.enable && local.imageDefinitionLinux != null ? { publisher = lower(local.imageDefinitionLinux.publisher) offer = lower(local.imageDefinitionLinux.offer) sku = lower(local.imageDefinitionLinux.sku) version = module.core.image.linux.version } : null }