From 0aa7c2ee000804d5d2b734068504cf5a8fcc2b0f Mon Sep 17 00:00:00 2001 From: vittoria salim Date: Fri, 27 Feb 2026 16:43:29 +1100 Subject: [PATCH 1/2] draft for az rest --- .../kubernetes/azure-H2-body.json | 31 +++++++++++++++++++ .../terraform-inputs/azure-H2.tfvars | 15 +++------ 2 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 scenarios/perf-eval/ccp-provisioning/kubernetes/azure-H2-body.json diff --git a/scenarios/perf-eval/ccp-provisioning/kubernetes/azure-H2-body.json b/scenarios/perf-eval/ccp-provisioning/kubernetes/azure-H2-body.json new file mode 100644 index 0000000000..e8386d65c9 --- /dev/null +++ b/scenarios/perf-eval/ccp-provisioning/kubernetes/azure-H2-body.json @@ -0,0 +1,31 @@ +{ + "location": "westus2", + "identity": { + "type": "SystemAssigned" + }, + "sku": { + "name": "Base", + "tier": "Standard" + }, + "properties": { + "kubernetesVersion": "1.33.0", + "dnsPrefix": "cpsp-test", + "agentPoolProfiles": [ + { + "name": "nodepool1", + "count": 3, + "vmSize": "Standard_DS2_v2", + "osType": "Linux", + "mode": "System" + } + ], + "networkProfile": { + "networkPlugin": "azure", + "networkPluginMode": "overlay", + "podCidr": "10.244.0.0/16" + }, + "controlPlaneScalingProfile": { + "scalingSize": "H2" + } + } +} \ No newline at end of file diff --git a/scenarios/perf-eval/ccp-provisioning/terraform-inputs/azure-H2.tfvars b/scenarios/perf-eval/ccp-provisioning/terraform-inputs/azure-H2.tfvars index 69b0d5c93a..77152be94c 100644 --- a/scenarios/perf-eval/ccp-provisioning/terraform-inputs/azure-H2.tfvars +++ b/scenarios/perf-eval/ccp-provisioning/terraform-inputs/azure-H2.tfvars @@ -9,17 +9,12 @@ aks_rest_config_list = [ aks_name = "ccp-provisioning-H2" sku_tier = "Standard" sku_name = "Base" - api_version = "2026-01-02-preview" - control_plane_scaling_size = "H2" kubernetes_version = "1.33" - network_plugin = "azure" - network_plugin_mode = "overlay" - default_node_pool = { - name = "systempool" - mode = "System" - node_count = 3 - vm_size = "Standard_D2s_v5" - os_type = "Linux" + method = "PUT" + api_version = "2026-01-02-preview" # to construct url + headers = { + "Content-Type" = "application/json" } + body = "scenarios/perf-eval/ccp-provisioning/kubernetes/azure-H2-body.json" } ] From ceba8cfd4c9fd1afa821d4756b803a1a3003f24e Mon Sep 17 00:00:00 2001 From: vittoria salim Date: Fri, 27 Feb 2026 17:05:45 +1100 Subject: [PATCH 2/2] support az rest --- modules/terraform/azure/aks-cli/main.tf | 39 +++++++++++++++++++ modules/terraform/azure/aks-cli/variables.tf | 17 ++++++++ .../terraform-inputs/azure-H2.tfvars | 1 + 3 files changed, 57 insertions(+) diff --git a/modules/terraform/azure/aks-cli/main.tf b/modules/terraform/azure/aks-cli/main.tf index 1d6a8d637c..367501baf8 100644 --- a/modules/terraform/azure/aks-cli/main.tf +++ b/modules/terraform/azure/aks-cli/main.tf @@ -182,6 +182,36 @@ locals { "-n", var.aks_cli_config.aks_name, "--yes", ]) + + # Build az rest commands for AKS REST API calls + aks_rest_config_map = { + for config in var.aks_rest_config_list : + config.aks_name => config + } + + # Local to build headers string for az rest command + aks_rest_commands = { + for name, config in local.aks_rest_config_map : + name => { + command = join(" ", concat([ + "az", + "rest", + "--method", config.method, + "--url", format( + "\"/subscriptions/{subscriptionId}/resourceGroups/%s/providers/Microsoft.ContainerService/managedClusters/%s?api-version=%s\"", + var.resource_group_name, + config.aks_name, + config.api_version + ), + length(config.headers) > 0 ? concat( + ["--headers"], + [join(" ", [for key, value in config.headers : format("%s=%s", key, value)])], + ) : [], + config.body != null ? ["--body", format("@%s", config.body)] : [], + ])) + dry_run = config.dry_run + } + } } data "azurerm_client_config" "current" {} @@ -288,6 +318,15 @@ resource "terraform_data" "aks_nodepool_cli" { } } +# Execute az rest commands for AKS REST API calls +resource "terraform_data" "aks_rest_cli" { + for_each = local.aks_rest_commands + + provisioner "local-exec" { + command = each.value.dry_run ? "echo '${each.value.command}'" : each.value.command + } +} + # Grant AKS identity KMS-related Key Vault roles resource "azurerm_role_assignment" "aks_identity_kms_roles" { for_each = local.aks_kms_role_assignments diff --git a/modules/terraform/azure/aks-cli/variables.tf b/modules/terraform/azure/aks-cli/variables.tf index e1e0652547..00318c9a3c 100644 --- a/modules/terraform/azure/aks-cli/variables.tf +++ b/modules/terraform/azure/aks-cli/variables.tf @@ -95,3 +95,20 @@ variable "aks_cli_config" { }) } +variable "aks_rest_config_list" { + description = "List of AKS REST API configurations for direct REST API calls" + type = list(object({ + role = string + aks_name = string + sku_tier = string + sku_name = optional(string, null) + kubernetes_version = optional(string, null) + method = string # HTTP method (GET, PUT, POST, PATCH, DELETE) + api_version = string # API version for the REST call + headers = optional(map(string), {}) # Custom headers for the REST call + body = optional(string, null) # Path to JSON body file for the REST call + dry_run = optional(bool, false) # If true, only print the command without executing it + })) + default = [] +} + diff --git a/scenarios/perf-eval/ccp-provisioning/terraform-inputs/azure-H2.tfvars b/scenarios/perf-eval/ccp-provisioning/terraform-inputs/azure-H2.tfvars index 77152be94c..161afb8656 100644 --- a/scenarios/perf-eval/ccp-provisioning/terraform-inputs/azure-H2.tfvars +++ b/scenarios/perf-eval/ccp-provisioning/terraform-inputs/azure-H2.tfvars @@ -16,5 +16,6 @@ aks_rest_config_list = [ "Content-Type" = "application/json" } body = "scenarios/perf-eval/ccp-provisioning/kubernetes/azure-H2-body.json" + # az rest --method PUT --url "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ContainerService/managedClusters/{clusterName}?api-version=2026-01-02-preview" --headers "Content-Type=application/json" --body @scenarios/perf-eval/ccp-provisioning/kubernetes/azure-H2-body.json } ]