main.tf (550 lines of code) (raw):
resource "azurerm_kubernetes_cluster" "this" {
location = var.location
name = "${var.name}${var.cluster_suffix}"
resource_group_name = var.resource_group_name
# Upgrade Configuration
automatic_upgrade_channel = var.automatic_upgrade_channel
# Additional Features
azure_policy_enabled = var.azure_policy_enabled
cost_analysis_enabled = var.sku_tier == "Free" ? false : var.cost_analysis_enabled
disk_encryption_set_id = var.disk_encryption_set_id
dns_prefix = var.private_cluster_enabled ? null : local.dns_prefix
dns_prefix_private_cluster = var.private_cluster_enabled ? local.private_dns_prefix : null
edge_zone = var.edge_zone
http_application_routing_enabled = var.http_application_routing_enabled
image_cleaner_enabled = var.image_cleaner_enabled
image_cleaner_interval_hours = var.image_cleaner_interval_hours
kubernetes_version = var.kubernetes_version
# Access Control Configuration
local_account_disabled = var.local_account_disabled
node_os_upgrade_channel = var.node_os_channel_upgrade
node_resource_group = var.node_resource_group_name != "" ? var.node_resource_group_name : null
oidc_issuer_enabled = var.oidc_issuer_enabled
# Service Mesh Configuration
open_service_mesh_enabled = var.open_service_mesh_enabled
# Private Cluster Configuration
private_cluster_enabled = var.private_cluster_enabled
private_cluster_public_fqdn_enabled = var.private_cluster_enabled ? var.private_cluster_public_fqdn_enabled : null
private_dns_zone_id = var.private_cluster_enabled ? var.private_dns_zone_id : null
role_based_access_control_enabled = var.role_based_access_control_enabled
run_command_enabled = var.run_command_enabled
sku_tier = var.sku_tier
support_plan = var.support_plan
tags = var.tags
workload_identity_enabled = var.workload_identity_enabled
# Default Nodepool Configuration
dynamic "default_node_pool" {
for_each = var.default_node_pool != null ? [var.default_node_pool] : []
content {
name = default_node_pool.value.name
vm_size = default_node_pool.value.vm_size
auto_scaling_enabled = default_node_pool.value.auto_scaling_enabled
capacity_reservation_group_id = default_node_pool.value.capacity_reservation_group_id
fips_enabled = default_node_pool.value.fips_enabled
gpu_instance = default_node_pool.value.gpu_instance
host_encryption_enabled = default_node_pool.value.host_encryption_enabled
host_group_id = default_node_pool.value.host_group_id
kubelet_disk_type = default_node_pool.value.kubelet_disk_type
max_count = default_node_pool.value.max_count
max_pods = default_node_pool.value.max_pods
min_count = default_node_pool.value.min_count
node_count = default_node_pool.value.node_count
node_labels = default_node_pool.value.node_labels
node_public_ip_enabled = default_node_pool.value.node_public_ip_enabled
node_public_ip_prefix_id = default_node_pool.value.node_public_ip_prefix_id
only_critical_addons_enabled = default_node_pool.value.only_critical_addons_enabled
orchestrator_version = default_node_pool.value.orchestrator_version
os_disk_size_gb = default_node_pool.value.os_disk_size_gb
os_disk_type = default_node_pool.value.os_disk_type
os_sku = default_node_pool.value.os_sku
pod_subnet_id = default_node_pool.value.pod_subnet_id
proximity_placement_group_id = default_node_pool.value.proximity_placement_group_id
scale_down_mode = default_node_pool.value.scale_down_mode
snapshot_id = default_node_pool.value.snapshot_id
tags = default_node_pool.value.tags
temporary_name_for_rotation = default_node_pool.value.temporary_name_for_rotation
type = default_node_pool.value.type
ultra_ssd_enabled = default_node_pool.value.ultra_ssd_enabled
vnet_subnet_id = default_node_pool.value.vnet_subnet_id
workload_runtime = default_node_pool.value.workload_runtime
zones = default_node_pool.value.zones
dynamic "kubelet_config" {
for_each = var.default_node_pool.kubelet_config != null ? [var.default_node_pool.kubelet_config] : []
content {
allowed_unsafe_sysctls = kubelet_config.value.allowed_unsafe_sysctls
container_log_max_line = kubelet_config.value.container_log_max_line
container_log_max_size_mb = kubelet_config.value.container_log_max_size_mb
cpu_cfs_quota_enabled = kubelet_config.value.cpu_cfs_quota_enabled
cpu_cfs_quota_period = kubelet_config.value.cpu_cfs_quota_period
cpu_manager_policy = kubelet_config.value.cpu_manager_policy
image_gc_high_threshold = kubelet_config.value.image_gc_high_threshold
image_gc_low_threshold = kubelet_config.value.image_gc_low_threshold
pod_max_pid = kubelet_config.value.pod_max_pid
topology_manager_policy = kubelet_config.value.topology_manager_policy
}
}
dynamic "linux_os_config" {
for_each = var.default_node_pool.linux_os_config != null ? [var.default_node_pool.linux_os_config] : []
content {
swap_file_size_mb = linux_os_config.value.swap_file_size_mb != null ? linux_os_config.value.swap_file_size_mb : null
transparent_huge_page_defrag = linux_os_config.value.transparent_huge_page_defrag != null ? linux_os_config.value.transparent_huge_page_defrag : null
transparent_huge_page_enabled = linux_os_config.value.transparent_huge_page_enabled != null ? linux_os_config.value.transparent_huge_page_enabled : null
dynamic "sysctl_config" {
for_each = var.default_node_pool.linux_os_config.sysctl_config != null ? [var.default_node_pool.linux_os_config.sysctl_config] : []
content {
fs_aio_max_nr = sysctl_config.value.fs_aio_max_nr
fs_file_max = sysctl_config.value.fs_file_max
fs_inotify_max_user_watches = sysctl_config.value.fs_inotify_max_user_watches
fs_nr_open = sysctl_config.value.fs_nr_open
kernel_threads_max = sysctl_config.value.kernel_threads_max
net_core_netdev_max_backlog = sysctl_config.value.net_core_netdev_max_backlog
net_core_optmem_max = sysctl_config.value.net_core_optmem_max
net_core_rmem_default = sysctl_config.value.net_core_rmem_default
net_core_rmem_max = sysctl_config.value.net_core_rmem_max
net_core_somaxconn = sysctl_config.value.net_core_somaxconn
net_core_wmem_default = sysctl_config.value.net_core_wmem_default
net_core_wmem_max = sysctl_config.value.net_core_wmem_max
net_ipv4_ip_local_port_range_max = sysctl_config.value.net_ipv4_ip_local_port_range_max
net_ipv4_ip_local_port_range_min = sysctl_config.value.net_ipv4_ip_local_port_range_min
net_ipv4_neigh_default_gc_thresh1 = sysctl_config.value.net_ipv4_neigh_default_gc_thresh1
net_ipv4_neigh_default_gc_thresh2 = sysctl_config.value.net_ipv4_neigh_default_gc_thresh2
net_ipv4_neigh_default_gc_thresh3 = sysctl_config.value.net_ipv4_neigh_default_gc_thresh3
net_ipv4_tcp_fin_timeout = sysctl_config.value.net_ipv4_tcp_fin_timeout
net_ipv4_tcp_keepalive_intvl = sysctl_config.value.net_ipv4_tcp_keepalive_intvl
net_ipv4_tcp_keepalive_probes = sysctl_config.value.net_ipv4_tcp_keepalive_probes
net_ipv4_tcp_keepalive_time = sysctl_config.value.net_ipv4_tcp_keepalive_time
net_ipv4_tcp_max_syn_backlog = sysctl_config.value.net_ipv4_tcp_max_syn_backlog
net_ipv4_tcp_max_tw_buckets = sysctl_config.value.net_ipv4_tcp_max_tw_buckets
net_ipv4_tcp_tw_reuse = sysctl_config.value.net_ipv4_tcp_tw_reuse
net_netfilter_nf_conntrack_buckets = sysctl_config.value.net_netfilter_nf_conntrack_buckets
net_netfilter_nf_conntrack_max = sysctl_config.value.net_netfilter_nf_conntrack_max
vm_max_map_count = sysctl_config.value.vm_max_map_count
vm_swappiness = sysctl_config.value.vm_swappiness
vm_vfs_cache_pressure = sysctl_config.value.vm_vfs_cache_pressure
}
}
}
}
dynamic "node_network_profile" {
for_each = var.default_node_pool.node_network_profile == null ? [] : [var.default_node_pool.node_network_profile]
content {
application_security_group_ids = node_network_profile.value.application_security_group_ids
node_public_ip_tags = node_network_profile.value.node_public_ip_tags
dynamic "allowed_host_ports" {
for_each = node_network_profile.value.allowed_host_ports == null ? [] : node_network_profile.value.allowed_host_ports
content {
port_end = allowed_host_ports.value.port_end
port_start = allowed_host_ports.value.port_start
protocol = allowed_host_ports.value.protocol
}
}
}
}
dynamic "upgrade_settings" {
for_each = default_node_pool.value.upgrade_settings != null ? [default_node_pool.value.upgrade_settings] : []
content {
max_surge = upgrade_settings.value.max_surge
drain_timeout_in_minutes = upgrade_settings.value.node_soak_duration_in_minutes
node_soak_duration_in_minutes = upgrade_settings.value.node_soak_duration_in_minutes
}
}
}
}
dynamic "aci_connector_linux" {
for_each = var.aci_connector_linux_subnet_name != null ? [var.aci_connector_linux_subnet_name] : []
content {
subnet_name = aci_connector_linux.value
}
}
dynamic "api_server_access_profile" {
for_each = var.api_server_access_profile != null ? [var.api_server_access_profile] : []
content {
authorized_ip_ranges = api_server_access_profile.value.authorized_ip_ranges
}
}
# Auto Scaler Configuration
dynamic "auto_scaler_profile" {
for_each = var.auto_scaler_profile != null ? [var.auto_scaler_profile] : []
content {
balance_similar_node_groups = auto_scaler_profile.value.balance_similar_node_groups
empty_bulk_delete_max = auto_scaler_profile.value.empty_bulk_delete_max
expander = auto_scaler_profile.value.expander
max_graceful_termination_sec = auto_scaler_profile.value.max_graceful_termination_sec
max_node_provisioning_time = auto_scaler_profile.value.max_node_provisioning_time
max_unready_nodes = auto_scaler_profile.value.max_unready_nodes
max_unready_percentage = auto_scaler_profile.value.max_unready_percentage
new_pod_scale_up_delay = auto_scaler_profile.value.new_pod_scale_up_delay
scale_down_delay_after_add = auto_scaler_profile.value.scale_down_delay_after_add
scale_down_delay_after_delete = auto_scaler_profile.value.scale_down_delay_after_delete
scale_down_delay_after_failure = auto_scaler_profile.value.scale_down_delay_after_failure
scale_down_unneeded = auto_scaler_profile.value.scale_down_unneeded
scale_down_unready = auto_scaler_profile.value.scale_down_unready
scale_down_utilization_threshold = auto_scaler_profile.value.scale_down_utilization_threshold
scan_interval = auto_scaler_profile.value.scan_interval
skip_nodes_with_local_storage = auto_scaler_profile.value.skip_nodes_with_local_storage
skip_nodes_with_system_pods = auto_scaler_profile.value.skip_nodes_with_system_pods
}
}
dynamic "azure_active_directory_role_based_access_control" {
for_each = var.azure_active_directory_role_based_access_control != null ? [var.azure_active_directory_role_based_access_control] : []
content {
admin_group_object_ids = azure_active_directory_role_based_access_control.value.admin_group_object_ids
azure_rbac_enabled = azure_active_directory_role_based_access_control.value.azure_rbac_enabled
tenant_id = azure_active_directory_role_based_access_control.value.tenant_id
}
}
dynamic "confidential_computing" {
for_each = var.confidential_computing == null ? [] : [var.confidential_computing]
content {
sgx_quote_helper_enabled = confidential_computing.value.sgx_quote_helper_enabled
}
}
# Proxy, Ingress and Routing Configuration
dynamic "http_proxy_config" {
for_each = var.http_proxy_config != null ? [var.http_proxy_config] : []
content {
http_proxy = http_proxy_config.value.http_proxy
https_proxy = http_proxy_config.value.https_proxy
no_proxy = http_proxy_config.value.no_proxy
trusted_ca = http_proxy_config.value.trusted_ca
}
}
dynamic "identity" {
for_each = local.managed_identities.system_assigned_user_assigned
content {
type = identity.value.type
identity_ids = identity.value.user_assigned_resource_ids
}
}
# Ingress Configuration
dynamic "ingress_application_gateway" {
for_each = var.ingress_application_gateway != null ? [var.ingress_application_gateway] : []
content {
gateway_id = ingress_application_gateway.value.gateway_id
gateway_name = ingress_application_gateway.value.gateway_name
subnet_cidr = ingress_application_gateway.value.subnet_cidr
subnet_id = ingress_application_gateway.value.subnet_id
}
}
# KeyVault Configuration
dynamic "key_management_service" {
for_each = var.key_management_service != null ? [var.key_management_service] : []
content {
key_vault_key_id = key_management_service.value.key_vault_key_id
key_vault_network_access = key_management_service.value.key_vault_network_access
}
}
dynamic "key_vault_secrets_provider" {
for_each = var.key_vault_secrets_provider != null ? [var.key_vault_secrets_provider] : []
content {
secret_rotation_enabled = key_vault_secrets_provider.value.secret_rotation_enabled
secret_rotation_interval = key_vault_secrets_provider.value.secret_rotation_interval
}
}
dynamic "kubelet_identity" {
for_each = var.kubelet_identity != null ? [var.kubelet_identity] : []
content {
client_id = kubelet_identity.value.client_id
object_id = kubelet_identity.value.object_id
user_assigned_identity_id = kubelet_identity.value.user_assigned_identity_id
}
}
# OS Configuration
dynamic "linux_profile" {
for_each = var.linux_profile != null ? [var.linux_profile] : []
content {
admin_username = linux_profile.value.admin_username
ssh_key {
key_data = linux_profile.value.ssh_key
}
}
}
# Maintenance Configurations
dynamic "maintenance_window" {
for_each = var.maintenance_window != null ? [var.maintenance_window] : []
content {
dynamic "allowed" {
for_each = maintenance_window.value.allowed != null ? [maintenance_window.value.allowed] : []
content {
day = allowed.value.day
hours = allowed.value.hours
}
}
dynamic "not_allowed" {
for_each = maintenance_window.value.not_allowed != null ? [maintenance_window.value.not_allowed] : []
content {
end = not_allowed.value.end
start = not_allowed.value.start
}
}
}
}
dynamic "maintenance_window_auto_upgrade" {
for_each = var.maintenance_window_auto_upgrade != null ? [var.maintenance_window_auto_upgrade] : []
content {
duration = maintenance_window_auto_upgrade.value.duration
frequency = maintenance_window_auto_upgrade.value.frequency
interval = maintenance_window_auto_upgrade.value.interval
day_of_month = maintenance_window_auto_upgrade.value.day_of_month
day_of_week = maintenance_window_auto_upgrade.value.day_of_week
start_date = maintenance_window_auto_upgrade.value.start_date
start_time = maintenance_window_auto_upgrade.value.start_time
utc_offset = maintenance_window_auto_upgrade.value.utc_offset
week_index = maintenance_window_auto_upgrade.value.week_index
dynamic "not_allowed" {
for_each = maintenance_window_auto_upgrade.value.not_allowed != null ? [maintenance_window_auto_upgrade.value.not_allowed] : []
content {
end = not_allowed.value.end
start = not_allowed.value.start
}
}
}
}
dynamic "maintenance_window_node_os" {
for_each = var.maintenance_window_node_os != null ? [var.maintenance_window_node_os] : []
content {
duration = maintenance_window_node_os.value.duration
frequency = maintenance_window_node_os.value.frequency
interval = maintenance_window_node_os.value.interval
day_of_month = maintenance_window_node_os.value.day_of_month
day_of_week = maintenance_window_node_os.value.day_of_week
start_date = maintenance_window_node_os.value.start_date
start_time = maintenance_window_node_os.value.start_time
utc_offset = maintenance_window_node_os.value.utc_offset
week_index = maintenance_window_node_os.value.week_index
dynamic "not_allowed" {
for_each = maintenance_window_node_os.value.not_allowed != null ? [maintenance_window_node_os.value.not_allowed] : []
content {
end = not_allowed.value.end
start = not_allowed.value.start
}
}
}
}
# Monitoring Configuration
dynamic "microsoft_defender" {
for_each = var.defender_log_analytics_workspace_id != null ? [var.defender_log_analytics_workspace_id] : []
content {
log_analytics_workspace_id = var.defender_log_analytics_workspace_id
}
}
dynamic "monitor_metrics" {
for_each = var.monitor_metrics != null ? [var.monitor_metrics] : []
content {
annotations_allowed = monitor_metrics.value.annotations_allowed
labels_allowed = monitor_metrics.value.labels_allowed
}
}
#Network Configuration
network_profile {
network_plugin = var.network_profile.network_plugin
dns_service_ip = var.network_profile.dns_service_ip
ip_versions = var.network_profile.ip_versions
load_balancer_sku = var.network_profile.load_balancer_sku
network_data_plane = var.network_profile.network_data_plane
network_mode = var.network_profile.network_mode
network_plugin_mode = var.network_profile.network_plugin_mode
network_policy = var.network_profile.network_policy
outbound_type = var.network_profile.outbound_type
pod_cidr = var.network_profile.pod_cidr
pod_cidrs = var.network_profile.pod_cidrs
service_cidr = var.network_profile.service_cidr
service_cidrs = var.network_profile.service_cidrs
dynamic "load_balancer_profile" {
for_each = var.network_profile.load_balancer_profile != null ? [var.network_profile.load_balancer_profile] : []
content {
idle_timeout_in_minutes = var.network_profile.load_balancer_profile.idle_timeout_in_minutes
managed_outbound_ip_count = var.network_profile.load_balancer_profile.managed_outbound_ip_count
managed_outbound_ipv6_count = var.network_profile.load_balancer_profile.managed_outbound_ipv6_count
outbound_ip_address_ids = var.network_profile.load_balancer_profile.outbound_ip_address_ids
outbound_ip_prefix_ids = var.network_profile.load_balancer_profile.outbound_ip_prefix_ids
outbound_ports_allocated = var.network_profile.load_balancer_profile.outbound_ports_allocated
}
}
dynamic "nat_gateway_profile" {
for_each = var.network_profile.nat_gateway_profile != null ? [var.network_profile.nat_gateway_profile] : []
content {
idle_timeout_in_minutes = var.network_profile.nat_gateway_profile.idle_timeout_in_minutes
managed_outbound_ip_count = var.network_profile.nat_gateway_profile.managed_outbound_ip_count
}
}
}
dynamic "oms_agent" {
for_each = var.oms_agent != null ? [var.oms_agent] : []
content {
log_analytics_workspace_id = oms_agent.value.log_analytics_workspace_id
msi_auth_for_monitoring_enabled = oms_agent.value.msi_auth_for_monitoring_enabled
}
}
dynamic "service_mesh_profile" {
for_each = var.service_mesh_profile != null ? [var.service_mesh_profile] : []
content {
mode = service_mesh_profile.value.mode
revisions = service_mesh_profile.value.revisions
external_ingress_gateway_enabled = service_mesh_profile.value.external_ingress_gateway_enabled
internal_ingress_gateway_enabled = service_mesh_profile.value.internal_ingress_gateway_enabled
dynamic "certificate_authority" {
for_each = service_mesh_profile.value.certificate_authority != null ? [service_mesh_profile.value.certificate_authority] : []
content {
cert_chain_object_name = certificate_authority.value.cert_chain_object_name
cert_object_name = certificate_authority.value.cert_object_name
key_object_name = certificate_authority.value.key_object_name
key_vault_id = certificate_authority.value.key_vault_id
root_cert_object_name = certificate_authority.value.root_cert_object_name
}
}
}
}
dynamic "service_principal" {
for_each = var.service_principal != null ? [var.service_principal] : []
content {
client_id = service_principal.value.client_id
client_secret = service_principal.value.client_secret
}
}
# Storage Profile Configuration
dynamic "storage_profile" {
for_each = var.storage_profile != null ? [var.storage_profile] : []
content {
blob_driver_enabled = storage_profile.value.blob_driver_enabled
disk_driver_enabled = storage_profile.value.disk_driver_enabled
file_driver_enabled = storage_profile.value.file_driver_enabled
snapshot_controller_enabled = storage_profile.value.snapshot_controller_enabled
}
}
dynamic "timeouts" {
for_each = var.kubernetes_cluster_timeouts == null ? [] : [var.kubernetes_cluster_timeouts]
content {
create = timeouts.value.create
delete = timeouts.value.delete
read = timeouts.value.read
update = timeouts.value.update
}
}
dynamic "web_app_routing" {
for_each = var.web_app_routing_dns_zone_ids
content {
dns_zone_ids = web_app_routing.value
}
}
dynamic "windows_profile" {
for_each = var.windows_profile != null ? [var.windows_profile] : []
content {
admin_password = var.windows_profile_password
admin_username = windows_profile.value.admin_username
license = windows_profile.value.license
dynamic "gmsa" {
for_each = var.windows_profile.gmsa != null ? [var.windows_profile.gmsa] : []
content {
dns_server = var.windows_profile.gmsa.dns_server
root_domain = var.windows_profile.gmsa.root_domain
}
}
}
}
dynamic "workload_autoscaler_profile" {
for_each = var.workload_autoscaler_profile != null ? [var.workload_autoscaler_profile] : []
content {
keda_enabled = workload_autoscaler_profile.value.keda_enabled
vertical_pod_autoscaler_enabled = workload_autoscaler_profile.value.vpa_enabled
}
}
lifecycle {
ignore_changes = [
http_application_routing_enabled,
http_proxy_config[0].no_proxy,
kubernetes_version
]
precondition {
condition = var.cost_analysis_enabled != true || (var.sku_tier == "Standard" || var.sku_tier == "Premium")
error_message = "`sku_tier` must be either `Standard` or `Premium` when cost analysis is enabled."
}
precondition {
condition = local.automatic_channel_upgrade_check
error_message = "Either disable automatic upgrades, or specify `kubernetes_version` or `orchestrator_version` only up to the minor version when using `automatic_channel_upgrade=patch`. You don't need to specify `kubernetes_version` at all when using `automatic_channel_upgrade=stable|rapid|node-image`, where `orchestrator_version` always must be set to `null`."
}
precondition {
condition = var.role_based_access_control_enabled || !(var.azure_active_directory_role_based_access_control != null)
error_message = "Enabling Azure Active Directory integration requires that `role_based_access_control_enabled` be set to true."
}
precondition {
condition = !((var.key_management_service != null) && try(var.managed_identities.type != "UserAssigned", true))
error_message = "KMS etcd encryption doesn't work with system-assigned managed identity."
}
precondition {
condition = !var.workload_identity_enabled || var.oidc_issuer_enabled
error_message = "`oidc_issuer_enabled` must be set to `true` to enable Azure AD Workload Identity"
}
precondition {
condition = can(coalesce(var.name, var.dns_prefix))
error_message = "You must set one of `var.dns_prefix` and `var.prefix` to create `azurerm_kubernetes_cluster.main`."
}
precondition {
condition = !var.private_cluster_enabled || (var.dns_prefix_private_cluster != null && var.dns_prefix_private_cluster != "")
error_message = "When `private_cluster_enabled` is set to `true`, `dns_prefix_private_cluster` must be set."
}
precondition {
condition = !var.private_cluster_enabled || (var.dns_prefix == null || var.dns_prefix == "")
error_message = "When `dns_prefix_private_cluster` is set, `dns_prefix` must not be set."
}
precondition {
condition = var.automatic_upgrade_channel != "node-image" || var.node_os_channel_upgrade == "NodeImage"
error_message = "`node_os_channel_upgrade` must be set to `NodeImage` if `automatic_channel_upgrade` has been set to `node-image`."
}
precondition {
condition = var.node_pools == null || var.default_node_pool.type == "VirtualMachineScaleSets"
error_message = "The 'type' variable must be set to 'VirtualMachineScaleSets' if 'node_pools' is not null."
}
}
}
resource "terraform_data" "kubernetes_version_keeper" {
triggers_replace = {
version = var.kubernetes_version
}
}
resource "azapi_update_resource" "aks_cluster_post_create" {
type = "Microsoft.ContainerService/managedClusters@2024-02-01"
body = {
properties = {
kubernetesVersion = var.kubernetes_version
}
}
resource_id = azurerm_kubernetes_cluster.this.id
lifecycle {
ignore_changes = all
replace_triggered_by = [terraform_data.kubernetes_version_keeper.id]
}
}
resource "terraform_data" "http_proxy_config_no_proxy_keeper" {
count = try(var.http_proxy_config.no_proxy != null, false) ? 1 : 0
triggers_replace = {
http_proxy_no_proxy = try(join(",", try(sort(var.http_proxy_config.no_proxy), [])), "")
}
}
resource "azapi_update_resource" "aks_cluster_http_proxy_config_no_proxy" {
count = try(var.http_proxy_config.no_proxy != null, false) ? 1 : 0
type = "Microsoft.ContainerService/managedClusters@2024-02-01"
body = {
properties = {
httpProxyConfig = {
noProxy = var.http_proxy_config.no_proxy
}
}
}
resource_id = azurerm_kubernetes_cluster.this.id
depends_on = [azapi_update_resource.aks_cluster_post_create]
lifecycle {
ignore_changes = all
replace_triggered_by = [terraform_data.http_proxy_config_no_proxy_keeper[0].id]
}
}
# required AVM resources interfaces
resource "azurerm_management_lock" "this" {
count = var.lock != null ? 1 : 0
lock_level = var.lock.kind
name = coalesce(var.lock.name, "lock-${var.lock.kind}")
scope = azurerm_kubernetes_cluster.this.id
notes = var.lock.kind == "CanNotDelete" ? "Cannot delete the resource or its child resources." : "Cannot delete or modify the resource or its child resources."
}
resource "azurerm_role_assignment" "this" {
for_each = var.role_assignments
principal_id = each.value.principal_id
scope = azurerm_kubernetes_cluster.this.id
condition = each.value.condition
condition_version = each.value.condition_version
delegated_managed_identity_resource_id = each.value.delegated_managed_identity_resource_id
role_definition_id = strcontains(lower(each.value.role_definition_id_or_name), lower(local.role_definition_resource_substring)) ? each.value.role_definition_id_or_name : null
role_definition_name = strcontains(lower(each.value.role_definition_id_or_name), lower(local.role_definition_resource_substring)) ? null : each.value.role_definition_id_or_name
skip_service_principal_aad_check = each.value.skip_service_principal_aad_check
}
resource "random_string" "dns_prefix" {
length = 10
lower = true
numeric = true
special = false
upper = false
}