From c0140db2e7c9daf692ff1485a2431f5795be8a23 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Fri, 29 May 2026 01:00:38 +0000 Subject: [PATCH 01/39] Add spec for KubeInventory --- .../kubeInventory/KubeInventory.tsp | 89 +++++++ .../kubeInventory/UpgradeAssessment.tsp | 165 +++++++++++++ .../CreateOrUpdateUpgradeAssessment.json | 133 +++++++++++ .../2026-06-15-preview/GetKubeInventory.json | 31 +++ .../GetUpgradeAssessment.json | 80 +++++++ .../2026-06-15-preview/ListKubeInventory.json | 35 +++ .../ListUpgradeAssessments.json | 50 ++++ .../RefreshUpgradeAssessment.json | 67 ++++++ .../kubeInventory/main.tsp | 34 +++ .../kubeInventory/models.tsp | 218 ++++++++++++++++++ .../kubeInventory/tspconfig.yaml | 50 ++++ 11 files changed, 952 insertions(+) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/UpgradeAssessment.tsp create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/CreateOrUpdateUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListUpgradeAssessments.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/RefreshUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/tspconfig.yaml diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp new file mode 100644 index 000000000000..49808338aa6a --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp @@ -0,0 +1,89 @@ +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-azure-resource-manager"; +import "@typespec/rest"; +import "./models.tsp"; + +using TypeSpec.Rest; +using Azure.Core; +using Azure.ResourceManager; +using Azure.ResourceManager.Foundations; +using TypeSpec.Http; + +namespace Microsoft.KubernetesConfiguration; + +/** + * Singleton container resource grouping cluster inventory reports. + */ +model KubeInventory is Azure.ResourceManager.ProxyResource { + ...ResourceNameParameter< + Resource = KubeInventory, + KeyName = "kubeInventoryName", + SegmentName = "kubeInventory", + NamePattern = "" + >; +} + +/** + * Operations alias for KubeInventory using the cluster extension routing pattern. + * Generates URLs of the form: + * /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory[/{kubeInventoryName}] + */ +alias KubeInventoryOps = Azure.ResourceManager.Legacy.ExtensionOperations< + { + ...ApiVersionParameter; + ...SubscriptionIdParameter; + ...ResourceGroupParameter; + + /** + * The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes, + * Microsoft.HybridContainerService. + */ + @path + @segment("providers") + @key + clusterRp: string; + + /** + * The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters, + * provisionedClusters, appliances. + */ + @key + @path + @pattern("^[a-zA-Z]*$") + clusterResourceName: string; + + /** + * The name of the kubernetes cluster. + */ + @key + @path + @pattern("^.*") + clusterName: string; + }, + { + ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; + ...ParentKeysOf; + }, + { + ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; + ...KeysOf; + } +>; + +@armResourceOperations(#{ allowStaticRoutes: true, omitTags: true }) +interface KubeInventories { + /** + * Get the kubeInventory singleton for a cluster. + */ + @tag("KubeInventory") + get is KubeInventoryOps.Read; + + /** + * List kubeInventory containers for the cluster (currently always a single 'default'). + */ + @tag("KubeInventory") + list is KubeInventoryOps.List; +} + +@@doc(KubeInventory.name, "Name of the KubeInventory resource."); +@@doc(KubeInventory.properties, "Properties of the KubeInventory resource."); diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/UpgradeAssessment.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/UpgradeAssessment.tsp new file mode 100644 index 000000000000..8b4befb8718e --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/UpgradeAssessment.tsp @@ -0,0 +1,165 @@ +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-azure-resource-manager"; +import "@typespec/rest"; +import "./models.tsp"; +import "./KubeInventory.tsp"; + +using TypeSpec.Rest; +using Azure.Core; +using Azure.ResourceManager; +using Azure.ResourceManager.Foundations; +using TypeSpec.Http; + +namespace Microsoft.KubernetesConfiguration; + +/** + * Periodic, cluster-computed Kubernetes upgrade assessment. + */ +@parentResource(KubeInventory) +model UpgradeAssessment is Azure.ResourceManager.ProxyResource { + ...ResourceNameParameter< + Resource = UpgradeAssessment, + KeyName = "assessmentName", + SegmentName = "upgradeAssessments", + NamePattern = "" + >; +} + +/** + * Operations alias for UpgradeAssessment using the cluster + KubeInventory extension routing pattern. + * Generates URLs of the form: + * .../providers/Microsoft.KubernetesConfiguration/kubeInventory/{kubeInventoryName}/upgradeAssessments[/{assessmentName}] + */ +alias UpgradeAssessmentOps = Azure.ResourceManager.Legacy.ExtensionOperations< + { + ...ApiVersionParameter; + ...SubscriptionIdParameter; + ...ResourceGroupParameter; + + /** + * The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes, + * Microsoft.HybridContainerService. + */ + @path + @segment("providers") + @key + clusterRp: string; + + /** + * The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters, + * provisionedClusters, appliances. + */ + @key + @path + @pattern("^[a-zA-Z]*$") + clusterResourceName: string; + + /** + * The name of the kubernetes cluster. + */ + @key + @path + @pattern("^.*") + clusterName: string; + }, + { + ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; + ...ParentKeysOf; + }, + { + ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; + ...ParentKeysOf; + ...KeysOf; + } +>; + +/** + * RoutedOperations alias used for the refresh action on a specific UpgradeAssessment instance. + * Includes all path params up to and including assessmentName so the action route resolves correctly. + */ +alias UpgradeAssessmentBuildingOps = Azure.ResourceManager.Legacy.RoutedOperations< + { + ...ApiVersionParameter; + ...SubscriptionIdParameter; + ...ResourceGroupParameter; + + /** + * The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes, + * Microsoft.HybridContainerService. + */ + @path + @segment("providers") + @key + clusterRp: string; + + /** + * The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters, + * provisionedClusters, appliances. + */ + @key + @path + @pattern("^[a-zA-Z]*$") + clusterResourceName: string; + + /** + * The name of the kubernetes cluster. + */ + @key + @path + @pattern("^.*") + clusterName: string; + + ...KeysOf; + ...KeysOf; + }, + {}, + ResourceRoute = #{ + route: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory", + } +>; + +@armResourceOperations(#{ allowStaticRoutes: true, omitTags: true }) +interface UpgradeAssessments { + /** + * Get the upgrade assessment for a cluster. + */ + @tag("UpgradeAssessments") + get is UpgradeAssessmentOps.Read; + + /** + * List upgrade assessments under a kubeInventory (currently always a single 'current'). + */ + @tag("UpgradeAssessments") + list is UpgradeAssessmentOps.List; + + /** + * Internal write path used by the in-cluster agent to publish or update an upgrade assessment. + * End users do NOT have RBAC for this operation; access is restricted to the cluster's managed identity. + */ + @tag("UpgradeAssessments") + createOrUpdate is UpgradeAssessmentOps.CreateOrUpdateAsync; + + /** + * Trigger the in-cluster agent to recompute the upgrade assessment. + * Long-running; only one refresh per cluster may be in flight at a time (returns 409 otherwise). + */ + @tag("UpgradeAssessments") + @post + @route("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory/{kubeInventoryName}/upgradeAssessments/{assessmentName}/refresh") + refresh is UpgradeAssessmentBuildingOps.ActionAsync< + UpgradeAssessment, + RefreshRequest, + | ArmAcceptedLroResponse> + | ArmResponse + >; +} + +@@doc(UpgradeAssessment.name, "Name of the UpgradeAssessment resource."); +@@doc( + UpgradeAssessment.properties, + "Properties of the UpgradeAssessment resource." +); +@@doc( + UpgradeAssessments.createOrUpdate::parameters.resource, + "The UpgradeAssessment resource body." +); diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/CreateOrUpdateUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/CreateOrUpdateUpgradeAssessment.json new file mode 100644 index 000000000000..a243fca802d4 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/CreateOrUpdateUpgradeAssessment.json @@ -0,0 +1,133 @@ +{ + "title": "Create or Update UpgradeAssessment", + "operationId": "UpgradeAssessments_CreateOrUpdate", + "parameters": { + "subscriptionId": "subId1", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "default", + "assessmentName": "current", + "api-version": "2026-06-15-preview", + "resource": { + "properties": { + "kubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30", + "overallSeverity": "critical", + "componentCompatibility": [ + { + "name": "containerd", + "version": "1.6.8", + "compatibilityStatus": "incompatible", + "severity": "critical", + "minCompatibleVersion": "1.7.0", + "notes": "containerd 1.6.x is not compatible with Kubernetes 1.30. Upgrade to 1.7.x required." + } + ], + "deprecatedApis": [ + { + "group": "flowcontrol.apiserver.k8s.io", + "version": "v1beta3", + "resource": "flowschemas", + "removedRelease": "1.32", + "usageMetrics": { + "get": 12, + "list": 45 + }, + "lastUsageObservedAt": "2026-06-09T14:22:00.000Z", + "severity": "warning" + } + ], + "readinessChecks": [ + { + "category": "NodeStatus", + "severity": "pass" + }, + { + "category": "Storage", + "name": "node-pool-1", + "severity": "critical", + "details": "Node disk pressure detected; upgrade may fail." + } + ] + } + } + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", + "systemData": { + "createdBy": "cluster-managed-identity", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "cluster-managed-identity", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-10T09:00:00.000Z" + }, + "properties": { + "provisioningState": "Succeeded", + "assessmentTime": "2026-06-10T09:00:00.000Z", + "kubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30", + "overallSeverity": "critical", + "componentCompatibility": [ + { + "name": "containerd", + "version": "1.6.8", + "compatibilityStatus": "incompatible", + "severity": "critical", + "minCompatibleVersion": "1.7.0", + "notes": "containerd 1.6.x is not compatible with Kubernetes 1.30. Upgrade to 1.7.x required." + } + ], + "deprecatedApis": [ + { + "group": "flowcontrol.apiserver.k8s.io", + "version": "v1beta3", + "resource": "flowschemas", + "removedRelease": "1.32", + "usageMetrics": { + "get": 12, + "list": 45 + }, + "lastUsageObservedAt": "2026-06-09T14:22:00.000Z", + "severity": "warning" + } + ], + "readinessChecks": [ + { + "category": "NodeStatus", + "severity": "pass" + }, + { + "category": "Storage", + "name": "node-pool-1", + "severity": "critical", + "details": "Node disk pressure detected; upgrade may fail." + } + ] + } + } + }, + "201": { + "headers": { + "Azure-AsyncOperation": "https://management.azure.com/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current/operations/operationId1?api-version=2026-06-15-preview", + "Retry-After": 10 + }, + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", + "properties": { + "provisioningState": "Updating", + "kubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json new file mode 100644 index 000000000000..9fc927d3e5ef --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -0,0 +1,31 @@ +{ + "title": "Get KubeInventory", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "subId1", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default", + "name": "default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": {} + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json new file mode 100644 index 000000000000..f703f049f3c6 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json @@ -0,0 +1,80 @@ +{ + "title": "Get UpgradeAssessment", + "operationId": "UpgradeAssessments_Get", + "parameters": { + "subscriptionId": "subId1", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "default", + "assessmentName": "current", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", + "systemData": { + "createdBy": "cluster-managed-identity", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "cluster-managed-identity", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-10T08:30:00.000Z" + }, + "properties": { + "provisioningState": "Succeeded", + "assessmentTime": "2026-06-10T08:30:00.000Z", + "kubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30", + "overallSeverity": "warning", + "componentCompatibility": [ + { + "name": "containerd", + "version": "1.7.2", + "compatibilityStatus": "compatible", + "severity": "pass", + "minCompatibleVersion": "1.7.0" + }, + { + "name": "calico", + "version": "3.25.0", + "compatibilityStatus": "untested", + "severity": "warning", + "notes": "Calico 3.25.x has not been validated against Kubernetes 1.30. Consider upgrading to 3.27.x." + } + ], + "deprecatedApis": [ + { + "group": "flowcontrol.apiserver.k8s.io", + "version": "v1beta3", + "resource": "flowschemas", + "removedRelease": "1.32", + "usageMetrics": { + "get": 12, + "list": 45 + }, + "lastUsageObservedAt": "2026-06-09T14:22:00.000Z", + "severity": "warning" + } + ], + "readinessChecks": [ + { + "category": "NodeStatus", + "severity": "pass" + }, + { + "category": "PodDisruptionBudget", + "name": "default/my-app", + "severity": "warning", + "details": "PDB allows 0 disruptions; upgrade may be blocked until PDB is relaxed." + } + ] + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json new file mode 100644 index 000000000000..3d93e5e2fc2d --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -0,0 +1,35 @@ +{ + "title": "List KubeInventory", + "operationId": "KubeInventories_List", + "parameters": { + "subscriptionId": "subId1", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default", + "name": "default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": {} + } + ], + "nextLink": null + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListUpgradeAssessments.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListUpgradeAssessments.json new file mode 100644 index 000000000000..4cbe74786dac --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListUpgradeAssessments.json @@ -0,0 +1,50 @@ +{ + "title": "List UpgradeAssessments", + "operationId": "UpgradeAssessments_List", + "parameters": { + "subscriptionId": "subId1", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", + "systemData": { + "createdBy": "cluster-managed-identity", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "cluster-managed-identity", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-10T08:30:00.000Z" + }, + "properties": { + "provisioningState": "Succeeded", + "assessmentTime": "2026-06-10T08:30:00.000Z", + "kubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30", + "overallSeverity": "warning", + "componentCompatibility": [], + "deprecatedApis": [], + "readinessChecks": [ + { + "category": "NodeStatus", + "severity": "pass" + } + ] + } + } + ], + "nextLink": null + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/RefreshUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/RefreshUpgradeAssessment.json new file mode 100644 index 000000000000..9afab21b5916 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/RefreshUpgradeAssessment.json @@ -0,0 +1,67 @@ +{ + "title": "Refresh UpgradeAssessment", + "operationId": "UpgradeAssessments_Refresh", + "parameters": { + "subscriptionId": "subId1", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "default", + "assessmentName": "current", + "api-version": "2026-06-15-preview", + "body": { + "targetKubernetesVersion": "1.30" + } + }, + "responses": { + "202": { + "headers": { + "Azure-AsyncOperation": "https://management.azure.com/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current/operations/operationId1?api-version=2026-06-15-preview", + "Retry-After": 30 + } + }, + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", + "systemData": { + "createdBy": "cluster-managed-identity", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "cluster-managed-identity", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-10T09:15:00.000Z" + }, + "properties": { + "provisioningState": "Succeeded", + "assessmentTime": "2026-06-10T09:15:00.000Z", + "kubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30", + "overallSeverity": "pass", + "componentCompatibility": [ + { + "name": "containerd", + "version": "1.7.4", + "compatibilityStatus": "compatible", + "severity": "pass", + "minCompatibleVersion": "1.7.0" + } + ], + "deprecatedApis": [], + "readinessChecks": [ + { + "category": "NodeStatus", + "severity": "pass" + }, + { + "category": "APIServerHealth", + "severity": "pass" + } + ] + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp new file mode 100644 index 000000000000..adc027afb308 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp @@ -0,0 +1,34 @@ +import "@typespec/rest"; +import "@typespec/versioning"; +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-azure-resource-manager"; +import "./models.tsp"; +import "./KubeInventory.tsp"; +import "./UpgradeAssessment.tsp"; + +using TypeSpec.Rest; +using TypeSpec.Http; +using Azure.ResourceManager.Foundations; +using Azure.Core; +using Azure.ResourceManager; +using TypeSpec.Versioning; + +/** + * APIs for cluster upgrade assessment reports under Microsoft.KubernetesConfiguration. + */ +#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "KubeInventory is a proxy resource provider under Microsoft.Kubernetes; no independent operations endpoint is registered." +@armProviderNamespace +@service(#{ title: "KubeInventoryClient" }) +@versioned(Versions) +@armCommonTypesVersion(Azure.ResourceManager.CommonTypes.Versions.v5) +namespace Microsoft.KubernetesConfiguration; + +/** + * The available API versions. + */ +enum Versions { + /** + * The 2026-06-15-preview API version. + */ + v2026_06_15_preview: "2026-06-15-preview", +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp new file mode 100644 index 000000000000..f83cb47c8742 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -0,0 +1,218 @@ +import "@typespec/rest"; +import "@typespec/http"; +import "@typespec/versioning"; +import "@azure-tools/typespec-azure-resource-manager"; +import "@azure-tools/typespec-azure-core"; + +using TypeSpec.Rest; +using TypeSpec.Http; +using TypeSpec.Versioning; +using Azure.Core; +using Azure.ResourceManager; +using Azure.ResourceManager.Foundations; + +namespace Microsoft.KubernetesConfiguration; + +// ─── Enums ─────────────────────────────────────────────────────────────────── + +/** + * Provisioning state of the resource. + */ +union ProvisioningState { + string, + + /** Resource has been created successfully. */ + Succeeded: "Succeeded", + + /** Resource creation failed. */ + Failed: "Failed", + + /** Resource creation was canceled. */ + Canceled: "Canceled", + + /** Resource is being updated. */ + Updating: "Updating", +} + +/** + * Severity of a check or upgrade-assessment finding. + */ +union Severity { + string, + + /** No issues found. */ + pass: "pass", + + /** Non-blocking issues found. */ + warning: "warning", + + /** Blocking issues found. */ + critical: "critical", + + /** Severity could not be determined. */ + Unknown: "unknown", +} + +/** + * Compatibility status of a cluster component with the target Kubernetes version. + */ +union CompatibilityStatus { + string, + + /** Component is compatible with the target version. */ + compatible: "compatible", + + /** Compatibility with the target version has not been tested. */ + untested: "untested", + + /** Component is incompatible with the target version. */ + incompatible: "incompatible", + + /** Compatibility status is unknown. */ + Unknown: "unknown", +} + +/** + * Category of a cluster readiness check. + */ +union ReadinessCategory { + string, + + /** Node status check. */ + NodeStatus: "NodeStatus", + + /** API server health check. */ + APIServerHealth: "APIServerHealth", + + /** Pod disruption budget check. */ + PodDisruptionBudget: "PodDisruptionBudget", + + /** Addon compatibility check. */ + Addon: "Addon", + + /** Storage compatibility check. */ + Storage: "Storage", + + /** Networking compatibility check. */ + Networking: "Networking", +} + +// ─── Supporting models ──────────────────────────────────────────────────────── + +/** + * Compatibility status of a single cluster component. + */ +model ComponentCompatibility { + /** Component name (e.g., 'containerd', 'calico'). */ + name: string; + + /** Installed component version. */ + version: string; + + /** Compatibility status of the component with the target Kubernetes version. */ + compatibilityStatus: CompatibilityStatus; + + /** Severity associated with the compatibility result. */ + severity: Severity; + + /** Minimum component version known to be compatible with targetKubernetesVersion. */ + minCompatibleVersion?: string; + + /** Additional notes about compatibility. */ + notes?: string; +} + +/** + * A deprecated Kubernetes API still in use in the cluster. + */ +model DeprecatedApiUsage { + /** API group (e.g., 'flowcontrol.apiserver.k8s.io'). */ + group: string; + + /** API version (e.g., 'v1beta3'). */ + version: string; + + /** Resource plural name (e.g., 'flowschemas'). */ + resource: string; + + /** Kubernetes release in which this API is removed (e.g., '1.32'). */ + removedRelease?: string; + + /** Lowercase HTTP verbs mapped to observed call counts. */ + usageMetrics?: Record; + + /** UTC timestamp of the last observed usage. */ + lastUsageObservedAt?: utcDateTime; + + /** Severity of this deprecated API usage. */ + severity: Severity; +} + +/** + * A single cluster readiness check result. + */ +model ReadinessCheck { + /** Category of the readiness check. */ + category: ReadinessCategory; + + /** + * Subject of the check (node name, workload namespace/name, etc.). + * Optional for cluster-wide checks. + */ + name?: string; + + /** Severity of the check result. */ + severity: Severity; + + /** Human-readable reason when severity is not 'pass'. */ + details?: string; +} + +/** + * Optional request body for the refresh action. + */ +model RefreshRequest { + /** + * Optional override for the target Kubernetes version. + * If omitted, the cluster's default upgrade target is used. + */ + targetKubernetesVersion?: string; +} + +// ─── Resource properties ───────────────────────────────────────────────────── + +/** + * Properties of the KubeInventory resource. + */ +model KubeInventoryProperties {} + +/** + * Properties of the UpgradeAssessment resource. + */ +model UpgradeAssessmentProperties { + /** Provisioning state of the resource. */ + @visibility(Lifecycle.Read) + provisioningState?: ProvisioningState; + + /** UTC timestamp when the cluster computed this assessment. */ + @visibility(Lifecycle.Read) + assessmentTime?: utcDateTime; + + /** Current Kubernetes version of the cluster (e.g., '1.29'). */ + kubernetesVersion: string; + + /** Target Kubernetes version evaluated for upgrade (e.g., '1.30'). */ + targetKubernetesVersion: string; + + /** Rolled-up severity across all checks. Highest severity wins. */ + overallSeverity?: Severity; + + /** Compatibility status of cluster components with the target version. */ + componentCompatibility?: ComponentCompatibility[]; + + /** Deprecated Kubernetes APIs still in use in the cluster. */ + deprecatedApis?: DeprecatedApiUsage[]; + + /** Cluster readiness check results. */ + readinessChecks?: ReadinessCheck[]; +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/tspconfig.yaml b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/tspconfig.yaml new file mode 100644 index 000000000000..61b69f1b9a03 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/tspconfig.yaml @@ -0,0 +1,50 @@ +parameters: + "service-dir": + default: "sdk/kubeinventory" +emit: + - "@azure-tools/typespec-autorest" +options: + "@azure-tools/typespec-autorest": + omit-unreachable-types: false + emitter-output-dir: "{project-root}" + output-file: "{version-status}/{version}/kubeInventory.json" + arm-types-dir: "{project-root}/../../../../common-types/resource-management" + emit-lro-options: "all" + examples-dir: "{project-root}/examples" + "@azure-tools/typespec-python": + service-dir: sdk/kubernetesconfiguration + emitter-output-dir: "{output-dir}/{service-dir}/azure-mgmt-kubernetesconfiguration-kubeinventory" + namespace: "azure.mgmt.kubernetesconfiguration.kubeinventory" + generate-test: true + generate-sample: true + flavor: "azure" + "@azure-tools/typespec-java": + service-dir: sdk/kubernetesconfiguration + emitter-output-dir: "{output-dir}/{service-dir}/azure-resourcemanager-kubernetesconfiguration-kubeinventory" + namespace: "com.azure.resourcemanager.kubernetesconfiguration.kubeinventory" + service-name: "KubeInventory" + flavor: azure + "@azure-tools/typespec-ts": + service-dir: sdk/kubernetesconfiguration + emitter-output-dir: "{output-dir}/{service-dir}/arm-kubernetesconfiguration-kubeinventory" + flavor: "azure" + compatibility-lro: true + experimental-extensible-enums: true + package-details: + name: "@azure/arm-kubernetesconfiguration-kubeinventory" + "@azure-tools/typespec-go": + service-dir: "sdk/resourcemanager/kubernetesconfiguration" + emitter-output-dir: "{output-dir}/{service-dir}/armkubeinventory" + module: "github.com/Azure/azure-sdk-for-go/{service-dir}/armkubeinventory" + fix-const-stuttering: true + flavor: "azure" + generate-samples: true + generate-fakes: true + head-as-boolean: true + inject-spans: true + "@azure-typespec/http-client-csharp-mgmt": + namespace: "Azure.ResourceManager.KubernetesConfiguration.KubeInventory" + emitter-output-dir: "{output-dir}/sdk/kubernetesconfiguration/{namespace}" +linter: + extends: + - "@azure-tools/typespec-azure-rulesets/resource-manager" From 9160baf1f24299b1942b5c9fc32a4c18d1901484 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Fri, 29 May 2026 15:45:56 +0000 Subject: [PATCH 02/39] Refactor to generic structure --- .../2026-06-15-preview/GetKubeInventory.json | 162 +++- .../2026-06-15-preview/ListKubeInventory.json | 140 +++- .../kubeInventory/models.tsp | 776 +++++++++++++++++- 3 files changed, 1037 insertions(+), 41 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index 9fc927d3e5ef..ffe906d160e6 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -24,7 +24,167 @@ "lastModifiedByType": "Application", "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, - "properties": {} + "properties": { + "resources": [ + { + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "nginx-6d4cf56db6-x7q2p", + "generateName": "nginx-6d4cf56db6-", + "namespace": "default", + "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "resourceVersion": "8834210", + "generation": 1, + "creationTimestamp": "2026-05-01T10:00:00Z", + "labels": { "app": "nginx", "pod-template-hash": "6d4cf56db6" }, + "annotations": { "kubectl.kubernetes.io/last-applied-configuration": "{}" }, + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "name": "nginx-6d4cf56db6", + "uid": "c3d4e5f6-a7b8-9012-cdef-012345678901", + "controller": true, + "blockOwnerDeletion": true + } + ] + }, + "spec": { + "nodeName": "aks-nodepool1-12345678-0", + "restartPolicy": "Always", + "serviceAccountName": "nginx-sa", + "dnsPolicy": "ClusterFirst", + "terminationGracePeriodSeconds": 30, + "securityContext": { + "runAsUser": 1000, + "runAsGroup": 3000, + "fsGroup": 2000, + "runAsNonRoot": true + }, + "tolerations": [ + { "key": "node.kubernetes.io/not-ready", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 }, + { "key": "node.kubernetes.io/unreachable", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 } + ], + "volumes": [ + { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config-map" }, + { "name": "tmp-dir", "sourceType": "emptyDir", "sizeLimit": "50Mi" }, + { "name": "kube-api-access", "sourceType": "projected" } + ], + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" }, + { "name": "https", "containerPort": 443, "protocol": "TCP" } + ], + "env": [ + { "name": "POD_NAMESPACE", "value": "default" }, + { "name": "NGINX_WORKER_PROCESSES", "value": "2" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "200m", "memory": "256Mi" } + }, + "volumeMounts": [ + { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true }, + { "name": "tmp-dir", "mountPath": "/tmp" }, + { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true, + "runAsUser": 1000, + "capabilities": { "drop": ["ALL"] } + } + } + ] + }, + "status": { + "phase": "Running", + "podIP": "10.244.1.42", + "hostIP": "10.240.0.4", + "startTime": "2026-05-01T10:00:05Z", + "qosClass": "Burstable", + "conditions": [ + { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" }, + { "type": "Ready", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, + { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, + { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" } + ], + "containerStatuses": [ + { + "name": "nginx", + "ready": true, + "restartCount": 0, + "started": true, + "image": "nginx:1.25.4", + "containerId": "containerd://a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", + "state": { "running": { "startedAt": "2026-05-01T10:00:17Z" } } + } + ] + } + }, + { + "apiVersion": "upgrade.config.io/v1alpha1", + "kind": "UpgradeAssessment", + "metadata": { + "name": "current", + "namespace": "kube-system", + "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", + "resourceVersion": "9124033", + "generation": 3, + "creationTimestamp": "2026-05-15T08:00:00Z", + "labels": { "managed-by": "azure-kube-inventory-agent" } + }, + "spec": { + "currentKubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30" + }, + "status": { + "assessmentTime": "2026-05-28T14:30:00Z", + "overallSeverity": "warning", + "conditions": [ + { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } + ], + "componentCompatibility": [ + { + "name": "containerd", + "version": "1.7.4", + "compatibilityStatus": "compatible", + "severity": "pass" + }, + { + "name": "calico", + "version": "3.26.1", + "compatibilityStatus": "untested", + "severity": "warning", + "notes": "Calico 3.26.x has not been validated against Kubernetes 1.30. Upgrade calico to 3.27+ before proceeding." + } + ], + "deprecatedApis": [ + { + "group": "flowcontrol.apiserver.k8s.io", + "version": "v1beta3", + "resource": "flowschemas", + "removedRelease": "1.32", + "severity": "warning", + "lastUsageObservedAt": "2026-05-27T22:15:00Z", + "usageMetrics": { "get": 42, "list": 18 } + } + ], + "readinessChecks": [ + { "category": "NodeStatus", "severity": "pass" }, + { "category": "APIServerHealth", "severity": "pass" }, + { "category": "PodDisruptionBudget", "severity": "warning", "name": "default/nginx-pdb", "details": "PDB allows zero disruptions; upgrade may stall." }, + { "category": "Addon", "severity": "pass" } + ] + } + } + ] + } } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index 3d93e5e2fc2d..6dcbaa91e749 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -25,7 +25,145 @@ "lastModifiedByType": "Application", "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, - "properties": {} + "properties": { + "resources": [ + { + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "coredns-5d78c9869d-r4pzt", + "generateName": "coredns-5d78c9869d-", + "namespace": "kube-system", + "uid": "d4e5f6a7-b8c9-0123-defa-234567890123", + "resourceVersion": "7712091", + "generation": 1, + "creationTimestamp": "2026-04-01T08:05:00Z", + "labels": { "k8s-app": "kube-dns", "pod-template-hash": "5d78c9869d" }, + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "name": "coredns-5d78c9869d", + "uid": "e5f6a7b8-c9d0-1234-efab-345678901234", + "controller": true, + "blockOwnerDeletion": true + } + ] + }, + "spec": { + "nodeName": "aks-nodepool1-12345678-1", + "restartPolicy": "Always", + "serviceAccountName": "coredns", + "dnsPolicy": "Default", + "terminationGracePeriodSeconds": 30, + "securityContext": { + "runAsNonRoot": true + }, + "tolerations": [ + { "key": "CriticalAddonsOnly", "operator": "Exists" }, + { "key": "node-role.kubernetes.io/control-plane", "operator": "Exists", "effect": "NoSchedule" } + ], + "volumes": [ + { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, + { "name": "kube-api-access", "sourceType": "projected" } + ], + "containers": [ + { + "name": "coredns", + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "ports": [ + { "name": "dns", "containerPort": 53, "protocol": "UDP" }, + { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, + { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "70Mi" }, + "limits": { "memory": "170Mi" } + }, + "volumeMounts": [ + { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, + { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "capabilities": { "add": ["NET_BIND_SERVICE"], "drop": ["ALL"] } + } + } + ] + }, + "status": { + "phase": "Running", + "podIP": "10.244.0.3", + "hostIP": "10.240.0.5", + "startTime": "2026-04-01T08:05:02Z", + "qosClass": "Burstable", + "conditions": [ + { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, + { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" } + ], + "containerStatuses": [ + { + "name": "coredns", + "ready": true, + "restartCount": 0, + "started": true, + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", + "state": { "running": { "startedAt": "2026-04-01T08:05:13Z" } } + } + ] + } + }, + { + "apiVersion": "upgrade.config.io/v1alpha1", + "kind": "UpgradeAssessment", + "metadata": { + "name": "current", + "namespace": "kube-system", + "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", + "resourceVersion": "9124033", + "generation": 3, + "creationTimestamp": "2026-05-15T08:00:00Z", + "labels": { "managed-by": "azure-kube-inventory-agent" } + }, + "spec": { + "currentKubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30" + }, + "status": { + "assessmentTime": "2026-05-28T14:30:00Z", + "overallSeverity": "pass", + "conditions": [ + { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } + ], + "componentCompatibility": [ + { + "name": "containerd", + "version": "1.7.4", + "compatibilityStatus": "compatible", + "severity": "pass" + }, + { + "name": "azure-cni", + "version": "1.5.29", + "compatibilityStatus": "compatible", + "severity": "pass" + } + ], + "deprecatedApis": [], + "readinessChecks": [ + { "category": "NodeStatus", "severity": "pass" }, + { "category": "APIServerHealth", "severity": "pass" }, + { "category": "PodDisruptionBudget", "severity": "pass" }, + { "category": "Addon", "severity": "pass" } + ] + } + } + ] + } } ], "nextLink": null diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index f83cb47c8742..2557dff39013 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -13,11 +13,9 @@ using Azure.ResourceManager.Foundations; namespace Microsoft.KubernetesConfiguration; -// ─── Enums ─────────────────────────────────────────────────────────────────── +// ─── Provisioning state ─────────────────────────────────────────────────────── -/** - * Provisioning state of the resource. - */ +/** Provisioning state of an ARM resource. */ union ProvisioningState { string, @@ -34,28 +32,26 @@ union ProvisioningState { Updating: "Updating", } -/** - * Severity of a check or upgrade-assessment finding. - */ +// ─── UpgradeAssessment enums ────────────────────────────────────────────────── + +/** Severity of an upgrade-assessment finding or readiness check. */ union Severity { string, /** No issues found. */ pass: "pass", - /** Non-blocking issues found. */ + /** Non-blocking issues found; upgrade is possible but action is recommended. */ warning: "warning", - /** Blocking issues found. */ + /** Blocking issues found; upgrade should not proceed without remediation. */ critical: "critical", /** Severity could not be determined. */ Unknown: "unknown", } -/** - * Compatibility status of a cluster component with the target Kubernetes version. - */ +/** Compatibility status of a cluster component with the target Kubernetes version. */ union CompatibilityStatus { string, @@ -72,9 +68,7 @@ union CompatibilityStatus { Unknown: "unknown", } -/** - * Category of a cluster readiness check. - */ +/** Category of a cluster readiness check. */ union ReadinessCategory { string, @@ -97,11 +91,9 @@ union ReadinessCategory { Networking: "Networking", } -// ─── Supporting models ──────────────────────────────────────────────────────── +// ─── UpgradeAssessment typed sub-models ────────────────────────────────────── -/** - * Compatibility status of a single cluster component. - */ +/** Compatibility status of a single cluster component with the target Kubernetes version. */ model ComponentCompatibility { /** Component name (e.g., 'containerd', 'calico'). */ name: string; @@ -109,10 +101,10 @@ model ComponentCompatibility { /** Installed component version. */ version: string; - /** Compatibility status of the component with the target Kubernetes version. */ + /** Compatibility of the component with the target Kubernetes version. */ compatibilityStatus: CompatibilityStatus; - /** Severity associated with the compatibility result. */ + /** Severity associated with this compatibility result. */ severity: Severity; /** Minimum component version known to be compatible with targetKubernetesVersion. */ @@ -122,9 +114,7 @@ model ComponentCompatibility { notes?: string; } -/** - * A deprecated Kubernetes API still in use in the cluster. - */ +/** A deprecated Kubernetes API still in use in the cluster. */ model DeprecatedApiUsage { /** API group (e.g., 'flowcontrol.apiserver.k8s.io'). */ group: string; @@ -144,13 +134,11 @@ model DeprecatedApiUsage { /** UTC timestamp of the last observed usage. */ lastUsageObservedAt?: utcDateTime; - /** Severity of this deprecated API usage. */ + /** Severity of continued use of this deprecated API. */ severity: Severity; } -/** - * A single cluster readiness check result. - */ +/** A single cluster readiness check result. */ model ReadinessCheck { /** Category of the readiness check. */ category: ReadinessCategory; @@ -168,37 +156,747 @@ model ReadinessCheck { details?: string; } -/** - * Optional request body for the refresh action. - */ +/** Optional request body for the UpgradeAssessment refresh action. */ model RefreshRequest { /** - * Optional override for the target Kubernetes version. + * Optional override for the target Kubernetes version to assess. * If omitted, the cluster's default upgrade target is used. */ targetKubernetesVersion?: string; } -// ─── Resource properties ───────────────────────────────────────────────────── +// ─── Common Kubernetes types ────────────────────────────────────────────────── + +/** A reference from a Kubernetes object to its owner (e.g., a ReplicaSet owning a Pod). */ +model OwnerReference { + /** API version of the owner (e.g., 'apps/v1'). */ + apiVersion: string; + + /** Kind of the owner (e.g., 'ReplicaSet'). */ + kind: string; + + /** Name of the owner object. */ + name: string; + + /** UID of the owner object. */ + uid: string; + + /** True when this owner manages the lifecycle of the referencing object. */ + controller?: boolean; + + /** If true, deletion of the owner is blocked until this reference is removed. */ + blockOwnerDeletion?: boolean; +} + +/** Metadata common to all Kubernetes objects (subset of ObjectMeta). */ +model KubernetesObjectMeta { + /** Name of the Kubernetes object, unique within its namespace. */ + name: string; + + /** + * Prefix used by the API server to generate a unique name when name is not provided. + * The generated name has the form '{generateName}{randomSuffix}'. + */ + generateName?: string; + + /** + * Namespace the object belongs to. + * Empty for cluster-scoped resources such as Node and Namespace. + */ + namespace?: string; + + /** Immutable UID assigned by the Kubernetes API server. */ + uid?: string; + + /** + * Opaque version string used for optimistic concurrency. + * Clients must treat this as opaque and pass it unmodified on updates. + */ + resourceVersion?: string; + + /** Sequence number incremented each time the object spec changes. */ + generation?: int64; + + /** UTC timestamp when the object was created. */ + creationTimestamp?: utcDateTime; + + /** + * UTC timestamp set when a graceful deletion has been requested. + * Absent when the object is not being deleted. + */ + deletionTimestamp?: utcDateTime; + + /** User-defined key/value pairs used for selection and grouping. */ + labels?: Record; + + /** Key/value pairs for non-identifying auxiliary metadata. */ + annotations?: Record; + + /** References to the objects that own this object (e.g., the ReplicaSet that owns a Pod). */ + ownerReferences?: OwnerReference[]; + + /** Named lifecycle hooks that must be resolved before the object is deleted. */ + finalizers?: string[]; +} + +/** Whether a Kubernetes condition is currently active. */ +union ConditionStatus { + string, + + /** Condition is currently true. */ + True: "True", + + /** Condition is currently false. */ + False: "False", + + /** Condition state cannot be determined. */ + Unknown: "Unknown", +} + +/** A Kubernetes-style status condition reported by a controller. */ +model KubernetesCondition { + /** Type of the condition (e.g., 'Ready', 'Available', 'Progressing'). */ + type: string; + + /** Whether the condition is currently active. */ + status: ConditionStatus; + + /** Machine-readable reason code for the current status. */ + reason?: string; + + /** Human-readable explanation of the current status. */ + message?: string; + + /** UTC timestamp of the last status transition. */ + lastTransitionTime?: utcDateTime; +} + +// ─── Generic overflow field ─────────────────────────────────────────────────── + +/** + * A generic recursive field node used to represent resource-specific fields + * that are not captured by the typed properties on KubernetesResourceSpec + * or KubernetesResourceStatus (e.g., uncommon fields and CRD-specific data). + */ +model KubernetesGenericField { + /** Field name. */ + name: string; + + /** + * Type of the field value: 'string', 'number', or 'boolean' for scalars; + * 'object' when fields[] is populated; 'array' when items[] is populated. + */ + type: string; + + /** Scalar value, populated when type is 'string', 'number', or 'boolean'. */ + value?: string; + + /** + * Child fields, populated when type is 'object'. + * Represents a nested key/value structure. + */ + @identifiers(#["name"]) + fields?: KubernetesGenericField[]; + + /** + * Array items, populated when type is 'array'. + * Each inner array represents one element, itself a set of named fields. + */ + items?: KubernetesGenericField[][]; +} + +// ─── Container support models ───────────────────────────────────────────────── + +/** A volume mount inside a container. */ +model VolumeMount { + /** Name matching a volume declared in the pod spec. */ + name: string; + + /** Absolute path inside the container where the volume is mounted. */ + mountPath: string; + + /** Mount the volume as read-only when true. */ + readOnly?: boolean; + + /** Sub-path within the volume to mount instead of the volume root. */ + subPath?: string; +} + +/** Linux capability set to add to or drop from a container's default capabilities. */ +model Capabilities { + /** Capabilities to add (e.g., 'NET_ADMIN'). */ + add?: string[]; + + /** Capabilities to remove (e.g., 'ALL'). */ + drop?: string[]; +} + +/** Security context applied to a single container. */ +model ContainerSecurityContext { + /** Linux capability adjustments for this container. */ + capabilities?: Capabilities; + + /** Mount the container's root filesystem as read-only when true. */ + readOnlyRootFilesystem?: boolean; + + /** Prevent the container process from gaining more privileges than its parent when false. */ + allowPrivilegeEscalation?: boolean; + + /** Require the container to run as a non-root user when true. */ + runAsNonRoot?: boolean; + + /** UID to run the container process as. */ + runAsUser?: int64; + + /** GID to run the container process as. */ + runAsGroup?: int64; +} + +/** Network protocol used by a container port. */ +union NetworkProtocol { + string, + + /** Transmission Control Protocol. */ + TCP: "TCP", + + /** User Datagram Protocol. */ + UDP: "UDP", + + /** Stream Control Transmission Protocol. */ + SCTP: "SCTP", +} + +/** A port exposed by a container. */ +model ContainerPort { + /** Port number exposed inside the container. */ + containerPort: int32; + + /** Network protocol for this port. */ + protocol?: NetworkProtocol; + + /** Optional name for this port. */ + name?: string; +} + +/** An environment variable set in a container. */ +model EnvVar { + /** Name of the environment variable. */ + name: string; + + /** Literal string value. */ + value?: string; +} + +/** CPU and memory resource declarations for a container. */ +model ContainerResourceRequirements { + /** Maximum resources the container may consume, in Kubernetes notation (e.g., '500m', '256Mi'). */ + limits?: Record; + + /** Minimum resources the container requires to be scheduled, in Kubernetes notation. */ + requests?: Record; +} + +/** Specification of a single container within a pod. */ +model ContainerSpec { + /** Name of the container, unique within the pod. */ + name: string; + + /** Container image reference (e.g., 'nginx:1.25'). */ + image: string; + + /** Ports to expose from the container. */ + @identifiers(#["name"]) + ports?: ContainerPort[]; + + /** Environment variables to set in the container. */ + @identifiers(#["name"]) + env?: EnvVar[]; + + /** Compute resource requests and limits. */ + resources?: ContainerResourceRequirements; + + /** Command to override the container default ENTRYPOINT. */ + command?: string[]; + + /** Arguments to override the container default CMD. */ + args?: string[]; + + /** Volume paths to mount inside the container. */ + @identifiers(#["name"]) + volumeMounts?: VolumeMount[]; + + /** Security context applied to this container. */ + securityContext?: ContainerSecurityContext; +} + +// ─── Pod-level support models ───────────────────────────────────────────────── + +/** + * A volume available to containers in a pod. + * The sourceType field identifies the kind of volume source + * (e.g., 'emptyDir', 'configMap', 'secret', 'persistentVolumeClaim', 'projected'). + */ +model Volume { + /** Name of the volume, referenced by container volumeMounts. */ + name: string; + + /** + * Kind of volume source + * (e.g., 'emptyDir', 'configMap', 'secret', 'persistentVolumeClaim', 'projected'). + */ + sourceType?: string; + + /** Primary reference for the volume source (e.g., ConfigMap name or PVC name). */ + source?: string; + + /** Storage size limit for emptyDir volumes (e.g., '50Mi'). */ + sizeLimit?: string; +} + +/** A toleration allows a pod to be scheduled on a node with a matching taint. */ +model Toleration { + /** Taint key the toleration applies to. Empty matches all keys. */ + key?: string; + + /** + * Operator to use when matching: 'Equal' matches when key and value both match; + * 'Exists' matches when the key is present regardless of value. + */ + operator?: string; + + /** Taint value matched when operator is 'Equal'. */ + value?: string; + + /** + * Taint effect this toleration applies to + * ('NoSchedule', 'PreferNoSchedule', or 'NoExecute'). Empty matches all effects. + */ + effect?: string; + + /** Seconds a pod tolerates a NoExecute taint before being evicted. */ + tolerationSeconds?: int64; +} + +/** Security context applied at the pod level, affecting all containers. */ +model PodSecurityContext { + /** GID of the owning group for volume mounts; processes also run as this GID. */ + fsGroup?: int64; + + /** UID to run all containers as. Overridden per-container by ContainerSecurityContext.runAsUser. */ + runAsUser?: int64; + + /** GID to run all containers as. */ + runAsGroup?: int64; + + /** Require all containers to run as non-root when true. */ + runAsNonRoot?: boolean; + + /** Supplemental GIDs applied to each container in addition to the primary GID. */ + supplementalGroups?: int64[]; +} + +/** State of a currently running container. */ +model ContainerStateRunning { + /** UTC timestamp when the container started. */ + startedAt?: utcDateTime; +} + +/** State of a terminated container. */ +model ContainerStateTerminated { + /** Exit code of the container process. */ + exitCode: int32; + + /** Signal that caused the container to terminate, if applicable. */ + signal?: int32; + + /** Machine-readable reason for termination (e.g., 'OOMKilled', 'Completed'). */ + reason?: string; + + /** Human-readable message about the termination. */ + message?: string; + + /** UTC timestamp when the container started its last execution. */ + startedAt?: utcDateTime; + + /** UTC timestamp when the container terminated. */ + finishedAt?: utcDateTime; +} + +/** State of a container that is not yet running. */ +model ContainerStateWaiting { + /** Machine-readable reason the container is not running (e.g., 'ContainerCreating', 'ImagePullBackOff'). */ + reason?: string; + + /** Human-readable message about the waiting state. */ + message?: string; +} + +/** Current or previous state of a container; exactly one of the three fields is populated. */ +model ContainerState { + /** Populated when the container is currently executing. */ + running?: ContainerStateRunning; + + /** Populated when the container has exited. */ + terminated?: ContainerStateTerminated; + + /** Populated when the container is not yet running. */ + waiting?: ContainerStateWaiting; +} + +/** Runtime status of a single container as reported in the pod status. */ +model ContainerStatus { + /** Name of the container. */ + name: string; + + /** True when the container has passed its readiness probe. */ + ready: boolean; + + /** Number of times the container has restarted since the pod was started. */ + restartCount: int32; + + /** Container image including digest as resolved by the runtime. */ + image?: string; + + /** Whether the container has passed its startup probe and is considered started. */ + started?: boolean; + + /** Current state of the container. */ + state?: ContainerState; + + /** Previous termination state of the container; populated after a restart. */ + lastState?: ContainerState; + + /** Opaque container runtime identifier (e.g., 'containerd://sha256:...'). */ + containerId?: string; +} + +// ─── Kubernetes resource kind ───────────────────────────────────────────────── + +/** Kind of a Kubernetes resource tracked in the cluster inventory. */ +union KubernetesResourceKind { + string, + + /** Core workload: Pod. */ + Pod: "Pod", + + /** Core workload: Deployment (apps/v1). */ + Deployment: "Deployment", + + /** Core workload: StatefulSet (apps/v1). */ + StatefulSet: "StatefulSet", + + /** Core workload: DaemonSet (apps/v1). */ + DaemonSet: "DaemonSet", + + /** Core workload: ReplicaSet (apps/v1). */ + ReplicaSet: "ReplicaSet", + + /** Networking: Service. */ + Service: "Service", + + /** Storage: PersistentVolumeClaim. */ + PersistentVolumeClaim: "PersistentVolumeClaim", + + /** Cluster infrastructure: Node. */ + Node: "Node", + + /** Cluster administration: Namespace. */ + Namespace: "Namespace", + + /** Azure Kubernetes upgrade assessment custom resource. */ + UpgradeAssessment: "UpgradeAssessment", + + /** Any other custom resource definition instance not enumerated above. */ + CustomResource: "CustomResource", +} + +// ─── Generic flat spec and status ──────────────────────────────────────────── + +/** + * Desired state (spec) of a Kubernetes resource. + * + * Well-known fields for native workloads (Pod, Deployment, Service, etc.) are typed + * directly. UpgradeAssessment spec fields are merged in as optional typed properties. + * Fields not covered by any typed property can be placed in additionalFields. + */ +model KubernetesResourceSpec { + // ── Pod / workload ────────────────────────────────────────────────────────── + + /** Name of the node the pod is scheduled on. Populated for Pod resources. */ + nodeName?: string; + + /** Pod restart policy (e.g., 'Always', 'OnFailure', 'Never'). Populated for Pod resources. */ + restartPolicy?: string; + + /** + * Containers belonging to the pod or pod template. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + @identifiers(#["name"]) + containers?: ContainerSpec[]; + + /** + * Init containers that run before app containers start. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + @identifiers(#["name"]) + initContainers?: ContainerSpec[]; + + /** Grace period in seconds before forcibly terminating the pod on deletion. */ + terminationGracePeriodSeconds?: int64; + + // ── Deployment / StatefulSet / DaemonSet ──────────────────────────────────── + + /** Desired number of pod replicas. Populated for Deployment and StatefulSet resources. */ + replicas?: int32; + + /** + * Headless service name governing StatefulSet pod network identity. + * Populated for StatefulSet resources. + */ + serviceName?: string; + + // ── Service ───────────────────────────────────────────────────────────────── + + /** + * How the service is exposed (e.g., 'ClusterIP', 'NodePort', 'LoadBalancer'). + * Populated for Service resources. + */ + serviceType?: string; + + /** Cluster-internal IP assigned to the service. Populated for Service resources. */ + clusterIP?: string; + + // ── Pod security and scheduling ───────────────────────────────────────────── + + /** + * Name of the ServiceAccount the pod runs as. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + serviceAccountName?: string; + + /** + * Tolerations allowing the pod to be scheduled on nodes with matching taints. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + tolerations?: Toleration[]; + + /** + * Volumes available to containers in the pod or pod template. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + @identifiers(#["name"]) + volumes?: Volume[]; + + /** + * DNS policy for the pod (e.g., 'ClusterFirst', 'Default', 'None'). + * Populated for Pod resources. + */ + dnsPolicy?: string; + + /** + * Security context applied at the pod level. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + securityContext?: PodSecurityContext; + + // ── Cross-kind ────────────────────────────────────────────────────────────── + + /** Node label selector constraining which nodes workload pods can be scheduled on. */ + nodeSelector?: Record; + + /** + * Pod label selector used by Deployment, StatefulSet, DaemonSet, and Service + * to identify the pods they manage or route to. + */ + selector?: Record; + + // ── UpgradeAssessment (kind = "UpgradeAssessment") ────────────────────────── + + /** + * Current Kubernetes version running on the cluster (e.g., '1.29'). + * Populated for UpgradeAssessment resources. + */ + currentKubernetesVersion?: string; + + /** + * Target Kubernetes version to evaluate for upgrade (e.g., '1.30'). + * Populated for UpgradeAssessment resources. + */ + targetKubernetesVersion?: string; + + // ── Generic overflow ──────────────────────────────────────────────────────── + + /** + * Additional resource-specific fields not represented by the typed properties above. + * Used for uncommon fields and custom resource definition instances. + */ + @identifiers(#["name"]) + additionalFields?: KubernetesGenericField[]; +} + +/** + * Observed state (status) of a Kubernetes resource, written by the controller. + * + * Well-known fields for native workloads (Pod, Deployment, Service, etc.) are typed + * directly. UpgradeAssessment status fields are merged in as optional typed properties. + * Fields not covered by any typed property can be placed in additionalFields. + */ +model KubernetesResourceStatus { + // ── Universal ─────────────────────────────────────────────────────────────── + + /** Conditions reported by the controller managing this resource. */ + conditions?: KubernetesCondition[]; + + /** + * High-level lifecycle phase of the resource. + * Examples: 'Running' / 'Pending' / 'Succeeded' / 'Failed' for Pod; + * 'Bound' / 'Pending' / 'Lost' for PersistentVolumeClaim; + * 'Active' / 'Terminating' for Namespace. + */ + phase?: string; + + /** Human-readable message summarizing the resource state. */ + message?: string; + + // ── Workload replica counters ──────────────────────────────────────────────── + + /** Number of pods ready to serve requests. Populated for Deployment, StatefulSet, DaemonSet. */ + readyReplicas?: int32; + + /** Number of pods available for at least minReadySeconds. Populated for Deployment, DaemonSet. */ + availableReplicas?: int32; + + // ── Pod ───────────────────────────────────────────────────────────────────── + + /** IP address allocated to the pod within the cluster. Populated for Pod resources. */ + podIP?: string; + + /** IP address of the node hosting the pod. Populated for Pod resources. */ + hostIP?: string; + + /** UTC timestamp when the pod was accepted by the scheduler. Populated for Pod resources. */ + startTime?: utcDateTime; + + /** + * Runtime status of each container in the pod. + * Populated for Pod resources. + */ + @identifiers(#["name"]) + containerStatuses?: ContainerStatus[]; + + /** + * QoS class assigned by Kubernetes based on resource requests and limits. + * One of 'Guaranteed', 'Burstable', or 'BestEffort'. Populated for Pod resources. + */ + qosClass?: string; + + /** + * Most recent generation observed by the controller. + * Populated for Deployment, StatefulSet, DaemonSet, and Pod resources. + */ + observedGeneration?: int64; + + // ── UpgradeAssessment (kind = "UpgradeAssessment") ────────────────────────── + + /** + * UTC timestamp when the in-cluster agent last computed this assessment. + * Populated for UpgradeAssessment resources. + */ + @visibility(Lifecycle.Read) + assessmentTime?: utcDateTime; + + /** + * Rolled-up severity across all checks; highest severity wins. + * Populated for UpgradeAssessment resources. + */ + overallSeverity?: Severity; + + /** + * Per-component compatibility results with the target Kubernetes version. + * Populated for UpgradeAssessment resources. + */ + componentCompatibility?: ComponentCompatibility[]; + + /** + * Deprecated Kubernetes APIs still in use in the cluster. + * Populated for UpgradeAssessment resources. + */ + deprecatedApis?: DeprecatedApiUsage[]; + + /** + * Cluster readiness check results. + * Populated for UpgradeAssessment resources. + */ + readinessChecks?: ReadinessCheck[]; + + // ── Generic overflow ──────────────────────────────────────────────────────── + + /** + * Additional resource-specific status fields not represented by the typed properties above. + * Used for uncommon fields and custom resource definition instances. + */ + @identifiers(#["name"]) + additionalFields?: KubernetesGenericField[]; +} + +/** + * A generic Kubernetes resource object as stored in the cluster inventory. + * Follows the Kubernetes object model: apiVersion + kind + metadata + spec + status. + */ +model KubernetesResource { + /** + * Kubernetes API version of this resource + * (e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1'). + */ + apiVersion: string; + + /** Kind of the Kubernetes resource. */ + kind: KubernetesResourceKind; + + /** Standard Kubernetes object metadata. */ + metadata: KubernetesObjectMeta; + + /** Desired state of the resource. */ + spec?: KubernetesResourceSpec; + + /** Observed state of the resource, written by the controller. */ + status?: KubernetesResourceStatus; +} + +// ─── ARM resource properties ────────────────────────────────────────────────── /** * Properties of the KubeInventory resource. + * Holds a full snapshot of Kubernetes resources from the cluster, + * including native workloads (Pod, Deployment, Service, etc.) + * and custom resources such as UpgradeAssessment. */ -model KubeInventoryProperties {} +model KubeInventoryProperties { + /** + * Flat list of all Kubernetes resources in the cluster inventory. + * Each entry carries its own apiVersion, kind, metadata, spec, and status. + */ + @identifiers(#["metadata"]) + resources?: KubernetesResource[]; +} /** - * Properties of the UpgradeAssessment resource. + * Properties of the UpgradeAssessment ARM resource. + * This is the ARM resource model for the standalone UpgradeAssessment endpoint. + * The same assessment data also appears inside KubeInventory.properties.resources[] + * as a KubernetesResource with kind 'UpgradeAssessment'. */ model UpgradeAssessmentProperties { - /** Provisioning state of the resource. */ + /** Provisioning state of the UpgradeAssessment resource. */ @visibility(Lifecycle.Read) provisioningState?: ProvisioningState; - /** UTC timestamp when the cluster computed this assessment. */ + /** UTC timestamp when the in-cluster agent last computed this assessment. */ @visibility(Lifecycle.Read) assessmentTime?: utcDateTime; - /** Current Kubernetes version of the cluster (e.g., '1.29'). */ + /** Current Kubernetes version running on the cluster (e.g., '1.29'). */ kubernetesVersion: string; /** Target Kubernetes version evaluated for upgrade (e.g., '1.30'). */ @@ -207,7 +905,7 @@ model UpgradeAssessmentProperties { /** Rolled-up severity across all checks. Highest severity wins. */ overallSeverity?: Severity; - /** Compatibility status of cluster components with the target version. */ + /** Per-component compatibility results with the target Kubernetes version. */ componentCompatibility?: ComponentCompatibility[]; /** Deprecated Kubernetes APIs still in use in the cluster. */ From 45653960aa7bbe4541c88fe9a556af4efc513e60 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Fri, 29 May 2026 19:31:38 +0000 Subject: [PATCH 03/39] Remove unused paths --- .../kubeInventory/UpgradeAssessment.tsp | 165 ------------------ .../CreateOrUpdateUpgradeAssessment.json | 133 -------------- .../GetUpgradeAssessment.json | 80 --------- .../ListUpgradeAssessments.json | 50 ------ .../RefreshUpgradeAssessment.json | 67 ------- .../kubeInventory/main.tsp | 1 - .../kubeInventory/models.tsp | 41 ----- 7 files changed, 537 deletions(-) delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/UpgradeAssessment.tsp delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/CreateOrUpdateUpgradeAssessment.json delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListUpgradeAssessments.json delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/RefreshUpgradeAssessment.json diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/UpgradeAssessment.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/UpgradeAssessment.tsp deleted file mode 100644 index 8b4befb8718e..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/UpgradeAssessment.tsp +++ /dev/null @@ -1,165 +0,0 @@ -import "@azure-tools/typespec-azure-core"; -import "@azure-tools/typespec-azure-resource-manager"; -import "@typespec/rest"; -import "./models.tsp"; -import "./KubeInventory.tsp"; - -using TypeSpec.Rest; -using Azure.Core; -using Azure.ResourceManager; -using Azure.ResourceManager.Foundations; -using TypeSpec.Http; - -namespace Microsoft.KubernetesConfiguration; - -/** - * Periodic, cluster-computed Kubernetes upgrade assessment. - */ -@parentResource(KubeInventory) -model UpgradeAssessment is Azure.ResourceManager.ProxyResource { - ...ResourceNameParameter< - Resource = UpgradeAssessment, - KeyName = "assessmentName", - SegmentName = "upgradeAssessments", - NamePattern = "" - >; -} - -/** - * Operations alias for UpgradeAssessment using the cluster + KubeInventory extension routing pattern. - * Generates URLs of the form: - * .../providers/Microsoft.KubernetesConfiguration/kubeInventory/{kubeInventoryName}/upgradeAssessments[/{assessmentName}] - */ -alias UpgradeAssessmentOps = Azure.ResourceManager.Legacy.ExtensionOperations< - { - ...ApiVersionParameter; - ...SubscriptionIdParameter; - ...ResourceGroupParameter; - - /** - * The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes, - * Microsoft.HybridContainerService. - */ - @path - @segment("providers") - @key - clusterRp: string; - - /** - * The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters, - * provisionedClusters, appliances. - */ - @key - @path - @pattern("^[a-zA-Z]*$") - clusterResourceName: string; - - /** - * The name of the kubernetes cluster. - */ - @key - @path - @pattern("^.*") - clusterName: string; - }, - { - ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; - ...ParentKeysOf; - }, - { - ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; - ...ParentKeysOf; - ...KeysOf; - } ->; - -/** - * RoutedOperations alias used for the refresh action on a specific UpgradeAssessment instance. - * Includes all path params up to and including assessmentName so the action route resolves correctly. - */ -alias UpgradeAssessmentBuildingOps = Azure.ResourceManager.Legacy.RoutedOperations< - { - ...ApiVersionParameter; - ...SubscriptionIdParameter; - ...ResourceGroupParameter; - - /** - * The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes, - * Microsoft.HybridContainerService. - */ - @path - @segment("providers") - @key - clusterRp: string; - - /** - * The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters, - * provisionedClusters, appliances. - */ - @key - @path - @pattern("^[a-zA-Z]*$") - clusterResourceName: string; - - /** - * The name of the kubernetes cluster. - */ - @key - @path - @pattern("^.*") - clusterName: string; - - ...KeysOf; - ...KeysOf; - }, - {}, - ResourceRoute = #{ - route: "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory", - } ->; - -@armResourceOperations(#{ allowStaticRoutes: true, omitTags: true }) -interface UpgradeAssessments { - /** - * Get the upgrade assessment for a cluster. - */ - @tag("UpgradeAssessments") - get is UpgradeAssessmentOps.Read; - - /** - * List upgrade assessments under a kubeInventory (currently always a single 'current'). - */ - @tag("UpgradeAssessments") - list is UpgradeAssessmentOps.List; - - /** - * Internal write path used by the in-cluster agent to publish or update an upgrade assessment. - * End users do NOT have RBAC for this operation; access is restricted to the cluster's managed identity. - */ - @tag("UpgradeAssessments") - createOrUpdate is UpgradeAssessmentOps.CreateOrUpdateAsync; - - /** - * Trigger the in-cluster agent to recompute the upgrade assessment. - * Long-running; only one refresh per cluster may be in flight at a time (returns 409 otherwise). - */ - @tag("UpgradeAssessments") - @post - @route("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory/{kubeInventoryName}/upgradeAssessments/{assessmentName}/refresh") - refresh is UpgradeAssessmentBuildingOps.ActionAsync< - UpgradeAssessment, - RefreshRequest, - | ArmAcceptedLroResponse> - | ArmResponse - >; -} - -@@doc(UpgradeAssessment.name, "Name of the UpgradeAssessment resource."); -@@doc( - UpgradeAssessment.properties, - "Properties of the UpgradeAssessment resource." -); -@@doc( - UpgradeAssessments.createOrUpdate::parameters.resource, - "The UpgradeAssessment resource body." -); diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/CreateOrUpdateUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/CreateOrUpdateUpgradeAssessment.json deleted file mode 100644 index a243fca802d4..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/CreateOrUpdateUpgradeAssessment.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "title": "Create or Update UpgradeAssessment", - "operationId": "UpgradeAssessments_CreateOrUpdate", - "parameters": { - "subscriptionId": "subId1", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", - "clusterName": "clusterName1", - "kubeInventoryName": "default", - "assessmentName": "current", - "api-version": "2026-06-15-preview", - "resource": { - "properties": { - "kubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30", - "overallSeverity": "critical", - "componentCompatibility": [ - { - "name": "containerd", - "version": "1.6.8", - "compatibilityStatus": "incompatible", - "severity": "critical", - "minCompatibleVersion": "1.7.0", - "notes": "containerd 1.6.x is not compatible with Kubernetes 1.30. Upgrade to 1.7.x required." - } - ], - "deprecatedApis": [ - { - "group": "flowcontrol.apiserver.k8s.io", - "version": "v1beta3", - "resource": "flowschemas", - "removedRelease": "1.32", - "usageMetrics": { - "get": 12, - "list": 45 - }, - "lastUsageObservedAt": "2026-06-09T14:22:00.000Z", - "severity": "warning" - } - ], - "readinessChecks": [ - { - "category": "NodeStatus", - "severity": "pass" - }, - { - "category": "Storage", - "name": "node-pool-1", - "severity": "critical", - "details": "Node disk pressure detected; upgrade may fail." - } - ] - } - } - }, - "responses": { - "200": { - "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", - "systemData": { - "createdBy": "cluster-managed-identity", - "createdByType": "Application", - "createdAt": "2026-06-01T10:00:00.000Z", - "lastModifiedBy": "cluster-managed-identity", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-10T09:00:00.000Z" - }, - "properties": { - "provisioningState": "Succeeded", - "assessmentTime": "2026-06-10T09:00:00.000Z", - "kubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30", - "overallSeverity": "critical", - "componentCompatibility": [ - { - "name": "containerd", - "version": "1.6.8", - "compatibilityStatus": "incompatible", - "severity": "critical", - "minCompatibleVersion": "1.7.0", - "notes": "containerd 1.6.x is not compatible with Kubernetes 1.30. Upgrade to 1.7.x required." - } - ], - "deprecatedApis": [ - { - "group": "flowcontrol.apiserver.k8s.io", - "version": "v1beta3", - "resource": "flowschemas", - "removedRelease": "1.32", - "usageMetrics": { - "get": 12, - "list": 45 - }, - "lastUsageObservedAt": "2026-06-09T14:22:00.000Z", - "severity": "warning" - } - ], - "readinessChecks": [ - { - "category": "NodeStatus", - "severity": "pass" - }, - { - "category": "Storage", - "name": "node-pool-1", - "severity": "critical", - "details": "Node disk pressure detected; upgrade may fail." - } - ] - } - } - }, - "201": { - "headers": { - "Azure-AsyncOperation": "https://management.azure.com/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current/operations/operationId1?api-version=2026-06-15-preview", - "Retry-After": 10 - }, - "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", - "properties": { - "provisioningState": "Updating", - "kubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30" - } - } - } - } -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json deleted file mode 100644 index f703f049f3c6..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "title": "Get UpgradeAssessment", - "operationId": "UpgradeAssessments_Get", - "parameters": { - "subscriptionId": "subId1", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", - "clusterName": "clusterName1", - "kubeInventoryName": "default", - "assessmentName": "current", - "api-version": "2026-06-15-preview" - }, - "responses": { - "200": { - "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", - "systemData": { - "createdBy": "cluster-managed-identity", - "createdByType": "Application", - "createdAt": "2026-06-01T10:00:00.000Z", - "lastModifiedBy": "cluster-managed-identity", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-10T08:30:00.000Z" - }, - "properties": { - "provisioningState": "Succeeded", - "assessmentTime": "2026-06-10T08:30:00.000Z", - "kubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30", - "overallSeverity": "warning", - "componentCompatibility": [ - { - "name": "containerd", - "version": "1.7.2", - "compatibilityStatus": "compatible", - "severity": "pass", - "minCompatibleVersion": "1.7.0" - }, - { - "name": "calico", - "version": "3.25.0", - "compatibilityStatus": "untested", - "severity": "warning", - "notes": "Calico 3.25.x has not been validated against Kubernetes 1.30. Consider upgrading to 3.27.x." - } - ], - "deprecatedApis": [ - { - "group": "flowcontrol.apiserver.k8s.io", - "version": "v1beta3", - "resource": "flowschemas", - "removedRelease": "1.32", - "usageMetrics": { - "get": 12, - "list": 45 - }, - "lastUsageObservedAt": "2026-06-09T14:22:00.000Z", - "severity": "warning" - } - ], - "readinessChecks": [ - { - "category": "NodeStatus", - "severity": "pass" - }, - { - "category": "PodDisruptionBudget", - "name": "default/my-app", - "severity": "warning", - "details": "PDB allows 0 disruptions; upgrade may be blocked until PDB is relaxed." - } - ] - } - } - } - } -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListUpgradeAssessments.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListUpgradeAssessments.json deleted file mode 100644 index 4cbe74786dac..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListUpgradeAssessments.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "title": "List UpgradeAssessments", - "operationId": "UpgradeAssessments_List", - "parameters": { - "subscriptionId": "subId1", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", - "clusterName": "clusterName1", - "kubeInventoryName": "default", - "api-version": "2026-06-15-preview" - }, - "responses": { - "200": { - "body": { - "value": [ - { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", - "systemData": { - "createdBy": "cluster-managed-identity", - "createdByType": "Application", - "createdAt": "2026-06-01T10:00:00.000Z", - "lastModifiedBy": "cluster-managed-identity", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-10T08:30:00.000Z" - }, - "properties": { - "provisioningState": "Succeeded", - "assessmentTime": "2026-06-10T08:30:00.000Z", - "kubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30", - "overallSeverity": "warning", - "componentCompatibility": [], - "deprecatedApis": [], - "readinessChecks": [ - { - "category": "NodeStatus", - "severity": "pass" - } - ] - } - } - ], - "nextLink": null - } - } - } -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/RefreshUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/RefreshUpgradeAssessment.json deleted file mode 100644 index 9afab21b5916..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/RefreshUpgradeAssessment.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "title": "Refresh UpgradeAssessment", - "operationId": "UpgradeAssessments_Refresh", - "parameters": { - "subscriptionId": "subId1", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", - "clusterName": "clusterName1", - "kubeInventoryName": "default", - "assessmentName": "current", - "api-version": "2026-06-15-preview", - "body": { - "targetKubernetesVersion": "1.30" - } - }, - "responses": { - "202": { - "headers": { - "Azure-AsyncOperation": "https://management.azure.com/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current/operations/operationId1?api-version=2026-06-15-preview", - "Retry-After": 30 - } - }, - "200": { - "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default/upgradeAssessments/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/kubeInventory/upgradeAssessments", - "systemData": { - "createdBy": "cluster-managed-identity", - "createdByType": "Application", - "createdAt": "2026-06-01T10:00:00.000Z", - "lastModifiedBy": "cluster-managed-identity", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-10T09:15:00.000Z" - }, - "properties": { - "provisioningState": "Succeeded", - "assessmentTime": "2026-06-10T09:15:00.000Z", - "kubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30", - "overallSeverity": "pass", - "componentCompatibility": [ - { - "name": "containerd", - "version": "1.7.4", - "compatibilityStatus": "compatible", - "severity": "pass", - "minCompatibleVersion": "1.7.0" - } - ], - "deprecatedApis": [], - "readinessChecks": [ - { - "category": "NodeStatus", - "severity": "pass" - }, - { - "category": "APIServerHealth", - "severity": "pass" - } - ] - } - } - } - } -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp index adc027afb308..2192f63fac4d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp @@ -4,7 +4,6 @@ import "@azure-tools/typespec-azure-core"; import "@azure-tools/typespec-azure-resource-manager"; import "./models.tsp"; import "./KubeInventory.tsp"; -import "./UpgradeAssessment.tsp"; using TypeSpec.Rest; using TypeSpec.Http; diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index 2557dff39013..d57caabb5b3e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -156,15 +156,6 @@ model ReadinessCheck { details?: string; } -/** Optional request body for the UpgradeAssessment refresh action. */ -model RefreshRequest { - /** - * Optional override for the target Kubernetes version to assess. - * If omitted, the cluster's default upgrade target is used. - */ - targetKubernetesVersion?: string; -} - // ─── Common Kubernetes types ────────────────────────────────────────────────── /** A reference from a Kubernetes object to its owner (e.g., a ReplicaSet owning a Pod). */ @@ -881,36 +872,4 @@ model KubeInventoryProperties { resources?: KubernetesResource[]; } -/** - * Properties of the UpgradeAssessment ARM resource. - * This is the ARM resource model for the standalone UpgradeAssessment endpoint. - * The same assessment data also appears inside KubeInventory.properties.resources[] - * as a KubernetesResource with kind 'UpgradeAssessment'. - */ -model UpgradeAssessmentProperties { - /** Provisioning state of the UpgradeAssessment resource. */ - @visibility(Lifecycle.Read) - provisioningState?: ProvisioningState; - - /** UTC timestamp when the in-cluster agent last computed this assessment. */ - @visibility(Lifecycle.Read) - assessmentTime?: utcDateTime; - /** Current Kubernetes version running on the cluster (e.g., '1.29'). */ - kubernetesVersion: string; - - /** Target Kubernetes version evaluated for upgrade (e.g., '1.30'). */ - targetKubernetesVersion: string; - - /** Rolled-up severity across all checks. Highest severity wins. */ - overallSeverity?: Severity; - - /** Per-component compatibility results with the target Kubernetes version. */ - componentCompatibility?: ComponentCompatibility[]; - - /** Deprecated Kubernetes APIs still in use in the cluster. */ - deprecatedApis?: DeprecatedApiUsage[]; - - /** Cluster readiness check results. */ - readinessChecks?: ReadinessCheck[]; -} From fca5ee8394f2d32809090deb8ae65fa0ec247d63 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Fri, 29 May 2026 19:48:29 +0000 Subject: [PATCH 04/39] Fix issues --- specification/kubernetesconfiguration/cspell.yaml | 2 ++ .../examples/2026-06-15-preview/GetKubeInventory.json | 4 ++-- .../2026-06-15-preview/ListKubeInventory.json | 4 ++-- .../kubeInventory/models.tsp | 2 +- .../resource-manager/readme.md | 11 ++++++++++- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/specification/kubernetesconfiguration/cspell.yaml b/specification/kubernetesconfiguration/cspell.yaml index d2472a474f77..6caaa990c9f1 100644 --- a/specification/kubernetesconfiguration/cspell.yaml +++ b/specification/kubernetesconfiguration/cspell.yaml @@ -8,6 +8,8 @@ version: '0.2' import: - ../../cspell.yaml words: + - armkubeinventory + - kubeinventory - kubernetesconfiguration - kustomization - kustomizations diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index ffe906d160e6..d621fa3c4346 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -32,7 +32,7 @@ "metadata": { "name": "nginx-6d4cf56db6-x7q2p", "generateName": "nginx-6d4cf56db6-", - "namespace": "default", + "namespaceName": "default", "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "resourceVersion": "8834210", "generation": 1, @@ -132,7 +132,7 @@ "kind": "UpgradeAssessment", "metadata": { "name": "current", - "namespace": "kube-system", + "namespaceName": "kube-system", "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", "resourceVersion": "9124033", "generation": 3, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index 6dcbaa91e749..dfe200fa52e8 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -33,7 +33,7 @@ "metadata": { "name": "coredns-5d78c9869d-r4pzt", "generateName": "coredns-5d78c9869d-", - "namespace": "kube-system", + "namespaceName": "kube-system", "uid": "d4e5f6a7-b8c9-0123-defa-234567890123", "resourceVersion": "7712091", "generation": 1, @@ -122,7 +122,7 @@ "kind": "UpgradeAssessment", "metadata": { "name": "current", - "namespace": "kube-system", + "namespaceName": "kube-system", "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", "resourceVersion": "9124033", "generation": 3, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index d57caabb5b3e..2a9c8d0f28d0 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -194,7 +194,7 @@ model KubernetesObjectMeta { * Namespace the object belongs to. * Empty for cluster-scoped resources such as Node and Namespace. */ - namespace?: string; + namespaceName?: string; /** Immutable UID assigned by the Kubernetes API server. */ uid?: string; diff --git a/specification/kubernetesconfiguration/resource-manager/readme.md b/specification/kubernetesconfiguration/resource-manager/readme.md index fc6e6e92a095..4da534f6bec4 100644 --- a/specification/kubernetesconfiguration/resource-manager/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/readme.md @@ -28,7 +28,16 @@ These are the global settings for the KubernetesConfiguration. title: SourceControlConfigurationClient description: KubernetesConfiguration Client openapi-type: arm -tag: package-preview-2024-04 +tag: package-preview-2026-06-15 +``` + +### Tag: package-preview-2026-06-15 + +These settings apply only when `--tag=package-preview-2026-06-15` is specified on the command line. + +``` yaml $(tag) == 'package-preview-2026-06-15' +input-file: + - Microsoft.KubernetesConfiguration/preview/2026-06-15-preview/kubeInventory.json ``` ### Tag: package-preview-2024-04 From 50617fd125e74f6ea9005b7abeeb5d19397ab7ce Mon Sep 17 00:00:00 2001 From: root Date: Fri, 29 May 2026 21:12:59 +0000 Subject: [PATCH 05/39] refactor --- .../2026-06-15-preview/GetKubeInventory.json | 258 +++++++---------- .../2026-06-15-preview/ListKubeInventory.json | 274 +++++++++--------- .../kubeInventory/models.tsp | 148 ++++++---- 3 files changed, 336 insertions(+), 344 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index d621fa3c4346..74ec4de187f0 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -7,14 +7,14 @@ "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "default", + "kubeInventoryName": "pod-nginx-6d4cf56db6-x7q2p-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default", - "name": "default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/pod-nginx-6d4cf56db6-x7q2p-default", + "name": "pod-nginx-6d4cf56db6-x7q2p-default", "type": "Microsoft.KubernetesConfiguration/kubeInventory", "systemData": { "createdBy": "string", @@ -25,165 +25,111 @@ "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, "properties": { - "resources": [ - { - "apiVersion": "v1", - "kind": "Pod", - "metadata": { - "name": "nginx-6d4cf56db6-x7q2p", - "generateName": "nginx-6d4cf56db6-", - "namespaceName": "default", - "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "resourceVersion": "8834210", - "generation": 1, - "creationTimestamp": "2026-05-01T10:00:00Z", - "labels": { "app": "nginx", "pod-template-hash": "6d4cf56db6" }, - "annotations": { "kubectl.kubernetes.io/last-applied-configuration": "{}" }, - "ownerReferences": [ - { - "apiVersion": "apps/v1", - "kind": "ReplicaSet", - "name": "nginx-6d4cf56db6", - "uid": "c3d4e5f6-a7b8-9012-cdef-012345678901", - "controller": true, - "blockOwnerDeletion": true - } - ] - }, - "spec": { - "nodeName": "aks-nodepool1-12345678-0", - "restartPolicy": "Always", - "serviceAccountName": "nginx-sa", - "dnsPolicy": "ClusterFirst", - "terminationGracePeriodSeconds": 30, - "securityContext": { - "runAsUser": 1000, - "runAsGroup": 3000, - "fsGroup": 2000, - "runAsNonRoot": true - }, - "tolerations": [ - { "key": "node.kubernetes.io/not-ready", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 }, - { "key": "node.kubernetes.io/unreachable", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 } - ], - "volumes": [ - { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config-map" }, - { "name": "tmp-dir", "sourceType": "emptyDir", "sizeLimit": "50Mi" }, - { "name": "kube-api-access", "sourceType": "projected" } - ], - "containers": [ - { - "name": "nginx", - "image": "nginx:1.25.4", - "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" }, - { "name": "https", "containerPort": 443, "protocol": "TCP" } - ], - "env": [ - { "name": "POD_NAMESPACE", "value": "default" }, - { "name": "NGINX_WORKER_PROCESSES", "value": "2" } - ], - "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "200m", "memory": "256Mi" } - }, - "volumeMounts": [ - { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true }, - { "name": "tmp-dir", "mountPath": "/tmp" }, - { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } - ], - "securityContext": { - "allowPrivilegeEscalation": false, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true, - "runAsUser": 1000, - "capabilities": { "drop": ["ALL"] } - } - } - ] - }, - "status": { - "phase": "Running", - "podIP": "10.244.1.42", - "hostIP": "10.240.0.4", - "startTime": "2026-05-01T10:00:05Z", - "qosClass": "Burstable", - "conditions": [ - { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" }, - { "type": "Ready", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, - { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, - { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" } - ], - "containerStatuses": [ - { - "name": "nginx", - "ready": true, - "restartCount": 0, - "started": true, - "image": "nginx:1.25.4", - "containerId": "containerd://a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", - "state": { "running": { "startedAt": "2026-05-01T10:00:17Z" } } - } - ] + "provisioningState": "Succeeded", + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "nginx-6d4cf56db6-x7q2p", + "generateName": "nginx-6d4cf56db6-", + "namespaceName": "default", + "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "resourceVersion": "8834210", + "generation": 1, + "creationTimestamp": "2026-05-01T10:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" }, + { "name": "pod-template-hash", "value": "6d4cf56db6" } + ], + "annotations": [ + { "name": "kubectl.kubernetes.io/last-applied-configuration", "value": "{}" } + ], + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "name": "nginx-6d4cf56db6", + "uid": "c3d4e5f6-a7b8-9012-cdef-012345678901", + "controller": true, + "blockOwnerDeletion": true } + ] + }, + "spec": { + "nodeName": "aks-nodepool1-12345678-0", + "restartPolicy": "Always", + "serviceAccountName": "nginx-sa", + "dnsPolicy": "ClusterFirst", + "terminationGracePeriodSeconds": 30, + "securityContext": { + "runAsUser": 1000, + "runAsGroup": 3000, + "fsGroup": 2000, + "runAsNonRoot": true }, - { - "apiVersion": "upgrade.config.io/v1alpha1", - "kind": "UpgradeAssessment", - "metadata": { - "name": "current", - "namespaceName": "kube-system", - "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", - "resourceVersion": "9124033", - "generation": 3, - "creationTimestamp": "2026-05-15T08:00:00Z", - "labels": { "managed-by": "azure-kube-inventory-agent" } - }, - "spec": { - "currentKubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30" - }, - "status": { - "assessmentTime": "2026-05-28T14:30:00Z", - "overallSeverity": "warning", - "conditions": [ - { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } + "tolerations": [ + { "key": "node.kubernetes.io/not-ready", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 }, + { "key": "node.kubernetes.io/unreachable", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 } + ], + "volumes": [ + { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config-map" }, + { "name": "tmp-dir", "sourceType": "emptyDir", "sizeLimit": "50Mi" }, + { "name": "kube-api-access", "sourceType": "projected" } + ], + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" }, + { "name": "https", "containerPort": 443, "protocol": "TCP" } ], - "componentCompatibility": [ - { - "name": "containerd", - "version": "1.7.4", - "compatibilityStatus": "compatible", - "severity": "pass" - }, - { - "name": "calico", - "version": "3.26.1", - "compatibilityStatus": "untested", - "severity": "warning", - "notes": "Calico 3.26.x has not been validated against Kubernetes 1.30. Upgrade calico to 3.27+ before proceeding." - } + "env": [ + { "name": "POD_NAMESPACE", "value": "default" }, + { "name": "NGINX_WORKER_PROCESSES", "value": "2" } ], - "deprecatedApis": [ - { - "group": "flowcontrol.apiserver.k8s.io", - "version": "v1beta3", - "resource": "flowschemas", - "removedRelease": "1.32", - "severity": "warning", - "lastUsageObservedAt": "2026-05-27T22:15:00Z", - "usageMetrics": { "get": 42, "list": 18 } - } + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "200m", "memory": "256Mi" } + }, + "volumeMounts": [ + { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true }, + { "name": "tmp-dir", "mountPath": "/tmp" }, + { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } ], - "readinessChecks": [ - { "category": "NodeStatus", "severity": "pass" }, - { "category": "APIServerHealth", "severity": "pass" }, - { "category": "PodDisruptionBudget", "severity": "warning", "name": "default/nginx-pdb", "details": "PDB allows zero disruptions; upgrade may stall." }, - { "category": "Addon", "severity": "pass" } - ] + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true, + "runAsUser": 1000, + "capabilities": { "drop": ["ALL"] } + } + } + ] + }, + "status": { + "phase": "Running", + "podIp": "10.244.1.42", + "hostIp": "10.240.0.4", + "startTime": "2026-05-01T10:00:05Z", + "qosClass": "Burstable", + "conditions": [ + { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" }, + { "type": "Ready", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, + { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, + { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" } + ], + "containerStatuses": [ + { + "name": "nginx", + "ready": true, + "restartCount": 0, + "started": true, + "image": "nginx:1.25.4", + "containerId": "containerd://a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", + "state": { "running": { "startedAt": "2026-05-01T10:00:17Z" } } } - } - ] + ] + } } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index dfe200fa52e8..f7d26607d3e8 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -14,8 +14,8 @@ "body": { "value": [ { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/default", - "name": "default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/pod-coredns-5d78c9869d-r4pzt-kube-system", + "name": "pod-coredns-5d78c9869d-r4pzt-kube-system", "type": "Microsoft.KubernetesConfiguration/kubeInventory", "systemData": { "createdBy": "string", @@ -26,143 +26,149 @@ "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, "properties": { - "resources": [ - { - "apiVersion": "v1", - "kind": "Pod", - "metadata": { - "name": "coredns-5d78c9869d-r4pzt", - "generateName": "coredns-5d78c9869d-", - "namespaceName": "kube-system", - "uid": "d4e5f6a7-b8c9-0123-defa-234567890123", - "resourceVersion": "7712091", - "generation": 1, - "creationTimestamp": "2026-04-01T08:05:00Z", - "labels": { "k8s-app": "kube-dns", "pod-template-hash": "5d78c9869d" }, - "ownerReferences": [ - { - "apiVersion": "apps/v1", - "kind": "ReplicaSet", - "name": "coredns-5d78c9869d", - "uid": "e5f6a7b8-c9d0-1234-efab-345678901234", - "controller": true, - "blockOwnerDeletion": true - } - ] - }, - "spec": { - "nodeName": "aks-nodepool1-12345678-1", - "restartPolicy": "Always", - "serviceAccountName": "coredns", - "dnsPolicy": "Default", - "terminationGracePeriodSeconds": 30, - "securityContext": { - "runAsNonRoot": true - }, - "tolerations": [ - { "key": "CriticalAddonsOnly", "operator": "Exists" }, - { "key": "node-role.kubernetes.io/control-plane", "operator": "Exists", "effect": "NoSchedule" } - ], - "volumes": [ - { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, - { "name": "kube-api-access", "sourceType": "projected" } - ], - "containers": [ - { - "name": "coredns", - "image": "registry.k8s.io/coredns/coredns:v1.11.1", - "ports": [ - { "name": "dns", "containerPort": 53, "protocol": "UDP" }, - { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, - { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } - ], - "resources": { - "requests": { "cpu": "100m", "memory": "70Mi" }, - "limits": { "memory": "170Mi" } - }, - "volumeMounts": [ - { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, - { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } - ], - "securityContext": { - "allowPrivilegeEscalation": false, - "readOnlyRootFilesystem": true, - "capabilities": { "add": ["NET_BIND_SERVICE"], "drop": ["ALL"] } - } - } - ] - }, - "status": { - "phase": "Running", - "podIP": "10.244.0.3", - "hostIP": "10.240.0.5", - "startTime": "2026-04-01T08:05:02Z", - "qosClass": "Burstable", - "conditions": [ - { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, - { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" } - ], - "containerStatuses": [ - { - "name": "coredns", - "ready": true, - "restartCount": 0, - "started": true, - "image": "registry.k8s.io/coredns/coredns:v1.11.1", - "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", - "state": { "running": { "startedAt": "2026-04-01T08:05:13Z" } } - } - ] + "provisioningState": "Succeeded", + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "coredns-5d78c9869d-r4pzt", + "generateName": "coredns-5d78c9869d-", + "namespaceName": "kube-system", + "uid": "d4e5f6a7-b8c9-0123-defa-234567890123", + "resourceVersion": "7712091", + "generation": 1, + "creationTimestamp": "2026-04-01T08:05:00Z", + "labels": [ + { "name": "k8s-app", "value": "kube-dns" }, + { "name": "pod-template-hash", "value": "5d78c9869d" } + ], + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "name": "coredns-5d78c9869d", + "uid": "e5f6a7b8-c9d0-1234-efab-345678901234", + "controller": true, + "blockOwnerDeletion": true } + ] + }, + "spec": { + "nodeName": "aks-nodepool1-12345678-1", + "restartPolicy": "Always", + "serviceAccountName": "coredns", + "dnsPolicy": "Default", + "terminationGracePeriodSeconds": 30, + "securityContext": { + "runAsNonRoot": true }, - { - "apiVersion": "upgrade.config.io/v1alpha1", - "kind": "UpgradeAssessment", - "metadata": { - "name": "current", - "namespaceName": "kube-system", - "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", - "resourceVersion": "9124033", - "generation": 3, - "creationTimestamp": "2026-05-15T08:00:00Z", - "labels": { "managed-by": "azure-kube-inventory-agent" } - }, - "spec": { - "currentKubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30" - }, - "status": { - "assessmentTime": "2026-05-28T14:30:00Z", - "overallSeverity": "pass", - "conditions": [ - { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } + "tolerations": [ + { "key": "CriticalAddonsOnly", "operator": "Exists" }, + { "key": "node-role.kubernetes.io/control-plane", "operator": "Exists", "effect": "NoSchedule" } + ], + "volumes": [ + { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, + { "name": "kube-api-access", "sourceType": "projected" } + ], + "containers": [ + { + "name": "coredns", + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "ports": [ + { "name": "dns", "containerPort": 53, "protocol": "UDP" }, + { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, + { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } ], - "componentCompatibility": [ - { - "name": "containerd", - "version": "1.7.4", - "compatibilityStatus": "compatible", - "severity": "pass" - }, - { - "name": "azure-cni", - "version": "1.5.29", - "compatibilityStatus": "compatible", - "severity": "pass" - } + "resources": { + "requests": { "cpu": "100m", "memory": "70Mi" }, + "limits": { "memory": "170Mi" } + }, + "volumeMounts": [ + { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, + { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } ], - "deprecatedApis": [], - "readinessChecks": [ - { "category": "NodeStatus", "severity": "pass" }, - { "category": "APIServerHealth", "severity": "pass" }, - { "category": "PodDisruptionBudget", "severity": "pass" }, - { "category": "Addon", "severity": "pass" } - ] + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "capabilities": { "add": ["NET_BIND_SERVICE"], "drop": ["ALL"] } + } + } + ] + }, + "status": { + "phase": "Running", + "podIp": "10.244.0.3", + "hostIp": "10.240.0.5", + "startTime": "2026-04-01T08:05:02Z", + "qosClass": "Burstable", + "conditions": [ + { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, + { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" } + ], + "containerStatuses": [ + { + "name": "coredns", + "ready": true, + "restartCount": 0, + "started": true, + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", + "state": { "running": { "startedAt": "2026-04-01T08:05:13Z" } } } - } - ] + ] + } + } + }, + { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current-kube-system", + "name": "upgrade-assessment-current-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "provisioningState": "Succeeded", + "apiVersion": "upgrade.config.io/v1alpha1", + "kind": "UpgradeAssessment", + "metadata": { + "name": "current", + "namespaceName": "kube-system", + "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", + "resourceVersion": "9124033", + "generation": 3, + "creationTimestamp": "2026-05-15T08:00:00Z", + "labels": [ + { "name": "managed-by", "value": "azure-kube-inventory-agent" } + ] + }, + "spec": { + "currentKubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30" + }, + "status": { + "assessmentTime": "2026-05-28T14:30:00Z", + "overallSeverity": "pass", + "conditions": [ + { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } + ], + "componentCompatibility": [ + { "name": "containerd", "version": "1.7.4", "compatibilityStatus": "compatible", "severity": "pass" }, + { "name": "azure-cni", "version": "1.5.29", "compatibilityStatus": "compatible", "severity": "pass" } + ], + "deprecatedApis": [], + "readinessChecks": [ + { "category": "NodeStatus", "severity": "pass" }, + { "category": "APIServerHealth", "severity": "pass" }, + { "category": "PodDisruptionBudget", "severity": "pass" }, + { "category": "Addon", "severity": "pass" } + ] + } } } ], diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index 2a9c8d0f28d0..0997c60658c7 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -114,6 +114,30 @@ model ComponentCompatibility { notes?: string; } +/** Observed call counts per HTTP verb for a deprecated Kubernetes API. */ +model HttpVerbUsageMetrics { + /** Number of GET requests observed. */ + get?: int64; + + /** Number of LIST requests observed. */ + list?: int64; + + /** Number of POST (create) requests observed. */ + post?: int64; + + /** Number of PUT (replace) requests observed. */ + put?: int64; + + /** Number of PATCH requests observed. */ + patch?: int64; + + /** Number of DELETE requests observed. */ + delete?: int64; + + /** Number of WATCH requests observed. */ + watch?: int64; +} + /** A deprecated Kubernetes API still in use in the cluster. */ model DeprecatedApiUsage { /** API group (e.g., 'flowcontrol.apiserver.k8s.io'). */ @@ -128,8 +152,8 @@ model DeprecatedApiUsage { /** Kubernetes release in which this API is removed (e.g., '1.32'). */ removedRelease?: string; - /** Lowercase HTTP verbs mapped to observed call counts. */ - usageMetrics?: Record; + /** HTTP verb call counts observed for this deprecated API. */ + usageMetrics?: HttpVerbUsageMetrics; /** UTC timestamp of the last observed usage. */ lastUsageObservedAt?: utcDateTime; @@ -156,6 +180,26 @@ model ReadinessCheck { details?: string; } +/** A single Kubernetes label (key/value pair used for selection and grouping). */ +model KubernetesLabel { + /** Label key (e.g., 'app.kubernetes.io/name'). */ + @key + name: string; + + /** Label value. */ + value: string; +} + +/** A single Kubernetes annotation (key/value pair for non-identifying auxiliary metadata). */ +model KubernetesAnnotation { + /** Annotation key (e.g., 'kubectl.kubernetes.io/last-applied-configuration'). */ + @key + name: string; + + /** Annotation value. */ + value: string; +} + // ─── Common Kubernetes types ────────────────────────────────────────────────── /** A reference from a Kubernetes object to its owner (e.g., a ReplicaSet owning a Pod). */ @@ -184,12 +228,6 @@ model KubernetesObjectMeta { /** Name of the Kubernetes object, unique within its namespace. */ name: string; - /** - * Prefix used by the API server to generate a unique name when name is not provided. - * The generated name has the form '{generateName}{randomSuffix}'. - */ - generateName?: string; - /** * Namespace the object belongs to. * Empty for cluster-scoped resources such as Node and Namespace. @@ -218,10 +256,12 @@ model KubernetesObjectMeta { deletionTimestamp?: utcDateTime; /** User-defined key/value pairs used for selection and grouping. */ - labels?: Record; + @identifiers(#["name"]) + labels?: KubernetesLabel[]; /** Key/value pairs for non-identifying auxiliary metadata. */ - annotations?: Record; + @identifiers(#["name"]) + annotations?: KubernetesAnnotation[]; /** References to the objects that own this object (e.g., the ReplicaSet that owns a Pod). */ ownerReferences?: OwnerReference[]; @@ -293,6 +333,7 @@ model KubernetesGenericField { * Array items, populated when type is 'array'. * Each inner array represents one element, itself a set of named fields. */ + @identifiers(#[]) items?: KubernetesGenericField[][]; } @@ -360,6 +401,7 @@ union NetworkProtocol { /** A port exposed by a container. */ model ContainerPort { /** Port number exposed inside the container. */ + @clientName("portNumber", "csharp") containerPort: int32; /** Network protocol for this port. */ @@ -378,13 +420,27 @@ model EnvVar { value?: string; } +/** + * CPU and memory resource quantities for a container. + * Values use Kubernetes resource notation: CPU as millicores (e.g., '500m', '2') + * and memory as byte-unit strings (e.g., '256Mi', '1Gi'). + * See: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + */ +model ContainerResourceQuantity { + /** CPU quantity (e.g., '500m' for 500 millicores, '2' for 2 cores). */ + cpu?: string; + + /** Memory quantity (e.g., '256Mi', '1Gi'). */ + memory?: string; +} + /** CPU and memory resource declarations for a container. */ model ContainerResourceRequirements { - /** Maximum resources the container may consume, in Kubernetes notation (e.g., '500m', '256Mi'). */ - limits?: Record; + /** Maximum resources the container may consume. */ + limits?: ContainerResourceQuantity; - /** Minimum resources the container requires to be scheduled, in Kubernetes notation. */ - requests?: Record; + /** Minimum resources the container requires to be scheduled. */ + requests?: ContainerResourceQuantity; } /** Specification of a single container within a pod. */ @@ -447,6 +503,7 @@ model Volume { /** A toleration allows a pod to be scheduled on a node with a matching taint. */ model Toleration { /** Taint key the toleration applies to. Empty matches all keys. */ + #suppress "@azure-tools/typespec-azure-resource-manager/secret-prop" "This 'key' property is a Kubernetes taint key name, not a secret or credential." key?: string; /** @@ -656,7 +713,7 @@ model KubernetesResourceSpec { serviceType?: string; /** Cluster-internal IP assigned to the service. Populated for Service resources. */ - clusterIP?: string; + clusterIp?: string; // ── Pod security and scheduling ───────────────────────────────────────────── @@ -670,6 +727,7 @@ model KubernetesResourceSpec { * Tolerations allowing the pod to be scheduled on nodes with matching taints. * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. */ + @identifiers(#[]) tolerations?: Toleration[]; /** @@ -691,17 +749,6 @@ model KubernetesResourceSpec { */ securityContext?: PodSecurityContext; - // ── Cross-kind ────────────────────────────────────────────────────────────── - - /** Node label selector constraining which nodes workload pods can be scheduled on. */ - nodeSelector?: Record; - - /** - * Pod label selector used by Deployment, StatefulSet, DaemonSet, and Service - * to identify the pods they manage or route to. - */ - selector?: Record; - // ── UpgradeAssessment (kind = "UpgradeAssessment") ────────────────────────── /** @@ -737,6 +784,7 @@ model KubernetesResourceStatus { // ── Universal ─────────────────────────────────────────────────────────────── /** Conditions reported by the controller managing this resource. */ + @identifiers(#["type"]) conditions?: KubernetesCondition[]; /** @@ -761,10 +809,10 @@ model KubernetesResourceStatus { // ── Pod ───────────────────────────────────────────────────────────────────── /** IP address allocated to the pod within the cluster. Populated for Pod resources. */ - podIP?: string; + podIp?: string; /** IP address of the node hosting the pod. Populated for Pod resources. */ - hostIP?: string; + hostIp?: string; /** UTC timestamp when the pod was accepted by the scheduler. Populated for Pod resources. */ startTime?: utcDateTime; @@ -813,6 +861,7 @@ model KubernetesResourceStatus { * Deprecated Kubernetes APIs still in use in the cluster. * Populated for UpgradeAssessment resources. */ + @identifiers(#[]) deprecatedApis?: DeprecatedApiUsage[]; /** @@ -831,45 +880,36 @@ model KubernetesResourceStatus { additionalFields?: KubernetesGenericField[]; } +// ─── ARM resource properties ────────────────────────────────────────────────── + /** - * A generic Kubernetes resource object as stored in the cluster inventory. - * Follows the Kubernetes object model: apiVersion + kind + metadata + spec + status. + * Properties of a single KubeInventory ARM resource. + * Each ARM resource represents one Kubernetes object from the cluster inventory. + * The ARM resource name encodes the kind, Kubernetes name, and namespace + * (e.g., 'pod-nginx-6d4cf56db6-x7q2p-default', 'upgrade-assessment-current-kube-system'). */ -model KubernetesResource { +model KubeInventoryProperties { + /** Provisioning state of the KubeInventory resource. */ + @visibility(Lifecycle.Read) + provisioningState?: ProvisioningState; + /** - * Kubernetes API version of this resource + * Kubernetes API version of the represented resource * (e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1'). */ - apiVersion: string; + apiVersion?: string; /** Kind of the Kubernetes resource. */ - kind: KubernetesResourceKind; + kind?: KubernetesResourceKind; /** Standard Kubernetes object metadata. */ - metadata: KubernetesObjectMeta; + metadata?: KubernetesObjectMeta; - /** Desired state of the resource. */ + /** Desired state of the Kubernetes resource. */ spec?: KubernetesResourceSpec; - /** Observed state of the resource, written by the controller. */ + /** Observed state of the Kubernetes resource, written by the controller. */ status?: KubernetesResourceStatus; } -// ─── ARM resource properties ────────────────────────────────────────────────── - -/** - * Properties of the KubeInventory resource. - * Holds a full snapshot of Kubernetes resources from the cluster, - * including native workloads (Pod, Deployment, Service, etc.) - * and custom resources such as UpgradeAssessment. - */ -model KubeInventoryProperties { - /** - * Flat list of all Kubernetes resources in the cluster inventory. - * Each entry carries its own apiVersion, kind, metadata, spec, and status. - */ - @identifiers(#["metadata"]) - resources?: KubernetesResource[]; -} - From 92521646aae963d0daaf39d7efbb4288c7dc74ad Mon Sep 17 00:00:00 2001 From: root Date: Fri, 29 May 2026 21:55:36 +0000 Subject: [PATCH 06/39] Fix review comments --- .../kubeInventory/KubeInventory.tsp | 7 ++--- .../2026-06-15-preview/ListKubeInventory.json | 14 +++++----- .../kubeInventory/main.tsp | 2 +- .../kubeInventory/models.tsp | 27 ++++++++++++------- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp index 49808338aa6a..ee6c17a3bff3 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp @@ -19,7 +19,7 @@ model KubeInventory is Azure.ResourceManager.ProxyResource; } @@ -41,6 +41,7 @@ alias KubeInventoryOps = Azure.ResourceManager.Legacy.ExtensionOperations< @path @segment("providers") @key + @pattern("^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService)$") clusterRp: string; /** @@ -49,7 +50,7 @@ alias KubeInventoryOps = Azure.ResourceManager.Legacy.ExtensionOperations< */ @key @path - @pattern("^[a-zA-Z]*$") + @pattern("^[a-zA-Z]+$") clusterResourceName: string; /** @@ -57,7 +58,7 @@ alias KubeInventoryOps = Azure.ResourceManager.Legacy.ExtensionOperations< */ @key @path - @pattern("^.*") + @pattern("^[a-zA-Z0-9][a-zA-Z0-9-_.]{0,62}$") clusterName: string; }, { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index f7d26607d3e8..02a95cbb91da 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -153,20 +153,20 @@ }, "status": { "assessmentTime": "2026-05-28T14:30:00Z", - "overallSeverity": "pass", + "overallSeverity": "Pass", "conditions": [ { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } ], "componentCompatibility": [ - { "name": "containerd", "version": "1.7.4", "compatibilityStatus": "compatible", "severity": "pass" }, - { "name": "azure-cni", "version": "1.5.29", "compatibilityStatus": "compatible", "severity": "pass" } + { "name": "containerd", "version": "1.7.4", "compatibilityStatus": "Compatible", "severity": "Pass" }, + { "name": "azure-cni", "version": "1.5.29", "compatibilityStatus": "Compatible", "severity": "Pass" } ], "deprecatedApis": [], "readinessChecks": [ - { "category": "NodeStatus", "severity": "pass" }, - { "category": "APIServerHealth", "severity": "pass" }, - { "category": "PodDisruptionBudget", "severity": "pass" }, - { "category": "Addon", "severity": "pass" } + { "category": "NodeStatus", "severity": "Pass" }, + { "category": "APIServerHealth", "severity": "Pass" }, + { "category": "PodDisruptionBudget", "severity": "Pass" }, + { "category": "Addon", "severity": "Pass" } ] } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp index 2192f63fac4d..da61b51316c5 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp @@ -19,7 +19,7 @@ using TypeSpec.Versioning; @armProviderNamespace @service(#{ title: "KubeInventoryClient" }) @versioned(Versions) -@armCommonTypesVersion(Azure.ResourceManager.CommonTypes.Versions.v5) +@armCommonTypesVersion(Azure.ResourceManager.CommonTypes.Versions.v6) namespace Microsoft.KubernetesConfiguration; /** diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index 0997c60658c7..e61079757db9 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -39,16 +39,16 @@ union Severity { string, /** No issues found. */ - pass: "pass", + Pass: "Pass", /** Non-blocking issues found; upgrade is possible but action is recommended. */ - warning: "warning", + Warning: "Warning", /** Blocking issues found; upgrade should not proceed without remediation. */ - critical: "critical", + Critical: "Critical", /** Severity could not be determined. */ - Unknown: "unknown", + Unknown: "Unknown", } /** Compatibility status of a cluster component with the target Kubernetes version. */ @@ -56,16 +56,16 @@ union CompatibilityStatus { string, /** Component is compatible with the target version. */ - compatible: "compatible", + Compatible: "Compatible", /** Compatibility with the target version has not been tested. */ - untested: "untested", + Untested: "Untested", /** Component is incompatible with the target version. */ - incompatible: "incompatible", + Incompatible: "Incompatible", /** Compatibility status is unknown. */ - Unknown: "unknown", + Unknown: "Unknown", } /** Category of a cluster readiness check. */ @@ -331,10 +331,17 @@ model KubernetesGenericField { /** * Array items, populated when type is 'array'. - * Each inner array represents one element, itself a set of named fields. + * Each element represents one array entry as a set of named fields. */ @identifiers(#[]) - items?: KubernetesGenericField[][]; + items?: KubernetesGenericFieldGroup[]; +} + +/** One element of a generic array field, represented as a set of named fields. */ +model KubernetesGenericFieldGroup { + /** The named fields comprising this array element. */ + @identifiers(#["name"]) + fields: KubernetesGenericField[]; } // ─── Container support models ───────────────────────────────────────────────── From 4bff9ea72f4abca789888adc2af64dd91044b217 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Fri, 29 May 2026 23:44:15 +0000 Subject: [PATCH 07/39] Fix review comments --- .../2026-06-15-preview/GetKubeInventory.json | 157 +- .../2026-06-15-preview/ListKubeInventory.json | 187 ++- .../kubeInventory/models.tsp | 117 +- .../examples/GetKubeInventory.json | 159 ++ .../examples/ListKubeInventory.json | 203 +++ .../2026-06-15-preview/kubeInventory.json | 1494 +++++++++++++++++ 6 files changed, 2189 insertions(+), 128 deletions(-) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index 74ec4de187f0..746eaee17478 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -30,18 +30,26 @@ "kind": "Pod", "metadata": { "name": "nginx-6d4cf56db6-x7q2p", - "generateName": "nginx-6d4cf56db6-", "namespaceName": "default", "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "resourceVersion": "8834210", "generation": 1, "creationTimestamp": "2026-05-01T10:00:00Z", "labels": [ - { "name": "app", "value": "nginx" }, - { "name": "pod-template-hash", "value": "6d4cf56db6" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "pod-template-hash", + "value": "6d4cf56db6" + } ], "annotations": [ - { "name": "kubectl.kubernetes.io/last-applied-configuration", "value": "{}" } + { + "name": "kubectl.kubernetes.io/last-applied-configuration", + "value": "{}" + } ], "ownerReferences": [ { @@ -67,41 +75,97 @@ "runAsNonRoot": true }, "tolerations": [ - { "key": "node.kubernetes.io/not-ready", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 }, - { "key": "node.kubernetes.io/unreachable", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 } + { + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "effect": "NoExecute", + "tolerationSeconds": 300 + }, + { + "key": "node.kubernetes.io/unreachable", + "operator": "Exists", + "effect": "NoExecute", + "tolerationSeconds": 300 + } ], "volumes": [ - { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config-map" }, - { "name": "tmp-dir", "sourceType": "emptyDir", "sizeLimit": "50Mi" }, - { "name": "kube-api-access", "sourceType": "projected" } + { + "name": "nginx-config", + "sourceType": "configMap", + "source": "nginx-config-map" + }, + { + "name": "tmp-dir", + "sourceType": "emptyDir", + "sizeLimit": "50Mi" + }, + { + "name": "kube-api-access", + "sourceType": "projected" + } ], "containers": [ { "name": "nginx", "image": "nginx:1.25.4", "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" }, - { "name": "https", "containerPort": 443, "protocol": "TCP" } + { + "name": "http", + "containerPort": 80, + "protocol": "TCP" + }, + { + "name": "https", + "containerPort": 443, + "protocol": "TCP" + } ], "env": [ - { "name": "POD_NAMESPACE", "value": "default" }, - { "name": "NGINX_WORKER_PROCESSES", "value": "2" } + { + "name": "POD_NAMESPACE", + "value": "default" + }, + { + "name": "NGINX_WORKER_PROCESSES", + "value": "2" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "200m", "memory": "256Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "200m", + "memory": "256Mi" + } }, "volumeMounts": [ - { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true }, - { "name": "tmp-dir", "mountPath": "/tmp" }, - { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } + { + "name": "nginx-config", + "mountPath": "/etc/nginx/conf.d", + "readOnly": true + }, + { + "name": "tmp-dir", + "mountPath": "/tmp" + }, + { + "name": "kube-api-access", + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "readOnly": true + } ], "securityContext": { "allowPrivilegeEscalation": false, "readOnlyRootFilesystem": true, "runAsNonRoot": true, "runAsUser": 1000, - "capabilities": { "drop": ["ALL"] } + "capabilities": { + "drop": [ + "ALL" + ] + } } } ] @@ -113,10 +177,26 @@ "startTime": "2026-05-01T10:00:05Z", "qosClass": "Burstable", "conditions": [ - { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" }, - { "type": "Ready", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, - { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, - { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" } + { + "type": "Initialized", + "status": "True", + "lastTransitionTime": "2026-05-01T10:00:05Z" + }, + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-05-01T10:00:18Z" + }, + { + "type": "ContainersReady", + "status": "True", + "lastTransitionTime": "2026-05-01T10:00:18Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastTransitionTime": "2026-05-01T10:00:05Z" + } ], "containerStatuses": [ { @@ -126,10 +206,37 @@ "started": true, "image": "nginx:1.25.4", "containerId": "containerd://a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", - "state": { "running": { "startedAt": "2026-05-01T10:00:17Z" } } + "state": { + "running": { + "startedAt": "2026-05-01T10:00:17Z" + } + } } ] - } + }, + "events": [ + { + "type": "Normal", + "reason": "Scheduled", + "age": "28d", + "from": "default-scheduler", + "message": "Successfully assigned default/nginx-6d4cf56db6-x7q2p to aks-nodepool1-12345678-0" + }, + { + "type": "Normal", + "reason": "Pulled", + "age": "28d", + "from": "kubelet", + "message": "Container image \"nginx:1.25.4\" already present on machine" + }, + { + "type": "Normal", + "reason": "Started", + "age": "28d", + "from": "kubelet", + "message": "Started container nginx" + } + ] } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index 02a95cbb91da..a3c9bcc73af0 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -31,15 +31,20 @@ "kind": "Pod", "metadata": { "name": "coredns-5d78c9869d-r4pzt", - "generateName": "coredns-5d78c9869d-", "namespaceName": "kube-system", "uid": "d4e5f6a7-b8c9-0123-defa-234567890123", "resourceVersion": "7712091", "generation": 1, "creationTimestamp": "2026-04-01T08:05:00Z", "labels": [ - { "name": "k8s-app", "value": "kube-dns" }, - { "name": "pod-template-hash", "value": "5d78c9869d" } + { + "name": "k8s-app", + "value": "kube-dns" + }, + { + "name": "pod-template-hash", + "value": "5d78c9869d" + } ], "ownerReferences": [ { @@ -62,34 +67,80 @@ "runAsNonRoot": true }, "tolerations": [ - { "key": "CriticalAddonsOnly", "operator": "Exists" }, - { "key": "node-role.kubernetes.io/control-plane", "operator": "Exists", "effect": "NoSchedule" } + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + }, + { + "key": "node-role.kubernetes.io/control-plane", + "operator": "Exists", + "effect": "NoSchedule" + } ], "volumes": [ - { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, - { "name": "kube-api-access", "sourceType": "projected" } + { + "name": "config-volume", + "sourceType": "configMap", + "source": "coredns" + }, + { + "name": "kube-api-access", + "sourceType": "projected" + } ], "containers": [ { "name": "coredns", "image": "registry.k8s.io/coredns/coredns:v1.11.1", "ports": [ - { "name": "dns", "containerPort": 53, "protocol": "UDP" }, - { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, - { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } + { + "name": "dns", + "containerPort": 53, + "protocol": "UDP" + }, + { + "name": "dns-tcp", + "containerPort": 53, + "protocol": "TCP" + }, + { + "name": "metrics", + "containerPort": 9153, + "protocol": "TCP" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "70Mi" }, - "limits": { "memory": "170Mi" } + "requests": { + "cpu": "100m", + "memory": "70Mi" + }, + "limits": { + "memory": "170Mi" + } }, "volumeMounts": [ - { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, - { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } + { + "name": "config-volume", + "mountPath": "/etc/coredns", + "readOnly": true + }, + { + "name": "kube-api-access", + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "readOnly": true + } ], "securityContext": { "allowPrivilegeEscalation": false, "readOnlyRootFilesystem": true, - "capabilities": { "add": ["NET_BIND_SERVICE"], "drop": ["ALL"] } + "capabilities": { + "add": [ + "NET_BIND_SERVICE" + ], + "drop": [ + "ALL" + ] + } } } ] @@ -101,10 +152,26 @@ "startTime": "2026-04-01T08:05:02Z", "qosClass": "Burstable", "conditions": [ - { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, - { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" } + { + "type": "Initialized", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:02Z" + }, + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:14Z" + }, + { + "type": "ContainersReady", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:14Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:02Z" + } ], "containerStatuses": [ { @@ -114,11 +181,31 @@ "started": true, "image": "registry.k8s.io/coredns/coredns:v1.11.1", "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", - "state": { "running": { "startedAt": "2026-04-01T08:05:13Z" } } + "state": { + "running": { + "startedAt": "2026-04-01T08:05:13Z" + } + } } ] } - } + }, + "events": [ + { + "type": "Normal", + "reason": "Scheduled", + "age": "58d", + "from": "default-scheduler", + "message": "Successfully assigned kube-system/coredns-5d78c9869d-r4pzt to aks-nodepool1-12345678-1" + }, + { + "type": "Normal", + "reason": "Pulled", + "age": "58d", + "from": "kubelet", + "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" + } + ] }, { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current-kube-system", @@ -144,7 +231,10 @@ "generation": 3, "creationTimestamp": "2026-05-15T08:00:00Z", "labels": [ - { "name": "managed-by", "value": "azure-kube-inventory-agent" } + { + "name": "managed-by", + "value": "azure-kube-inventory-agent" + } ] }, "spec": { @@ -155,21 +245,58 @@ "assessmentTime": "2026-05-28T14:30:00Z", "overallSeverity": "Pass", "conditions": [ - { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } + { + "type": "AssessmentComplete", + "status": "True", + "reason": "Succeeded", + "message": "Upgrade assessment completed successfully.", + "lastTransitionTime": "2026-05-28T14:30:00Z" + } ], "componentCompatibility": [ - { "name": "containerd", "version": "1.7.4", "compatibilityStatus": "Compatible", "severity": "Pass" }, - { "name": "azure-cni", "version": "1.5.29", "compatibilityStatus": "Compatible", "severity": "Pass" } + { + "name": "containerd", + "version": "1.7.4", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "azure-cni", + "version": "1.5.29", + "compatibilityStatus": "Compatible", + "severity": "Pass" + } ], "deprecatedApis": [], "readinessChecks": [ - { "category": "NodeStatus", "severity": "Pass" }, - { "category": "APIServerHealth", "severity": "Pass" }, - { "category": "PodDisruptionBudget", "severity": "Pass" }, - { "category": "Addon", "severity": "Pass" } + { + "category": "NodeStatus", + "severity": "Pass" + }, + { + "category": "APIServerHealth", + "severity": "Pass" + }, + { + "category": "PodDisruptionBudget", + "severity": "Pass" + }, + { + "category": "Addon", + "severity": "Pass" + } ] } - } + }, + "events": [ + { + "type": "Normal", + "reason": "AssessmentComplete", + "age": "1h", + "from": "azure-kube-inventory-agent", + "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." + } + ] } ], "nextLink": null diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index e61079757db9..b5b29ccc7c41 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -3,6 +3,7 @@ import "@typespec/http"; import "@typespec/versioning"; import "@azure-tools/typespec-azure-resource-manager"; import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-client-generator-core"; using TypeSpec.Rest; using TypeSpec.Http; @@ -10,6 +11,7 @@ using TypeSpec.Versioning; using Azure.Core; using Azure.ResourceManager; using Azure.ResourceManager.Foundations; +using Azure.ClientGenerator.Core; namespace Microsoft.KubernetesConfiguration; @@ -184,6 +186,7 @@ model ReadinessCheck { model KubernetesLabel { /** Label key (e.g., 'app.kubernetes.io/name'). */ @key + @visibility(Lifecycle.Read) name: string; /** Label value. */ @@ -194,6 +197,7 @@ model KubernetesLabel { model KubernetesAnnotation { /** Annotation key (e.g., 'kubectl.kubernetes.io/last-applied-configuration'). */ @key + @visibility(Lifecycle.Read) name: string; /** Annotation value. */ @@ -311,37 +315,12 @@ model KubernetesCondition { */ model KubernetesGenericField { /** Field name. */ + @key + @visibility(Lifecycle.Read) name: string; - /** - * Type of the field value: 'string', 'number', or 'boolean' for scalars; - * 'object' when fields[] is populated; 'array' when items[] is populated. - */ - type: string; - - /** Scalar value, populated when type is 'string', 'number', or 'boolean'. */ - value?: string; - - /** - * Child fields, populated when type is 'object'. - * Represents a nested key/value structure. - */ - @identifiers(#["name"]) - fields?: KubernetesGenericField[]; - - /** - * Array items, populated when type is 'array'. - * Each element represents one array entry as a set of named fields. - */ - @identifiers(#[]) - items?: KubernetesGenericFieldGroup[]; -} - -/** One element of a generic array field, represented as a set of named fields. */ -model KubernetesGenericFieldGroup { - /** The named fields comprising this array element. */ - @identifiers(#["name"]) - fields: KubernetesGenericField[]; + /** Value */ + value: string; } // ─── Container support models ───────────────────────────────────────────────── @@ -510,8 +489,10 @@ model Volume { /** A toleration allows a pod to be scheduled on a node with a matching taint. */ model Toleration { /** Taint key the toleration applies to. Empty matches all keys. */ - #suppress "@azure-tools/typespec-azure-resource-manager/secret-prop" "This 'key' property is a Kubernetes taint key name, not a secret or credential." - key?: string; + #suppress "@azure-tools/typespec-azure-resource-manager/secret-prop" "Toleration key is a Kubernetes taint key identifier, not a secret" + @key + @visibility(Lifecycle.Read) + key: string; /** * Operator to use when matching: 'Equal' matches when key and value both match; @@ -625,46 +606,6 @@ model ContainerStatus { containerId?: string; } -// ─── Kubernetes resource kind ───────────────────────────────────────────────── - -/** Kind of a Kubernetes resource tracked in the cluster inventory. */ -union KubernetesResourceKind { - string, - - /** Core workload: Pod. */ - Pod: "Pod", - - /** Core workload: Deployment (apps/v1). */ - Deployment: "Deployment", - - /** Core workload: StatefulSet (apps/v1). */ - StatefulSet: "StatefulSet", - - /** Core workload: DaemonSet (apps/v1). */ - DaemonSet: "DaemonSet", - - /** Core workload: ReplicaSet (apps/v1). */ - ReplicaSet: "ReplicaSet", - - /** Networking: Service. */ - Service: "Service", - - /** Storage: PersistentVolumeClaim. */ - PersistentVolumeClaim: "PersistentVolumeClaim", - - /** Cluster infrastructure: Node. */ - Node: "Node", - - /** Cluster administration: Namespace. */ - Namespace: "Namespace", - - /** Azure Kubernetes upgrade assessment custom resource. */ - UpgradeAssessment: "UpgradeAssessment", - - /** Any other custom resource definition instance not enumerated above. */ - CustomResource: "CustomResource", -} - // ─── Generic flat spec and status ──────────────────────────────────────────── /** @@ -887,6 +828,32 @@ model KubernetesResourceStatus { additionalFields?: KubernetesGenericField[]; } +// ─── Kubernetes event ───────────────────────────────────────────────────────── + +/** A Kubernetes event recorded against a resource (equivalent to `kubectl describe` Events). */ +model KubernetesEvent { + /** Event type: 'Normal' or 'Warning'. */ + type: string; + + /** Short machine-readable reason for the event (e.g., 'Scheduled', 'Pulled', 'Failed'). */ + reason: string; + + /** + * Human-readable elapsed time since the event last occurred + * as reported by the Kubernetes API (e.g., '2m28s', '5h'). + */ + age: string; + + /** + * Component that emitted the event + * (e.g., 'default-scheduler', 'kubelet'). + */ + from: string; + + /** Human-readable description of the event. */ + message: string; +} + // ─── ARM resource properties ────────────────────────────────────────────────── /** @@ -906,8 +873,8 @@ model KubeInventoryProperties { */ apiVersion?: string; - /** Kind of the Kubernetes resource. */ - kind?: KubernetesResourceKind; + /** Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service', 'UpgradeAssessment'). */ + kind?: string; /** Standard Kubernetes object metadata. */ metadata?: KubernetesObjectMeta; @@ -917,6 +884,10 @@ model KubeInventoryProperties { /** Observed state of the Kubernetes resource, written by the controller. */ status?: KubernetesResourceStatus; + + /** Kubernetes events recorded against this resource. */ + @identifiers(#[]) + events?: KubernetesEvent[]; } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json new file mode 100644 index 000000000000..134c65734193 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json @@ -0,0 +1,159 @@ +{ + "title": "Get KubeInventory", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "subId1", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "pod-nginx-6d4cf56db6-x7q2p-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/pod-nginx-6d4cf56db6-x7q2p-default", + "name": "pod-nginx-6d4cf56db6-x7q2p-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "provisioningState": "Succeeded", + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "nginx-6d4cf56db6-x7q2p", + "namespaceName": "default", + "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "resourceVersion": "8834210", + "generation": 1, + "creationTimestamp": "2026-05-01T10:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" }, + { "name": "pod-template-hash", "value": "6d4cf56db6" } + ], + "annotations": [ + { "name": "kubectl.kubernetes.io/last-applied-configuration", "value": "{}" } + ], + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "name": "nginx-6d4cf56db6", + "uid": "c3d4e5f6-a7b8-9012-cdef-012345678901", + "controller": true, + "blockOwnerDeletion": true + } + ] + }, + "spec": { + "nodeName": "aks-nodepool1-12345678-0", + "restartPolicy": "Always", + "serviceAccountName": "nginx-sa", + "dnsPolicy": "ClusterFirst", + "terminationGracePeriodSeconds": 30, + "securityContext": { + "runAsUser": 1000, + "runAsGroup": 3000, + "fsGroup": 2000, + "runAsNonRoot": true + }, + "tolerations": [ + { "key": "node.kubernetes.io/not-ready", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 }, + { "key": "node.kubernetes.io/unreachable", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 } + ], + "volumes": [ + { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config-map" }, + { "name": "tmp-dir", "sourceType": "emptyDir", "sizeLimit": "50Mi" }, + { "name": "kube-api-access", "sourceType": "projected" } + ], + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" }, + { "name": "https", "containerPort": 443, "protocol": "TCP" } + ], + "env": [ + { "name": "POD_NAMESPACE", "value": "default" }, + { "name": "NGINX_WORKER_PROCESSES", "value": "2" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "200m", "memory": "256Mi" } + }, + "volumeMounts": [ + { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true }, + { "name": "tmp-dir", "mountPath": "/tmp" }, + { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true, + "runAsUser": 1000, + "capabilities": { "drop": ["ALL"] } + } + } + ] + }, + "status": { + "phase": "Running", + "podIp": "10.244.1.42", + "hostIp": "10.240.0.4", + "startTime": "2026-05-01T10:00:05Z", + "qosClass": "Burstable", + "conditions": [ + { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" }, + { "type": "Ready", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, + { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, + { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" } + ], + "containerStatuses": [ + { + "name": "nginx", + "ready": true, + "restartCount": 0, + "started": true, + "image": "nginx:1.25.4", + "containerId": "containerd://a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", + "state": { "running": { "startedAt": "2026-05-01T10:00:17Z" } } + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "Scheduled", + "age": "28d", + "from": "default-scheduler", + "message": "Successfully assigned default/nginx-6d4cf56db6-x7q2p to aks-nodepool1-12345678-0" + }, + { + "type": "Normal", + "reason": "Pulled", + "age": "28d", + "from": "kubelet", + "message": "Container image \"nginx:1.25.4\" already present on machine" + }, + { + "type": "Normal", + "reason": "Started", + "age": "28d", + "from": "kubelet", + "message": "Started container nginx" + } + ] + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json new file mode 100644 index 000000000000..c2a0a7ce938c --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json @@ -0,0 +1,203 @@ +{ + "title": "List KubeInventory", + "operationId": "KubeInventories_List", + "parameters": { + "subscriptionId": "subId1", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/pod-coredns-5d78c9869d-r4pzt-kube-system", + "name": "pod-coredns-5d78c9869d-r4pzt-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "provisioningState": "Succeeded", + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "coredns-5d78c9869d-r4pzt", + "namespaceName": "kube-system", + "uid": "d4e5f6a7-b8c9-0123-defa-234567890123", + "resourceVersion": "7712091", + "generation": 1, + "creationTimestamp": "2026-04-01T08:05:00Z", + "labels": [ + { "name": "k8s-app", "value": "kube-dns" }, + { "name": "pod-template-hash", "value": "5d78c9869d" } + ], + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "name": "coredns-5d78c9869d", + "uid": "e5f6a7b8-c9d0-1234-efab-345678901234", + "controller": true, + "blockOwnerDeletion": true + } + ] + }, + "spec": { + "nodeName": "aks-nodepool1-12345678-1", + "restartPolicy": "Always", + "serviceAccountName": "coredns", + "dnsPolicy": "Default", + "terminationGracePeriodSeconds": 30, + "securityContext": { + "runAsNonRoot": true + }, + "tolerations": [ + { "key": "CriticalAddonsOnly", "operator": "Exists" }, + { "key": "node-role.kubernetes.io/control-plane", "operator": "Exists", "effect": "NoSchedule" } + ], + "volumes": [ + { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, + { "name": "kube-api-access", "sourceType": "projected" } + ], + "containers": [ + { + "name": "coredns", + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "ports": [ + { "name": "dns", "containerPort": 53, "protocol": "UDP" }, + { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, + { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "70Mi" }, + "limits": { "memory": "170Mi" } + }, + "volumeMounts": [ + { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, + { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "capabilities": { "add": ["NET_BIND_SERVICE"], "drop": ["ALL"] } + } + } + ] + }, + "status": { + "phase": "Running", + "podIp": "10.244.0.3", + "hostIp": "10.240.0.5", + "startTime": "2026-04-01T08:05:02Z", + "qosClass": "Burstable", + "conditions": [ + { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, + { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" } + ], + "containerStatuses": [ + { + "name": "coredns", + "ready": true, + "restartCount": 0, + "started": true, + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", + "state": { "running": { "startedAt": "2026-04-01T08:05:13Z" } } + } + ] + } + }, + "events": [ + { + "type": "Normal", + "reason": "Scheduled", + "age": "58d", + "from": "default-scheduler", + "message": "Successfully assigned kube-system/coredns-5d78c9869d-r4pzt to aks-nodepool1-12345678-1" + }, + { + "type": "Normal", + "reason": "Pulled", + "age": "58d", + "from": "kubelet", + "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" + } + ] + }, + { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current-kube-system", + "name": "upgrade-assessment-current-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "provisioningState": "Succeeded", + "apiVersion": "upgrade.config.io/v1alpha1", + "kind": "UpgradeAssessment", + "metadata": { + "name": "current", + "namespaceName": "kube-system", + "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", + "resourceVersion": "9124033", + "generation": 3, + "creationTimestamp": "2026-05-15T08:00:00Z", + "labels": [ + { "name": "managed-by", "value": "azure-kube-inventory-agent" } + ] + }, + "spec": { + "currentKubernetesVersion": "1.29", + "targetKubernetesVersion": "1.30" + }, + "status": { + "assessmentTime": "2026-05-28T14:30:00Z", + "overallSeverity": "Pass", + "conditions": [ + { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } + ], + "componentCompatibility": [ + { "name": "containerd", "version": "1.7.4", "compatibilityStatus": "Compatible", "severity": "Pass" }, + { "name": "azure-cni", "version": "1.5.29", "compatibilityStatus": "Compatible", "severity": "Pass" } + ], + "deprecatedApis": [], + "readinessChecks": [ + { "category": "NodeStatus", "severity": "Pass" }, + { "category": "APIServerHealth", "severity": "Pass" }, + { "category": "PodDisruptionBudget", "severity": "Pass" }, + { "category": "Addon", "severity": "Pass" } + ] + } + }, + "events": [ + { + "type": "Normal", + "reason": "AssessmentComplete", + "age": "1h", + "from": "azure-kube-inventory-agent", + "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." + } + ] + } + ], + "nextLink": null + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json new file mode 100644 index 000000000000..854377cea835 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -0,0 +1,1494 @@ +{ + "swagger": "2.0", + "info": { + "title": "KubeInventoryClient", + "version": "2026-06-15-preview", + "description": "APIs for cluster upgrade assessment reports under Microsoft.KubernetesConfiguration.", + "x-typespec-generated": [ + { + "emitter": "@azure-tools/typespec-autorest" + } + ] + }, + "schemes": [ + "https" + ], + "host": "management.azure.com", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "security": [ + { + "azure_auth": [ + "user_impersonation" + ] + } + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "description": "Azure Active Directory OAuth2 Flow.", + "flow": "implicit", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "scopes": { + "user_impersonation": "impersonate your user account" + } + } + }, + "tags": [ + { + "name": "KubeInventory" + } + ], + "paths": { + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory": { + "get": { + "operationId": "KubeInventories_List", + "tags": [ + "KubeInventory" + ], + "description": "List kubeInventory containers for the cluster (currently always a single 'default').", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/SubscriptionIdParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ResourceGroupNameParameter" + }, + { + "name": "clusterRp", + "in": "path", + "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes,\nMicrosoft.HybridContainerService.", + "required": true, + "type": "string", + "pattern": "^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService)$" + }, + { + "name": "clusterResourceName", + "in": "path", + "description": "The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters,\nprovisionedClusters, appliances.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z]+$" + }, + { + "name": "clusterName", + "in": "path", + "description": "The name of the kubernetes cluster.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-_.]{0,62}$" + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/KubeInventoryListResult" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "List KubeInventory": { + "$ref": "./examples/ListKubeInventory.json" + } + }, + "x-ms-pageable": { + "nextLinkName": "nextLink" + } + } + }, + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory/{kubeInventoryName}": { + "get": { + "operationId": "KubeInventories_Get", + "tags": [ + "KubeInventory" + ], + "description": "Get the kubeInventory singleton for a cluster.", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/SubscriptionIdParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ResourceGroupNameParameter" + }, + { + "name": "clusterRp", + "in": "path", + "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes,\nMicrosoft.HybridContainerService.", + "required": true, + "type": "string", + "pattern": "^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService)$" + }, + { + "name": "clusterResourceName", + "in": "path", + "description": "The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters,\nprovisionedClusters, appliances.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z]+$" + }, + { + "name": "clusterName", + "in": "path", + "description": "The name of the kubernetes cluster.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-_.]{0,62}$" + }, + { + "name": "kubeInventoryName", + "in": "path", + "description": "Name of the KubeInventory resource.", + "required": true, + "type": "string", + "pattern": "^[a-z]([a-z0-9._-]{0,126}[a-z0-9])?$" + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/KubeInventory" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "Get KubeInventory": { + "$ref": "./examples/GetKubeInventory.json" + } + } + } + } + }, + "definitions": { + "Capabilities": { + "type": "object", + "description": "Linux capability set to add to or drop from a container's default capabilities.", + "properties": { + "add": { + "type": "array", + "description": "Capabilities to add (e.g., 'NET_ADMIN').", + "items": { + "type": "string" + } + }, + "drop": { + "type": "array", + "description": "Capabilities to remove (e.g., 'ALL').", + "items": { + "type": "string" + } + } + } + }, + "CompatibilityStatus": { + "type": "string", + "description": "Compatibility status of a cluster component with the target Kubernetes version.", + "enum": [ + "Compatible", + "Untested", + "Incompatible", + "Unknown" + ], + "x-ms-enum": { + "name": "CompatibilityStatus", + "modelAsString": true, + "values": [ + { + "name": "Compatible", + "value": "Compatible", + "description": "Component is compatible with the target version." + }, + { + "name": "Untested", + "value": "Untested", + "description": "Compatibility with the target version has not been tested." + }, + { + "name": "Incompatible", + "value": "Incompatible", + "description": "Component is incompatible with the target version." + }, + { + "name": "Unknown", + "value": "Unknown", + "description": "Compatibility status is unknown." + } + ] + } + }, + "ComponentCompatibility": { + "type": "object", + "description": "Compatibility status of a single cluster component with the target Kubernetes version.", + "properties": { + "name": { + "type": "string", + "description": "Component name (e.g., 'containerd', 'calico')." + }, + "version": { + "type": "string", + "description": "Installed component version." + }, + "compatibilityStatus": { + "$ref": "#/definitions/CompatibilityStatus", + "description": "Compatibility of the component with the target Kubernetes version." + }, + "severity": { + "$ref": "#/definitions/Severity", + "description": "Severity associated with this compatibility result." + }, + "minCompatibleVersion": { + "type": "string", + "description": "Minimum component version known to be compatible with targetKubernetesVersion." + }, + "notes": { + "type": "string", + "description": "Additional notes about compatibility." + } + }, + "required": [ + "name", + "version", + "compatibilityStatus", + "severity" + ] + }, + "ConditionStatus": { + "type": "string", + "description": "Whether a Kubernetes condition is currently active.", + "enum": [ + "True", + "False", + "Unknown" + ], + "x-ms-enum": { + "name": "ConditionStatus", + "modelAsString": true, + "values": [ + { + "name": "True", + "value": "True", + "description": "Condition is currently true." + }, + { + "name": "False", + "value": "False", + "description": "Condition is currently false." + }, + { + "name": "Unknown", + "value": "Unknown", + "description": "Condition state cannot be determined." + } + ] + } + }, + "ContainerPort": { + "type": "object", + "description": "A port exposed by a container.", + "properties": { + "containerPort": { + "type": "integer", + "format": "int32", + "description": "Port number exposed inside the container." + }, + "protocol": { + "$ref": "#/definitions/NetworkProtocol", + "description": "Network protocol for this port." + }, + "name": { + "type": "string", + "description": "Optional name for this port." + } + }, + "required": [ + "containerPort" + ] + }, + "ContainerResourceQuantity": { + "type": "object", + "description": "CPU and memory resource quantities for a container.\nValues use Kubernetes resource notation: CPU as millicores (e.g., '500m', '2')\nand memory as byte-unit strings (e.g., '256Mi', '1Gi').\nSee: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "properties": { + "cpu": { + "type": "string", + "description": "CPU quantity (e.g., '500m' for 500 millicores, '2' for 2 cores)." + }, + "memory": { + "type": "string", + "description": "Memory quantity (e.g., '256Mi', '1Gi')." + } + } + }, + "ContainerResourceRequirements": { + "type": "object", + "description": "CPU and memory resource declarations for a container.", + "properties": { + "limits": { + "$ref": "#/definitions/ContainerResourceQuantity", + "description": "Maximum resources the container may consume." + }, + "requests": { + "$ref": "#/definitions/ContainerResourceQuantity", + "description": "Minimum resources the container requires to be scheduled." + } + } + }, + "ContainerSecurityContext": { + "type": "object", + "description": "Security context applied to a single container.", + "properties": { + "capabilities": { + "$ref": "#/definitions/Capabilities", + "description": "Linux capability adjustments for this container." + }, + "readOnlyRootFilesystem": { + "type": "boolean", + "description": "Mount the container's root filesystem as read-only when true." + }, + "allowPrivilegeEscalation": { + "type": "boolean", + "description": "Prevent the container process from gaining more privileges than its parent when false." + }, + "runAsNonRoot": { + "type": "boolean", + "description": "Require the container to run as a non-root user when true." + }, + "runAsUser": { + "type": "integer", + "format": "int64", + "description": "UID to run the container process as." + }, + "runAsGroup": { + "type": "integer", + "format": "int64", + "description": "GID to run the container process as." + } + } + }, + "ContainerSpec": { + "type": "object", + "description": "Specification of a single container within a pod.", + "properties": { + "name": { + "type": "string", + "description": "Name of the container, unique within the pod." + }, + "image": { + "type": "string", + "description": "Container image reference (e.g., 'nginx:1.25')." + }, + "ports": { + "type": "array", + "description": "Ports to expose from the container.", + "items": { + "$ref": "#/definitions/ContainerPort" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "env": { + "type": "array", + "description": "Environment variables to set in the container.", + "items": { + "$ref": "#/definitions/EnvVar" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "resources": { + "$ref": "#/definitions/ContainerResourceRequirements", + "description": "Compute resource requests and limits." + }, + "command": { + "type": "array", + "description": "Command to override the container default ENTRYPOINT.", + "items": { + "type": "string" + } + }, + "args": { + "type": "array", + "description": "Arguments to override the container default CMD.", + "items": { + "type": "string" + } + }, + "volumeMounts": { + "type": "array", + "description": "Volume paths to mount inside the container.", + "items": { + "$ref": "#/definitions/VolumeMount" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "securityContext": { + "$ref": "#/definitions/ContainerSecurityContext", + "description": "Security context applied to this container." + } + }, + "required": [ + "name", + "image" + ] + }, + "ContainerState": { + "type": "object", + "description": "Current or previous state of a container; exactly one of the three fields is populated.", + "properties": { + "running": { + "$ref": "#/definitions/ContainerStateRunning", + "description": "Populated when the container is currently executing." + }, + "terminated": { + "$ref": "#/definitions/ContainerStateTerminated", + "description": "Populated when the container has exited." + }, + "waiting": { + "$ref": "#/definitions/ContainerStateWaiting", + "description": "Populated when the container is not yet running." + } + } + }, + "ContainerStateRunning": { + "type": "object", + "description": "State of a currently running container.", + "properties": { + "startedAt": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the container started." + } + } + }, + "ContainerStateTerminated": { + "type": "object", + "description": "State of a terminated container.", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "description": "Exit code of the container process." + }, + "signal": { + "type": "integer", + "format": "int32", + "description": "Signal that caused the container to terminate, if applicable." + }, + "reason": { + "type": "string", + "description": "Machine-readable reason for termination (e.g., 'OOMKilled', 'Completed')." + }, + "message": { + "type": "string", + "description": "Human-readable message about the termination." + }, + "startedAt": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the container started its last execution." + }, + "finishedAt": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the container terminated." + } + }, + "required": [ + "exitCode" + ] + }, + "ContainerStateWaiting": { + "type": "object", + "description": "State of a container that is not yet running.", + "properties": { + "reason": { + "type": "string", + "description": "Machine-readable reason the container is not running (e.g., 'ContainerCreating', 'ImagePullBackOff')." + }, + "message": { + "type": "string", + "description": "Human-readable message about the waiting state." + } + } + }, + "ContainerStatus": { + "type": "object", + "description": "Runtime status of a single container as reported in the pod status.", + "properties": { + "name": { + "type": "string", + "description": "Name of the container." + }, + "ready": { + "type": "boolean", + "description": "True when the container has passed its readiness probe." + }, + "restartCount": { + "type": "integer", + "format": "int32", + "description": "Number of times the container has restarted since the pod was started." + }, + "image": { + "type": "string", + "description": "Container image including digest as resolved by the runtime." + }, + "started": { + "type": "boolean", + "description": "Whether the container has passed its startup probe and is considered started." + }, + "state": { + "$ref": "#/definitions/ContainerState", + "description": "Current state of the container." + }, + "lastState": { + "$ref": "#/definitions/ContainerState", + "description": "Previous termination state of the container; populated after a restart." + }, + "containerId": { + "type": "string", + "description": "Opaque container runtime identifier (e.g., 'containerd://sha256:...')." + } + }, + "required": [ + "name", + "ready", + "restartCount" + ] + }, + "DeprecatedApiUsage": { + "type": "object", + "description": "A deprecated Kubernetes API still in use in the cluster.", + "properties": { + "group": { + "type": "string", + "description": "API group (e.g., 'flowcontrol.apiserver.k8s.io')." + }, + "version": { + "type": "string", + "description": "API version (e.g., 'v1beta3')." + }, + "resource": { + "type": "string", + "description": "Resource plural name (e.g., 'flowschemas')." + }, + "removedRelease": { + "type": "string", + "description": "Kubernetes release in which this API is removed (e.g., '1.32')." + }, + "usageMetrics": { + "$ref": "#/definitions/HttpVerbUsageMetrics", + "description": "HTTP verb call counts observed for this deprecated API." + }, + "lastUsageObservedAt": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp of the last observed usage." + }, + "severity": { + "$ref": "#/definitions/Severity", + "description": "Severity of continued use of this deprecated API." + } + }, + "required": [ + "group", + "version", + "resource", + "severity" + ] + }, + "EnvVar": { + "type": "object", + "description": "An environment variable set in a container.", + "properties": { + "name": { + "type": "string", + "description": "Name of the environment variable." + }, + "value": { + "type": "string", + "description": "Literal string value." + } + }, + "required": [ + "name" + ] + }, + "HttpVerbUsageMetrics": { + "type": "object", + "description": "Observed call counts per HTTP verb for a deprecated Kubernetes API.", + "properties": { + "get": { + "type": "integer", + "format": "int64", + "description": "Number of GET requests observed." + }, + "list": { + "type": "integer", + "format": "int64", + "description": "Number of LIST requests observed." + }, + "post": { + "type": "integer", + "format": "int64", + "description": "Number of POST (create) requests observed." + }, + "put": { + "type": "integer", + "format": "int64", + "description": "Number of PUT (replace) requests observed." + }, + "patch": { + "type": "integer", + "format": "int64", + "description": "Number of PATCH requests observed." + }, + "delete": { + "type": "integer", + "format": "int64", + "description": "Number of DELETE requests observed." + }, + "watch": { + "type": "integer", + "format": "int64", + "description": "Number of WATCH requests observed." + } + } + }, + "KubeInventory": { + "type": "object", + "description": "Singleton container resource grouping cluster inventory reports.", + "properties": { + "properties": { + "$ref": "#/definitions/KubeInventoryProperties", + "description": "Properties of the KubeInventory resource." + } + }, + "allOf": [ + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ProxyResource" + } + ] + }, + "KubeInventoryListResult": { + "type": "object", + "description": "The response of a KubeInventory list operation.", + "properties": { + "value": { + "type": "array", + "description": "The KubeInventory items on this page", + "items": { + "$ref": "#/definitions/KubeInventory" + } + }, + "nextLink": { + "type": "string", + "format": "uri", + "description": "The link to the next page of items" + } + }, + "required": [ + "value" + ] + }, + "KubeInventoryProperties": { + "type": "object", + "description": "Properties of a single KubeInventory ARM resource.\nEach ARM resource represents one Kubernetes object from the cluster inventory.\nThe ARM resource name encodes the kind, Kubernetes name, and namespace\n(e.g., 'pod-nginx-6d4cf56db6-x7q2p-default', 'upgrade-assessment-current-kube-system').", + "properties": { + "provisioningState": { + "$ref": "#/definitions/ProvisioningState", + "description": "Provisioning state of the KubeInventory resource.", + "readOnly": true + }, + "apiVersion": { + "type": "string", + "description": "Kubernetes API version of the represented resource\n(e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1')." + }, + "kind": { + "type": "string", + "description": "Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service', 'UpgradeAssessment')." + }, + "metadata": { + "$ref": "#/definitions/KubernetesObjectMeta", + "description": "Standard Kubernetes object metadata." + }, + "spec": { + "$ref": "#/definitions/KubernetesResourceSpec", + "description": "Desired state of the Kubernetes resource." + }, + "status": { + "$ref": "#/definitions/KubernetesResourceStatus", + "description": "Observed state of the Kubernetes resource, written by the controller." + }, + "events": { + "type": "array", + "description": "Kubernetes events recorded against this resource.", + "items": { + "$ref": "#/definitions/KubernetesEvent" + }, + "x-ms-identifiers": [] + } + } + }, + "KubernetesAnnotation": { + "type": "object", + "description": "A single Kubernetes annotation (key/value pair for non-identifying auxiliary metadata).", + "properties": { + "name": { + "type": "string", + "description": "Annotation key (e.g., 'kubectl.kubernetes.io/last-applied-configuration').", + "readOnly": true + }, + "value": { + "type": "string", + "description": "Annotation value." + } + }, + "required": [ + "name", + "value" + ] + }, + "KubernetesCondition": { + "type": "object", + "description": "A Kubernetes-style status condition reported by a controller.", + "properties": { + "type": { + "type": "string", + "description": "Type of the condition (e.g., 'Ready', 'Available', 'Progressing')." + }, + "status": { + "$ref": "#/definitions/ConditionStatus", + "description": "Whether the condition is currently active." + }, + "reason": { + "type": "string", + "description": "Machine-readable reason code for the current status." + }, + "message": { + "type": "string", + "description": "Human-readable explanation of the current status." + }, + "lastTransitionTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp of the last status transition." + } + }, + "required": [ + "type", + "status" + ] + }, + "KubernetesEvent": { + "type": "object", + "description": "A Kubernetes event recorded against a resource (equivalent to `kubectl describe` Events).", + "properties": { + "type": { + "type": "string", + "description": "Event type: 'Normal' or 'Warning'." + }, + "reason": { + "type": "string", + "description": "Short machine-readable reason for the event (e.g., 'Scheduled', 'Pulled', 'Failed')." + }, + "age": { + "type": "string", + "description": "Human-readable elapsed time since the event last occurred\nas reported by the Kubernetes API (e.g., '2m28s', '5h')." + }, + "from": { + "type": "string", + "description": "Component that emitted the event\n(e.g., 'default-scheduler', 'kubelet')." + }, + "message": { + "type": "string", + "description": "Human-readable description of the event." + } + }, + "required": [ + "type", + "reason", + "age", + "from", + "message" + ] + }, + "KubernetesGenericField": { + "type": "object", + "description": "A generic recursive field node used to represent resource-specific fields\nthat are not captured by the typed properties on KubernetesResourceSpec\nor KubernetesResourceStatus (e.g., uncommon fields and CRD-specific data).", + "properties": { + "name": { + "type": "string", + "description": "Field name.", + "readOnly": true + }, + "value": { + "type": "string", + "description": "Value" + } + }, + "required": [ + "name", + "value" + ] + }, + "KubernetesLabel": { + "type": "object", + "description": "A single Kubernetes label (key/value pair used for selection and grouping).", + "properties": { + "name": { + "type": "string", + "description": "Label key (e.g., 'app.kubernetes.io/name').", + "readOnly": true + }, + "value": { + "type": "string", + "description": "Label value." + } + }, + "required": [ + "name", + "value" + ] + }, + "KubernetesObjectMeta": { + "type": "object", + "description": "Metadata common to all Kubernetes objects (subset of ObjectMeta).", + "properties": { + "name": { + "type": "string", + "description": "Name of the Kubernetes object, unique within its namespace." + }, + "namespaceName": { + "type": "string", + "description": "Namespace the object belongs to.\nEmpty for cluster-scoped resources such as Node and Namespace." + }, + "uid": { + "type": "string", + "description": "Immutable UID assigned by the Kubernetes API server." + }, + "resourceVersion": { + "type": "string", + "description": "Opaque version string used for optimistic concurrency.\nClients must treat this as opaque and pass it unmodified on updates." + }, + "generation": { + "type": "integer", + "format": "int64", + "description": "Sequence number incremented each time the object spec changes." + }, + "creationTimestamp": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the object was created." + }, + "deletionTimestamp": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp set when a graceful deletion has been requested.\nAbsent when the object is not being deleted." + }, + "labels": { + "type": "array", + "description": "User-defined key/value pairs used for selection and grouping.", + "items": { + "$ref": "#/definitions/KubernetesLabel" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "annotations": { + "type": "array", + "description": "Key/value pairs for non-identifying auxiliary metadata.", + "items": { + "$ref": "#/definitions/KubernetesAnnotation" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "ownerReferences": { + "type": "array", + "description": "References to the objects that own this object (e.g., the ReplicaSet that owns a Pod).", + "items": { + "$ref": "#/definitions/OwnerReference" + } + }, + "finalizers": { + "type": "array", + "description": "Named lifecycle hooks that must be resolved before the object is deleted.", + "items": { + "type": "string" + } + } + }, + "required": [ + "name" + ] + }, + "KubernetesResourceSpec": { + "type": "object", + "description": "Desired state (spec) of a Kubernetes resource.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. UpgradeAssessment spec fields are merged in as optional typed properties.\nFields not covered by any typed property can be placed in additionalFields.", + "properties": { + "nodeName": { + "type": "string", + "description": "Name of the node the pod is scheduled on. Populated for Pod resources." + }, + "restartPolicy": { + "type": "string", + "description": "Pod restart policy (e.g., 'Always', 'OnFailure', 'Never'). Populated for Pod resources." + }, + "containers": { + "type": "array", + "description": "Containers belonging to the pod or pod template.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources.", + "items": { + "$ref": "#/definitions/ContainerSpec" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "initContainers": { + "type": "array", + "description": "Init containers that run before app containers start.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources.", + "items": { + "$ref": "#/definitions/ContainerSpec" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "terminationGracePeriodSeconds": { + "type": "integer", + "format": "int64", + "description": "Grace period in seconds before forcibly terminating the pod on deletion." + }, + "replicas": { + "type": "integer", + "format": "int32", + "description": "Desired number of pod replicas. Populated for Deployment and StatefulSet resources." + }, + "serviceName": { + "type": "string", + "description": "Headless service name governing StatefulSet pod network identity.\nPopulated for StatefulSet resources." + }, + "serviceType": { + "type": "string", + "description": "How the service is exposed (e.g., 'ClusterIP', 'NodePort', 'LoadBalancer').\nPopulated for Service resources." + }, + "clusterIp": { + "type": "string", + "description": "Cluster-internal IP assigned to the service. Populated for Service resources." + }, + "serviceAccountName": { + "type": "string", + "description": "Name of the ServiceAccount the pod runs as.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources." + }, + "tolerations": { + "type": "array", + "description": "Tolerations allowing the pod to be scheduled on nodes with matching taints.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources.", + "items": { + "$ref": "#/definitions/Toleration" + }, + "x-ms-identifiers": [] + }, + "volumes": { + "type": "array", + "description": "Volumes available to containers in the pod or pod template.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources.", + "items": { + "$ref": "#/definitions/Volume" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "dnsPolicy": { + "type": "string", + "description": "DNS policy for the pod (e.g., 'ClusterFirst', 'Default', 'None').\nPopulated for Pod resources." + }, + "securityContext": { + "$ref": "#/definitions/PodSecurityContext", + "description": "Security context applied at the pod level.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources." + }, + "currentKubernetesVersion": { + "type": "string", + "description": "Current Kubernetes version running on the cluster (e.g., '1.29').\nPopulated for UpgradeAssessment resources." + }, + "targetKubernetesVersion": { + "type": "string", + "description": "Target Kubernetes version to evaluate for upgrade (e.g., '1.30').\nPopulated for UpgradeAssessment resources." + }, + "additionalFields": { + "type": "array", + "description": "Additional resource-specific fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", + "items": { + "$ref": "#/definitions/KubernetesGenericField" + }, + "x-ms-identifiers": [ + "name" + ] + } + } + }, + "KubernetesResourceStatus": { + "type": "object", + "description": "Observed state (status) of a Kubernetes resource, written by the controller.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. UpgradeAssessment status fields are merged in as optional typed properties.\nFields not covered by any typed property can be placed in additionalFields.", + "properties": { + "conditions": { + "type": "array", + "description": "Conditions reported by the controller managing this resource.", + "items": { + "$ref": "#/definitions/KubernetesCondition" + }, + "x-ms-identifiers": [ + "type" + ] + }, + "phase": { + "type": "string", + "description": "High-level lifecycle phase of the resource.\nExamples: 'Running' / 'Pending' / 'Succeeded' / 'Failed' for Pod;\n'Bound' / 'Pending' / 'Lost' for PersistentVolumeClaim;\n'Active' / 'Terminating' for Namespace." + }, + "message": { + "type": "string", + "description": "Human-readable message summarizing the resource state." + }, + "readyReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of pods ready to serve requests. Populated for Deployment, StatefulSet, DaemonSet." + }, + "availableReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of pods available for at least minReadySeconds. Populated for Deployment, DaemonSet." + }, + "podIp": { + "type": "string", + "description": "IP address allocated to the pod within the cluster. Populated for Pod resources." + }, + "hostIp": { + "type": "string", + "description": "IP address of the node hosting the pod. Populated for Pod resources." + }, + "startTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the pod was accepted by the scheduler. Populated for Pod resources." + }, + "containerStatuses": { + "type": "array", + "description": "Runtime status of each container in the pod.\nPopulated for Pod resources.", + "items": { + "$ref": "#/definitions/ContainerStatus" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "qosClass": { + "type": "string", + "description": "QoS class assigned by Kubernetes based on resource requests and limits.\nOne of 'Guaranteed', 'Burstable', or 'BestEffort'. Populated for Pod resources." + }, + "observedGeneration": { + "type": "integer", + "format": "int64", + "description": "Most recent generation observed by the controller.\nPopulated for Deployment, StatefulSet, DaemonSet, and Pod resources." + }, + "assessmentTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the in-cluster agent last computed this assessment.\nPopulated for UpgradeAssessment resources.", + "readOnly": true + }, + "overallSeverity": { + "$ref": "#/definitions/Severity", + "description": "Rolled-up severity across all checks; highest severity wins.\nPopulated for UpgradeAssessment resources." + }, + "componentCompatibility": { + "type": "array", + "description": "Per-component compatibility results with the target Kubernetes version.\nPopulated for UpgradeAssessment resources.", + "items": { + "$ref": "#/definitions/ComponentCompatibility" + } + }, + "deprecatedApis": { + "type": "array", + "description": "Deprecated Kubernetes APIs still in use in the cluster.\nPopulated for UpgradeAssessment resources.", + "items": { + "$ref": "#/definitions/DeprecatedApiUsage" + }, + "x-ms-identifiers": [] + }, + "readinessChecks": { + "type": "array", + "description": "Cluster readiness check results.\nPopulated for UpgradeAssessment resources.", + "items": { + "$ref": "#/definitions/ReadinessCheck" + } + }, + "additionalFields": { + "type": "array", + "description": "Additional resource-specific status fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", + "items": { + "$ref": "#/definitions/KubernetesGenericField" + }, + "x-ms-identifiers": [ + "name" + ] + } + } + }, + "NetworkProtocol": { + "type": "string", + "description": "Network protocol used by a container port.", + "enum": [ + "TCP", + "UDP", + "SCTP" + ], + "x-ms-enum": { + "name": "NetworkProtocol", + "modelAsString": true, + "values": [ + { + "name": "TCP", + "value": "TCP", + "description": "Transmission Control Protocol." + }, + { + "name": "UDP", + "value": "UDP", + "description": "User Datagram Protocol." + }, + { + "name": "SCTP", + "value": "SCTP", + "description": "Stream Control Transmission Protocol." + } + ] + } + }, + "OwnerReference": { + "type": "object", + "description": "A reference from a Kubernetes object to its owner (e.g., a ReplicaSet owning a Pod).", + "properties": { + "apiVersion": { + "type": "string", + "description": "API version of the owner (e.g., 'apps/v1')." + }, + "kind": { + "type": "string", + "description": "Kind of the owner (e.g., 'ReplicaSet')." + }, + "name": { + "type": "string", + "description": "Name of the owner object." + }, + "uid": { + "type": "string", + "description": "UID of the owner object." + }, + "controller": { + "type": "boolean", + "description": "True when this owner manages the lifecycle of the referencing object." + }, + "blockOwnerDeletion": { + "type": "boolean", + "description": "If true, deletion of the owner is blocked until this reference is removed." + } + }, + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ] + }, + "PodSecurityContext": { + "type": "object", + "description": "Security context applied at the pod level, affecting all containers.", + "properties": { + "fsGroup": { + "type": "integer", + "format": "int64", + "description": "GID of the owning group for volume mounts; processes also run as this GID." + }, + "runAsUser": { + "type": "integer", + "format": "int64", + "description": "UID to run all containers as. Overridden per-container by ContainerSecurityContext.runAsUser." + }, + "runAsGroup": { + "type": "integer", + "format": "int64", + "description": "GID to run all containers as." + }, + "runAsNonRoot": { + "type": "boolean", + "description": "Require all containers to run as non-root when true." + }, + "supplementalGroups": { + "type": "array", + "description": "Supplemental GIDs applied to each container in addition to the primary GID.", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "ProvisioningState": { + "type": "string", + "description": "Provisioning state of an ARM resource.", + "enum": [ + "Succeeded", + "Failed", + "Canceled", + "Updating" + ], + "x-ms-enum": { + "name": "ProvisioningState", + "modelAsString": true, + "values": [ + { + "name": "Succeeded", + "value": "Succeeded", + "description": "Resource has been created successfully." + }, + { + "name": "Failed", + "value": "Failed", + "description": "Resource creation failed." + }, + { + "name": "Canceled", + "value": "Canceled", + "description": "Resource creation was canceled." + }, + { + "name": "Updating", + "value": "Updating", + "description": "Resource is being updated." + } + ] + } + }, + "ReadinessCategory": { + "type": "string", + "description": "Category of a cluster readiness check.", + "enum": [ + "NodeStatus", + "APIServerHealth", + "PodDisruptionBudget", + "Addon", + "Storage", + "Networking" + ], + "x-ms-enum": { + "name": "ReadinessCategory", + "modelAsString": true, + "values": [ + { + "name": "NodeStatus", + "value": "NodeStatus", + "description": "Node status check." + }, + { + "name": "APIServerHealth", + "value": "APIServerHealth", + "description": "API server health check." + }, + { + "name": "PodDisruptionBudget", + "value": "PodDisruptionBudget", + "description": "Pod disruption budget check." + }, + { + "name": "Addon", + "value": "Addon", + "description": "Addon compatibility check." + }, + { + "name": "Storage", + "value": "Storage", + "description": "Storage compatibility check." + }, + { + "name": "Networking", + "value": "Networking", + "description": "Networking compatibility check." + } + ] + } + }, + "ReadinessCheck": { + "type": "object", + "description": "A single cluster readiness check result.", + "properties": { + "category": { + "$ref": "#/definitions/ReadinessCategory", + "description": "Category of the readiness check." + }, + "name": { + "type": "string", + "description": "Subject of the check (node name, workload namespace/name, etc.).\nOptional for cluster-wide checks." + }, + "severity": { + "$ref": "#/definitions/Severity", + "description": "Severity of the check result." + }, + "details": { + "type": "string", + "description": "Human-readable reason when severity is not 'pass'." + } + }, + "required": [ + "category", + "severity" + ] + }, + "Severity": { + "type": "string", + "description": "Severity of an upgrade-assessment finding or readiness check.", + "enum": [ + "Pass", + "Warning", + "Critical", + "Unknown" + ], + "x-ms-enum": { + "name": "Severity", + "modelAsString": true, + "values": [ + { + "name": "Pass", + "value": "Pass", + "description": "No issues found." + }, + { + "name": "Warning", + "value": "Warning", + "description": "Non-blocking issues found; upgrade is possible but action is recommended." + }, + { + "name": "Critical", + "value": "Critical", + "description": "Blocking issues found; upgrade should not proceed without remediation." + }, + { + "name": "Unknown", + "value": "Unknown", + "description": "Severity could not be determined." + } + ] + } + }, + "Toleration": { + "type": "object", + "description": "A toleration allows a pod to be scheduled on a node with a matching taint.", + "properties": { + "key": { + "type": "string", + "description": "Taint key the toleration applies to. Empty matches all keys.", + "readOnly": true + }, + "operator": { + "type": "string", + "description": "Operator to use when matching: 'Equal' matches when key and value both match;\n'Exists' matches when the key is present regardless of value." + }, + "value": { + "type": "string", + "description": "Taint value matched when operator is 'Equal'." + }, + "effect": { + "type": "string", + "description": "Taint effect this toleration applies to\n('NoSchedule', 'PreferNoSchedule', or 'NoExecute'). Empty matches all effects." + }, + "tolerationSeconds": { + "type": "integer", + "format": "int64", + "description": "Seconds a pod tolerates a NoExecute taint before being evicted." + } + }, + "required": [ + "key" + ] + }, + "Volume": { + "type": "object", + "description": "A volume available to containers in a pod.\nThe sourceType field identifies the kind of volume source\n(e.g., 'emptyDir', 'configMap', 'secret', 'persistentVolumeClaim', 'projected').", + "properties": { + "name": { + "type": "string", + "description": "Name of the volume, referenced by container volumeMounts." + }, + "sourceType": { + "type": "string", + "description": "Kind of volume source\n(e.g., 'emptyDir', 'configMap', 'secret', 'persistentVolumeClaim', 'projected')." + }, + "source": { + "type": "string", + "description": "Primary reference for the volume source (e.g., ConfigMap name or PVC name)." + }, + "sizeLimit": { + "type": "string", + "description": "Storage size limit for emptyDir volumes (e.g., '50Mi')." + } + }, + "required": [ + "name" + ] + }, + "VolumeMount": { + "type": "object", + "description": "A volume mount inside a container.", + "properties": { + "name": { + "type": "string", + "description": "Name matching a volume declared in the pod spec." + }, + "mountPath": { + "type": "string", + "description": "Absolute path inside the container where the volume is mounted." + }, + "readOnly": { + "type": "boolean", + "description": "Mount the volume as read-only when true." + }, + "subPath": { + "type": "string", + "description": "Sub-path within the volume to mount instead of the volume root." + } + }, + "required": [ + "name", + "mountPath" + ] + } + }, + "parameters": {} +} From 885303db6d7c88d3a327181c54b5768a48227261 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Sat, 30 May 2026 20:48:06 +0000 Subject: [PATCH 08/39] pretty json --- .../kubernetesconfiguration/cspell.yaml | 2 + .../2026-06-15-preview/GetKubeInventory.json | 2 +- .../2026-06-15-preview/ListKubeInventory.json | 2 +- .../examples/GetKubeInventory.json | 133 ++++++++++++--- .../examples/ListKubeInventory.json | 159 +++++++++++++++--- .../2026-06-15-preview/kubeInventory.json | 5 +- .../resource-manager/readme.md | 2 +- 7 files changed, 249 insertions(+), 56 deletions(-) diff --git a/specification/kubernetesconfiguration/cspell.yaml b/specification/kubernetesconfiguration/cspell.yaml index 6caaa990c9f1..c46f67ca382f 100644 --- a/specification/kubernetesconfiguration/cspell.yaml +++ b/specification/kubernetesconfiguration/cspell.yaml @@ -11,9 +11,11 @@ words: - armkubeinventory - kubeinventory - kubernetesconfiguration + - kubelet - kustomization - kustomizations - kustomize + - millicores - oidc - rpns diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index 746eaee17478..81bd72303a73 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -2,7 +2,7 @@ "title": "Get KubeInventory", "operationId": "KubeInventories_Get", "parameters": { - "subscriptionId": "subId1", + "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index a3c9bcc73af0..569da7ab69b2 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -2,7 +2,7 @@ "title": "List KubeInventory", "operationId": "KubeInventories_List", "parameters": { - "subscriptionId": "subId1", + "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json index 134c65734193..81bd72303a73 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json @@ -2,7 +2,7 @@ "title": "Get KubeInventory", "operationId": "KubeInventories_Get", "parameters": { - "subscriptionId": "subId1", + "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", @@ -36,11 +36,20 @@ "generation": 1, "creationTimestamp": "2026-05-01T10:00:00Z", "labels": [ - { "name": "app", "value": "nginx" }, - { "name": "pod-template-hash", "value": "6d4cf56db6" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "pod-template-hash", + "value": "6d4cf56db6" + } ], "annotations": [ - { "name": "kubectl.kubernetes.io/last-applied-configuration", "value": "{}" } + { + "name": "kubectl.kubernetes.io/last-applied-configuration", + "value": "{}" + } ], "ownerReferences": [ { @@ -66,41 +75,97 @@ "runAsNonRoot": true }, "tolerations": [ - { "key": "node.kubernetes.io/not-ready", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 }, - { "key": "node.kubernetes.io/unreachable", "operator": "Exists", "effect": "NoExecute", "tolerationSeconds": 300 } + { + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "effect": "NoExecute", + "tolerationSeconds": 300 + }, + { + "key": "node.kubernetes.io/unreachable", + "operator": "Exists", + "effect": "NoExecute", + "tolerationSeconds": 300 + } ], "volumes": [ - { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config-map" }, - { "name": "tmp-dir", "sourceType": "emptyDir", "sizeLimit": "50Mi" }, - { "name": "kube-api-access", "sourceType": "projected" } + { + "name": "nginx-config", + "sourceType": "configMap", + "source": "nginx-config-map" + }, + { + "name": "tmp-dir", + "sourceType": "emptyDir", + "sizeLimit": "50Mi" + }, + { + "name": "kube-api-access", + "sourceType": "projected" + } ], "containers": [ { "name": "nginx", "image": "nginx:1.25.4", "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" }, - { "name": "https", "containerPort": 443, "protocol": "TCP" } + { + "name": "http", + "containerPort": 80, + "protocol": "TCP" + }, + { + "name": "https", + "containerPort": 443, + "protocol": "TCP" + } ], "env": [ - { "name": "POD_NAMESPACE", "value": "default" }, - { "name": "NGINX_WORKER_PROCESSES", "value": "2" } + { + "name": "POD_NAMESPACE", + "value": "default" + }, + { + "name": "NGINX_WORKER_PROCESSES", + "value": "2" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "200m", "memory": "256Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "200m", + "memory": "256Mi" + } }, "volumeMounts": [ - { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true }, - { "name": "tmp-dir", "mountPath": "/tmp" }, - { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } + { + "name": "nginx-config", + "mountPath": "/etc/nginx/conf.d", + "readOnly": true + }, + { + "name": "tmp-dir", + "mountPath": "/tmp" + }, + { + "name": "kube-api-access", + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "readOnly": true + } ], "securityContext": { "allowPrivilegeEscalation": false, "readOnlyRootFilesystem": true, "runAsNonRoot": true, "runAsUser": 1000, - "capabilities": { "drop": ["ALL"] } + "capabilities": { + "drop": [ + "ALL" + ] + } } } ] @@ -112,10 +177,26 @@ "startTime": "2026-05-01T10:00:05Z", "qosClass": "Burstable", "conditions": [ - { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" }, - { "type": "Ready", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, - { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-05-01T10:00:18Z" }, - { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-05-01T10:00:05Z" } + { + "type": "Initialized", + "status": "True", + "lastTransitionTime": "2026-05-01T10:00:05Z" + }, + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-05-01T10:00:18Z" + }, + { + "type": "ContainersReady", + "status": "True", + "lastTransitionTime": "2026-05-01T10:00:18Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastTransitionTime": "2026-05-01T10:00:05Z" + } ], "containerStatuses": [ { @@ -125,7 +206,11 @@ "started": true, "image": "nginx:1.25.4", "containerId": "containerd://a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", - "state": { "running": { "startedAt": "2026-05-01T10:00:17Z" } } + "state": { + "running": { + "startedAt": "2026-05-01T10:00:17Z" + } + } } ] }, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json index c2a0a7ce938c..569da7ab69b2 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json @@ -2,7 +2,7 @@ "title": "List KubeInventory", "operationId": "KubeInventories_List", "parameters": { - "subscriptionId": "subId1", + "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", @@ -37,8 +37,14 @@ "generation": 1, "creationTimestamp": "2026-04-01T08:05:00Z", "labels": [ - { "name": "k8s-app", "value": "kube-dns" }, - { "name": "pod-template-hash", "value": "5d78c9869d" } + { + "name": "k8s-app", + "value": "kube-dns" + }, + { + "name": "pod-template-hash", + "value": "5d78c9869d" + } ], "ownerReferences": [ { @@ -61,34 +67,80 @@ "runAsNonRoot": true }, "tolerations": [ - { "key": "CriticalAddonsOnly", "operator": "Exists" }, - { "key": "node-role.kubernetes.io/control-plane", "operator": "Exists", "effect": "NoSchedule" } + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + }, + { + "key": "node-role.kubernetes.io/control-plane", + "operator": "Exists", + "effect": "NoSchedule" + } ], "volumes": [ - { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, - { "name": "kube-api-access", "sourceType": "projected" } + { + "name": "config-volume", + "sourceType": "configMap", + "source": "coredns" + }, + { + "name": "kube-api-access", + "sourceType": "projected" + } ], "containers": [ { "name": "coredns", "image": "registry.k8s.io/coredns/coredns:v1.11.1", "ports": [ - { "name": "dns", "containerPort": 53, "protocol": "UDP" }, - { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, - { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } + { + "name": "dns", + "containerPort": 53, + "protocol": "UDP" + }, + { + "name": "dns-tcp", + "containerPort": 53, + "protocol": "TCP" + }, + { + "name": "metrics", + "containerPort": 9153, + "protocol": "TCP" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "70Mi" }, - "limits": { "memory": "170Mi" } + "requests": { + "cpu": "100m", + "memory": "70Mi" + }, + "limits": { + "memory": "170Mi" + } }, "volumeMounts": [ - { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, - { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "readOnly": true } + { + "name": "config-volume", + "mountPath": "/etc/coredns", + "readOnly": true + }, + { + "name": "kube-api-access", + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "readOnly": true + } ], "securityContext": { "allowPrivilegeEscalation": false, "readOnlyRootFilesystem": true, - "capabilities": { "add": ["NET_BIND_SERVICE"], "drop": ["ALL"] } + "capabilities": { + "add": [ + "NET_BIND_SERVICE" + ], + "drop": [ + "ALL" + ] + } } } ] @@ -100,10 +152,26 @@ "startTime": "2026-04-01T08:05:02Z", "qosClass": "Burstable", "conditions": [ - { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, - { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" } + { + "type": "Initialized", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:02Z" + }, + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:14Z" + }, + { + "type": "ContainersReady", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:14Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:02Z" + } ], "containerStatuses": [ { @@ -113,7 +181,11 @@ "started": true, "image": "registry.k8s.io/coredns/coredns:v1.11.1", "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", - "state": { "running": { "startedAt": "2026-04-01T08:05:13Z" } } + "state": { + "running": { + "startedAt": "2026-04-01T08:05:13Z" + } + } } ] } @@ -159,7 +231,10 @@ "generation": 3, "creationTimestamp": "2026-05-15T08:00:00Z", "labels": [ - { "name": "managed-by", "value": "azure-kube-inventory-agent" } + { + "name": "managed-by", + "value": "azure-kube-inventory-agent" + } ] }, "spec": { @@ -170,18 +245,46 @@ "assessmentTime": "2026-05-28T14:30:00Z", "overallSeverity": "Pass", "conditions": [ - { "type": "AssessmentComplete", "status": "True", "reason": "Succeeded", "message": "Upgrade assessment completed successfully.", "lastTransitionTime": "2026-05-28T14:30:00Z" } + { + "type": "AssessmentComplete", + "status": "True", + "reason": "Succeeded", + "message": "Upgrade assessment completed successfully.", + "lastTransitionTime": "2026-05-28T14:30:00Z" + } ], "componentCompatibility": [ - { "name": "containerd", "version": "1.7.4", "compatibilityStatus": "Compatible", "severity": "Pass" }, - { "name": "azure-cni", "version": "1.5.29", "compatibilityStatus": "Compatible", "severity": "Pass" } + { + "name": "containerd", + "version": "1.7.4", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "azure-cni", + "version": "1.5.29", + "compatibilityStatus": "Compatible", + "severity": "Pass" + } ], "deprecatedApis": [], "readinessChecks": [ - { "category": "NodeStatus", "severity": "Pass" }, - { "category": "APIServerHealth", "severity": "Pass" }, - { "category": "PodDisruptionBudget", "severity": "Pass" }, - { "category": "Addon", "severity": "Pass" } + { + "category": "NodeStatus", + "severity": "Pass" + }, + { + "category": "APIServerHealth", + "severity": "Pass" + }, + { + "category": "PodDisruptionBudget", + "severity": "Pass" + }, + { + "category": "Addon", + "severity": "Pass" + } ] } }, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 854377cea835..62ddd82008c2 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -753,7 +753,10 @@ }, "x-ms-identifiers": [] } - } + }, + "required": [ + "provisioningState" + ] }, "KubernetesAnnotation": { "type": "object", diff --git a/specification/kubernetesconfiguration/resource-manager/readme.md b/specification/kubernetesconfiguration/resource-manager/readme.md index 4da534f6bec4..b65c6b3d299d 100644 --- a/specification/kubernetesconfiguration/resource-manager/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/readme.md @@ -37,7 +37,7 @@ These settings apply only when `--tag=package-preview-2026-06-15` is specified o ``` yaml $(tag) == 'package-preview-2026-06-15' input-file: - - Microsoft.KubernetesConfiguration/preview/2026-06-15-preview/kubeInventory.json + - Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json ``` ### Tag: package-preview-2024-04 From 75c69913aa3e1afaf0134d60383485b626c695de Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Sat, 30 May 2026 14:03:22 -0700 Subject: [PATCH 09/39] Remove Provisioning state --- .../preview/2026-06-15-preview/kubeInventory.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 62ddd82008c2..854377cea835 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -753,10 +753,7 @@ }, "x-ms-identifiers": [] } - }, - "required": [ - "provisioningState" - ] + } }, "KubernetesAnnotation": { "type": "object", From 47ab9d14dac00e61be9b982391f4098238f11fb8 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 1 Jun 2026 07:36:45 -0700 Subject: [PATCH 10/39] Update provisioning state as per rules --- .../kubeInventory/models.tsp | 21 +----- .../2026-06-15-preview/kubeInventory.json | 68 +++++++++---------- 2 files changed, 32 insertions(+), 57 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index b5b29ccc7c41..bb8177f781ce 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -15,25 +15,6 @@ using Azure.ClientGenerator.Core; namespace Microsoft.KubernetesConfiguration; -// ─── Provisioning state ─────────────────────────────────────────────────────── - -/** Provisioning state of an ARM resource. */ -union ProvisioningState { - string, - - /** Resource has been created successfully. */ - Succeeded: "Succeeded", - - /** Resource creation failed. */ - Failed: "Failed", - - /** Resource creation was canceled. */ - Canceled: "Canceled", - - /** Resource is being updated. */ - Updating: "Updating", -} - // ─── UpgradeAssessment enums ────────────────────────────────────────────────── /** Severity of an upgrade-assessment finding or readiness check. */ @@ -865,7 +846,7 @@ model KubernetesEvent { model KubeInventoryProperties { /** Provisioning state of the KubeInventory resource. */ @visibility(Lifecycle.Read) - provisioningState?: ProvisioningState; + provisioningState?: ResourceProvisioningState; /** * Kubernetes API version of the represented resource diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 854377cea835..9541b13cba9a 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -183,6 +183,36 @@ } }, "definitions": { + "Azure.ResourceManager.ResourceProvisioningState": { + "type": "string", + "description": "The provisioning state of a resource type.", + "enum": [ + "Succeeded", + "Failed", + "Canceled" + ], + "x-ms-enum": { + "name": "ResourceProvisioningState", + "modelAsString": true, + "values": [ + { + "name": "Succeeded", + "value": "Succeeded", + "description": "Resource has been created." + }, + { + "name": "Failed", + "value": "Failed", + "description": "Resource creation failed." + }, + { + "name": "Canceled", + "value": "Canceled", + "description": "Resource creation was canceled." + } + ] + } + }, "Capabilities": { "type": "object", "description": "Linux capability set to add to or drop from a container's default capabilities.", @@ -721,7 +751,7 @@ "description": "Properties of a single KubeInventory ARM resource.\nEach ARM resource represents one Kubernetes object from the cluster inventory.\nThe ARM resource name encodes the kind, Kubernetes name, and namespace\n(e.g., 'pod-nginx-6d4cf56db6-x7q2p-default', 'upgrade-assessment-current-kube-system').", "properties": { "provisioningState": { - "$ref": "#/definitions/ProvisioningState", + "$ref": "#/definitions/Azure.ResourceManager.ResourceProvisioningState", "description": "Provisioning state of the KubeInventory resource.", "readOnly": true }, @@ -1261,42 +1291,6 @@ } } }, - "ProvisioningState": { - "type": "string", - "description": "Provisioning state of an ARM resource.", - "enum": [ - "Succeeded", - "Failed", - "Canceled", - "Updating" - ], - "x-ms-enum": { - "name": "ProvisioningState", - "modelAsString": true, - "values": [ - { - "name": "Succeeded", - "value": "Succeeded", - "description": "Resource has been created successfully." - }, - { - "name": "Failed", - "value": "Failed", - "description": "Resource creation failed." - }, - { - "name": "Canceled", - "value": "Canceled", - "description": "Resource creation was canceled." - }, - { - "name": "Updating", - "value": "Updating", - "description": "Resource is being updated." - } - ] - } - }, "ReadinessCategory": { "type": "string", "description": "Category of a cluster readiness check.", From 6f9602a9fe5a99b1652c0946e80e3356e0a7eb45 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 1 Jun 2026 08:12:14 -0700 Subject: [PATCH 11/39] Compilation and Lint fixes --- .../2026-06-15-preview/GetKubeInventory.json | 1 - .../2026-06-15-preview/ListKubeInventory.json | 58 +++++++++---------- .../kubeInventory/models.tsp | 5 +- .../examples/GetKubeInventory.json | 1 - .../examples/ListKubeInventory.json | 58 +++++++++---------- .../2026-06-15-preview/kubeInventory.json | 35 ----------- .../resource-manager/readme.md | 36 ++++++++++-- 7 files changed, 89 insertions(+), 105 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index 81bd72303a73..f1633a3e68b1 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -25,7 +25,6 @@ "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, "properties": { - "provisioningState": "Succeeded", "apiVersion": "v1", "kind": "Pod", "metadata": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index 569da7ab69b2..af6f3ad7930a 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -26,7 +26,6 @@ "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, "properties": { - "provisioningState": "Succeeded", "apiVersion": "v1", "kind": "Pod", "metadata": { @@ -188,24 +187,24 @@ } } ] - } - }, - "events": [ - { - "type": "Normal", - "reason": "Scheduled", - "age": "58d", - "from": "default-scheduler", - "message": "Successfully assigned kube-system/coredns-5d78c9869d-r4pzt to aks-nodepool1-12345678-1" }, - { - "type": "Normal", - "reason": "Pulled", - "age": "58d", - "from": "kubelet", - "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" - } - ] + "events": [ + { + "type": "Normal", + "reason": "Scheduled", + "age": "58d", + "from": "default-scheduler", + "message": "Successfully assigned kube-system/coredns-5d78c9869d-r4pzt to aks-nodepool1-12345678-1" + }, + { + "type": "Normal", + "reason": "Pulled", + "age": "58d", + "from": "kubelet", + "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" + } + ] + } }, { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current-kube-system", @@ -220,7 +219,6 @@ "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, "properties": { - "provisioningState": "Succeeded", "apiVersion": "upgrade.config.io/v1alpha1", "kind": "UpgradeAssessment", "metadata": { @@ -286,17 +284,17 @@ "severity": "Pass" } ] - } - }, - "events": [ - { - "type": "Normal", - "reason": "AssessmentComplete", - "age": "1h", - "from": "azure-kube-inventory-agent", - "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." - } - ] + }, + "events": [ + { + "type": "Normal", + "reason": "AssessmentComplete", + "age": "1h", + "from": "azure-kube-inventory-agent", + "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." + } + ] + } } ], "nextLink": null diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index bb8177f781ce..ad355fab0336 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -843,11 +843,8 @@ model KubernetesEvent { * The ARM resource name encodes the kind, Kubernetes name, and namespace * (e.g., 'pod-nginx-6d4cf56db6-x7q2p-default', 'upgrade-assessment-current-kube-system'). */ +#suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state" "This resource does not have a provisioning state per the original Swagger design" model KubeInventoryProperties { - /** Provisioning state of the KubeInventory resource. */ - @visibility(Lifecycle.Read) - provisioningState?: ResourceProvisioningState; - /** * Kubernetes API version of the represented resource * (e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1'). diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json index 81bd72303a73..f1633a3e68b1 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json @@ -25,7 +25,6 @@ "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, "properties": { - "provisioningState": "Succeeded", "apiVersion": "v1", "kind": "Pod", "metadata": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json index 569da7ab69b2..af6f3ad7930a 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json @@ -26,7 +26,6 @@ "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, "properties": { - "provisioningState": "Succeeded", "apiVersion": "v1", "kind": "Pod", "metadata": { @@ -188,24 +187,24 @@ } } ] - } - }, - "events": [ - { - "type": "Normal", - "reason": "Scheduled", - "age": "58d", - "from": "default-scheduler", - "message": "Successfully assigned kube-system/coredns-5d78c9869d-r4pzt to aks-nodepool1-12345678-1" }, - { - "type": "Normal", - "reason": "Pulled", - "age": "58d", - "from": "kubelet", - "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" - } - ] + "events": [ + { + "type": "Normal", + "reason": "Scheduled", + "age": "58d", + "from": "default-scheduler", + "message": "Successfully assigned kube-system/coredns-5d78c9869d-r4pzt to aks-nodepool1-12345678-1" + }, + { + "type": "Normal", + "reason": "Pulled", + "age": "58d", + "from": "kubelet", + "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" + } + ] + } }, { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current-kube-system", @@ -220,7 +219,6 @@ "lastModifiedAt": "2026-06-01T10:00:00.000Z" }, "properties": { - "provisioningState": "Succeeded", "apiVersion": "upgrade.config.io/v1alpha1", "kind": "UpgradeAssessment", "metadata": { @@ -286,17 +284,17 @@ "severity": "Pass" } ] - } - }, - "events": [ - { - "type": "Normal", - "reason": "AssessmentComplete", - "age": "1h", - "from": "azure-kube-inventory-agent", - "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." - } - ] + }, + "events": [ + { + "type": "Normal", + "reason": "AssessmentComplete", + "age": "1h", + "from": "azure-kube-inventory-agent", + "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." + } + ] + } } ], "nextLink": null diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 9541b13cba9a..ddccb6f0a52c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -183,36 +183,6 @@ } }, "definitions": { - "Azure.ResourceManager.ResourceProvisioningState": { - "type": "string", - "description": "The provisioning state of a resource type.", - "enum": [ - "Succeeded", - "Failed", - "Canceled" - ], - "x-ms-enum": { - "name": "ResourceProvisioningState", - "modelAsString": true, - "values": [ - { - "name": "Succeeded", - "value": "Succeeded", - "description": "Resource has been created." - }, - { - "name": "Failed", - "value": "Failed", - "description": "Resource creation failed." - }, - { - "name": "Canceled", - "value": "Canceled", - "description": "Resource creation was canceled." - } - ] - } - }, "Capabilities": { "type": "object", "description": "Linux capability set to add to or drop from a container's default capabilities.", @@ -750,11 +720,6 @@ "type": "object", "description": "Properties of a single KubeInventory ARM resource.\nEach ARM resource represents one Kubernetes object from the cluster inventory.\nThe ARM resource name encodes the kind, Kubernetes name, and namespace\n(e.g., 'pod-nginx-6d4cf56db6-x7q2p-default', 'upgrade-assessment-current-kube-system').", "properties": { - "provisioningState": { - "$ref": "#/definitions/Azure.ResourceManager.ResourceProvisioningState", - "description": "Provisioning state of the KubeInventory resource.", - "readOnly": true - }, "apiVersion": { "type": "string", "description": "Kubernetes API version of the represented resource\n(e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1')." diff --git a/specification/kubernetesconfiguration/resource-manager/readme.md b/specification/kubernetesconfiguration/resource-manager/readme.md index b65c6b3d299d..0fbacb943e89 100644 --- a/specification/kubernetesconfiguration/resource-manager/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/readme.md @@ -28,14 +28,42 @@ These are the global settings for the KubernetesConfiguration. title: SourceControlConfigurationClient description: KubernetesConfiguration Client openapi-type: arm -tag: package-preview-2026-06-15 ``` -### Tag: package-preview-2026-06-15 +### Tag: package-preview-2026-06 -These settings apply only when `--tag=package-preview-2026-06-15` is specified on the command line. +These settings apply only when `--tag=package-preview-2026-06` is specified on the command line. -``` yaml $(tag) == 'package-preview-2026-06-15' +``` yaml $(tag) == 'package-preview-2026-06' +input-file: + - Microsoft.KubernetesConfiguration/stable/2023-05-01/extensions.json + - Microsoft.KubernetesConfiguration/preview/2024-04-01-preview/fluxconfiguration.json + - Microsoft.KubernetesConfiguration/stable/2023-05-01/kubernetesconfiguration.json + - Microsoft.KubernetesConfiguration/stable/2023-05-01/operations.json + - Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +suppressions: + - code: ResourceNameRestriction + from: fluxconfiguration.json + reason: Existing service contract needs to be backward compatible, pattern validation exists in RP. + - code: DeleteResponseCodes + from: fluxconfiguration.json + reason: Existing service contract needs to be backward compatible, force delete does synchronous delete and returns 200. + - code: LroLocationHeader + from: fluxconfiguration.json + reason: Existing service contract needs to be backward compatible, 202 operations return Azure-Async-Operation header. + - code: AvoidAdditionalProperties + from: fluxconfiguration.json + reason: Existing service contract needs to be backward compatible. + - code: PatchResponseCodes + from: fluxconfiguration.json + reason: Existing service contract needs to be backward compatible. +``` + +### Tag: package-preview-2026-06-only + +These settings apply only when `--tag=package-preview-2026-06-only` is specified on the command line. + +``` yaml $(tag) == 'package-preview-2026-06-only' input-file: - Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json ``` From b6b0828471e698d159cbf96050533db561cdfa6e Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 1 Jun 2026 11:28:40 -0700 Subject: [PATCH 12/39] Fix tsp formatting --- .../kubeInventory/KubeInventory.tsp | 3 ++- .../Microsoft.KubernetesConfiguration/kubeInventory/models.tsp | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp index ee6c17a3bff3..2ca9e1d6b82b 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp @@ -14,7 +14,8 @@ namespace Microsoft.KubernetesConfiguration; /** * Singleton container resource grouping cluster inventory reports. */ -model KubeInventory is Azure.ResourceManager.ProxyResource { +model KubeInventory + is Azure.ResourceManager.ProxyResource { ...ResourceNameParameter< Resource = KubeInventory, KeyName = "kubeInventoryName", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index ad355fab0336..280f8b3ddb73 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -867,5 +867,3 @@ model KubeInventoryProperties { @identifiers(#[]) events?: KubernetesEvent[]; } - - From eb1a8f48b75a417af87658c9e2c7e69ce7058053 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 1 Jun 2026 12:06:52 -0700 Subject: [PATCH 13/39] Fix lint issues --- .../kubeInventory/models.tsp | 3 +++ .../preview/2026-06-15-preview/kubeInventory.json | 11 ++++++++--- .../resource-manager/readme.md | 3 +++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index 280f8b3ddb73..f9bea0b8342d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -249,6 +249,7 @@ model KubernetesObjectMeta { annotations?: KubernetesAnnotation[]; /** References to the objects that own this object (e.g., the ReplicaSet that owns a Pod). */ + @identifiers(#["uid"]) ownerReferences?: OwnerReference[]; /** Named lifecycle hooks that must be resolved before the object is deleted. */ @@ -784,6 +785,7 @@ model KubernetesResourceStatus { * Per-component compatibility results with the target Kubernetes version. * Populated for UpgradeAssessment resources. */ + @identifiers(#[]) componentCompatibility?: ComponentCompatibility[]; /** @@ -797,6 +799,7 @@ model KubernetesResourceStatus { * Cluster readiness check results. * Populated for UpgradeAssessment resources. */ + @identifiers(#[]) readinessChecks?: ReadinessCheck[]; // ── Generic overflow ──────────────────────────────────────────────────────── diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index ddccb6f0a52c..1e7079e9f059 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -931,7 +931,10 @@ "description": "References to the objects that own this object (e.g., the ReplicaSet that owns a Pod).", "items": { "$ref": "#/definitions/OwnerReference" - } + }, + "x-ms-identifiers": [ + "uid" + ] }, "finalizers": { "type": "array", @@ -1128,7 +1131,8 @@ "description": "Per-component compatibility results with the target Kubernetes version.\nPopulated for UpgradeAssessment resources.", "items": { "$ref": "#/definitions/ComponentCompatibility" - } + }, + "x-ms-identifiers": [] }, "deprecatedApis": { "type": "array", @@ -1143,7 +1147,8 @@ "description": "Cluster readiness check results.\nPopulated for UpgradeAssessment resources.", "items": { "$ref": "#/definitions/ReadinessCheck" - } + }, + "x-ms-identifiers": [] }, "additionalFields": { "type": "array", diff --git a/specification/kubernetesconfiguration/resource-manager/readme.md b/specification/kubernetesconfiguration/resource-manager/readme.md index 0fbacb943e89..bfd06b4f62f5 100644 --- a/specification/kubernetesconfiguration/resource-manager/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/readme.md @@ -57,6 +57,9 @@ suppressions: - code: PatchResponseCodes from: fluxconfiguration.json reason: Existing service contract needs to be backward compatible. + - code: EnumInsteadOfBoolean + from: kubeInventory.json + reason: Boolean properties mirror the Kubernetes API contract directly and must remain boolean for compatibility. ``` ### Tag: package-preview-2026-06-only From 10fd55c523d54056c4c78e3224ea883d0548ece1 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 1 Jun 2026 12:17:44 -0700 Subject: [PATCH 14/39] Fix lint issues --- .../Microsoft.KubernetesConfiguration/kubeInventory/models.tsp | 2 +- .../kubeInventory/preview/2026-06-15-preview/kubeInventory.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index f9bea0b8342d..e1751cebda7f 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -301,7 +301,7 @@ model KubernetesGenericField { @visibility(Lifecycle.Read) name: string; - /** Value */ + /** The string value of the field. */ value: string; } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 1e7079e9f059..47d3a3e7ceae 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -844,7 +844,7 @@ }, "value": { "type": "string", - "description": "Value" + "description": "The string value of the field." } }, "required": [ From 15a139dc33e134f622a64690f28309630aea55b9 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Tue, 2 Jun 2026 09:09:27 -0700 Subject: [PATCH 15/39] Add attachedToExtension field --- .../examples/2026-06-15-preview/GetKubeInventory.json | 3 ++- .../examples/2026-06-15-preview/ListKubeInventory.json | 6 ++++-- .../kubeInventory/models.tsp | 3 +++ .../2026-06-15-preview/examples/GetKubeInventory.json | 3 ++- .../2026-06-15-preview/examples/ListKubeInventory.json | 6 ++++-- .../preview/2026-06-15-preview/kubeInventory.json | 4 ++++ 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index f1633a3e68b1..de69695a4fd7 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -235,7 +235,8 @@ "from": "kubelet", "message": "Started container nginx" } - ] + ], + "attachedToExtension": "azure-kube-inventory" } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index af6f3ad7930a..7548aec275bf 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -203,7 +203,8 @@ "from": "kubelet", "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" } - ] + ], + "attachedToExtension": "azure-kube-inventory" } }, { @@ -293,7 +294,8 @@ "from": "azure-kube-inventory-agent", "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." } - ] + ], + "attachedToExtension": "azure-kube-inventory" } } ], diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index e1751cebda7f..fbcbad6965fe 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -869,4 +869,7 @@ model KubeInventoryProperties { /** Kubernetes events recorded against this resource. */ @identifiers(#[]) events?: KubernetesEvent[]; + + /** Name of the extension this inventory resource is attached to. */ + attachedToExtension?: string; } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json index f1633a3e68b1..de69695a4fd7 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json @@ -235,7 +235,8 @@ "from": "kubelet", "message": "Started container nginx" } - ] + ], + "attachedToExtension": "azure-kube-inventory" } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json index af6f3ad7930a..7548aec275bf 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json @@ -203,7 +203,8 @@ "from": "kubelet", "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" } - ] + ], + "attachedToExtension": "azure-kube-inventory" } }, { @@ -293,7 +294,8 @@ "from": "azure-kube-inventory-agent", "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." } - ] + ], + "attachedToExtension": "azure-kube-inventory" } } ], diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 47d3a3e7ceae..6599ebf4b912 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -747,6 +747,10 @@ "$ref": "#/definitions/KubernetesEvent" }, "x-ms-identifiers": [] + }, + "attachedToExtension": { + "type": "string", + "description": "Name of the extension this inventory resource is attached to." } } }, From 7e22118259fb747e054ff04d96ef1d206da1accc Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 4 Jun 2026 09:28:08 -0700 Subject: [PATCH 16/39] Fix review comments --- .../kubeInventory/KubeInventory.tsp | 4 +- .../2026-06-15-preview/GetKubeInventory.json | 3 +- .../GetUpgradeAssessment.json | 261 ++++++++++++++++++ .../examples/GetKubeInventory.json | 3 +- .../examples/GetUpgradeAssessment.json | 261 ++++++++++++++++++ .../2026-06-15-preview/kubeInventory.json | 11 +- 6 files changed, 533 insertions(+), 10 deletions(-) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp index 2ca9e1d6b82b..9edd7d74dce1 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp @@ -37,12 +37,12 @@ alias KubeInventoryOps = Azure.ResourceManager.Legacy.ExtensionOperations< /** * The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes, - * Microsoft.HybridContainerService. + * Microsoft.HybridContainerService, Microsoft.KubernetesConfiguration. */ @path @segment("providers") @key - @pattern("^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService)$") + @pattern("^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService|KubernetesConfiguration)$") clusterRp: string; /** diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index de69695a4fd7..f1633a3e68b1 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -235,8 +235,7 @@ "from": "kubelet", "message": "Started container nginx" } - ], - "attachedToExtension": "azure-kube-inventory" + ] } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json new file mode 100644 index 000000000000..6e7d1d46f435 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json @@ -0,0 +1,261 @@ +{ + "title": "Get Upgrade Assessment", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "upgrade-assessment-current", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current", + "name": "upgrade-assessment-current", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-02T10:15:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-02T10:15:00.000Z" + }, + "properties": { + "apiVersion": "upgrade.config.io/v1alpha1", + "kind": "UpgradeAssessment", + "metadata": { + "name": "current", + "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901", + "creationTimestamp": "2026-06-02T10:15:00Z" + }, + "spec": { + "currentKubernetesVersion": "1.27.9", + "targetKubernetesVersion": "1.30.0" + }, + "status": { + "assessmentTime": "2026-06-02T10:15:00Z", + "overallSeverity": "Critical", + "componentCompatibility": [ + { + "name": "kube-proxy", + "version": "1.27.9", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "coredns", + "version": "1.10.1", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "metrics-server", + "version": "0.6.3", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "azure-cni", + "version": "1.4.14", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "cert-manager", + "version": "1.8.0", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.12.0", + "notes": "cert-manager v1.8.0 does not support Kubernetes 1.30+. The cert-manager webhook API group was changed in K8s 1.29 and cert-manager >= 1.12.0 is required." + }, + { + "name": "ingress-nginx", + "version": "1.2.1", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.9.0", + "notes": "ingress-nginx v1.2.1 uses networking.k8s.io/v1beta1 which is removed in Kubernetes 1.29. Upgrade to >= 1.9.0." + }, + { + "name": "azure-policy", + "version": "1.2.1", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.6.0", + "notes": "azure-policy v1.2.1 relies on PodSecurityPolicy (policy/v1beta1/podsecuritypolicies) which was removed in Kubernetes 1.25." + }, + { + "name": "kube-state-metrics", + "version": "2.7.0", + "compatibilityStatus": "Untested", + "severity": "Warning", + "notes": "kube-state-metrics v2.7.0 has been tested up to Kubernetes 1.28. Compatibility with 1.30 is not confirmed; upgrade to >= 2.10.0 is recommended." + }, + { + "name": "cluster-autoscaler", + "version": "1.27.2", + "compatibilityStatus": "Untested", + "severity": "Warning", + "notes": "cluster-autoscaler v1.27.2 is outside the tested range for Kubernetes 1.30. The autoscaler major version should match the cluster minor version." + }, + { + "name": "prometheus-operator", + "version": "0.63.0", + "compatibilityStatus": "Untested", + "severity": "Warning", + "notes": "prometheus-operator v0.63.0 has not been validated against Kubernetes 1.30. Upgrade to >= 0.72.0 which includes 1.30 test coverage." + } + ], + "deprecatedApis": [ + { + "group": "networking.k8s.io", + "version": "v1beta1", + "resource": "ingresses", + "removedRelease": "1.22", + "usageMetrics": { + "get": 142, + "list": 89, + "watch": 512, + "post": 3, + "put": 7 + }, + "lastUsageObservedAt": "2026-06-02T09:58:34Z", + "severity": "Critical" + }, + { + "group": "policy", + "version": "v1beta1", + "resource": "poddisruptionbudgets", + "removedRelease": "1.25", + "usageMetrics": { + "get": 54, + "list": 31, + "watch": 210 + }, + "lastUsageObservedAt": "2026-06-02T10:01:12Z", + "severity": "Critical" + }, + { + "group": "autoscaling", + "version": "v2beta2", + "resource": "horizontalpodautoscalers", + "removedRelease": "1.26", + "usageMetrics": { + "get": 22, + "list": 15, + "watch": 88 + }, + "lastUsageObservedAt": "2026-06-02T09:45:00Z", + "severity": "Critical" + }, + { + "group": "batch", + "version": "v1beta1", + "resource": "cronjobs", + "removedRelease": "1.25", + "usageMetrics": { + "get": 8, + "list": 4, + "watch": 27, + "post": 1 + }, + "lastUsageObservedAt": "2026-06-01T22:30:00Z", + "severity": "Critical" + }, + { + "group": "storage.k8s.io", + "version": "v1beta1", + "resource": "storageclasses", + "removedRelease": "1.32", + "usageMetrics": { + "get": 5, + "list": 3 + }, + "lastUsageObservedAt": "2026-06-02T08:10:00Z", + "severity": "Warning" + } + ], + "readinessChecks": [ + { + "category": "APIServerHealth", + "severity": "Pass", + "details": "API server /healthz and /readyz endpoints responded successfully." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000000", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000001", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000002", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000003", + "severity": "Critical", + "details": "Node is NotReady. Last transition: 2026-06-02T07:42:00Z. Condition: KubeletNotReady — PLEG is not healthy: pleg was last seen active 3m45s ago; threshold is 3m0s." + }, + { + "category": "PodDisruptionBudget", + "name": "default/frontend-pdb", + "severity": "Pass", + "details": "PDB allows disruption: minAvailable=2, current replicas=5, disruptions allowed=3." + }, + { + "category": "PodDisruptionBudget", + "name": "default/backend-pdb", + "severity": "Pass", + "details": "PDB allows disruption: minAvailable=1, current replicas=4, disruptions allowed=3." + }, + { + "category": "PodDisruptionBudget", + "name": "kube-system/coredns-pdb", + "severity": "Pass", + "details": "PDB allows disruption: minAvailable=1, current replicas=2, disruptions allowed=1." + }, + { + "category": "PodDisruptionBudget", + "name": "monitoring/prometheus-pdb", + "severity": "Pass", + "details": "PDB allows disruption: maxUnavailable=1, current replicas=3, disruptions allowed=1." + }, + { + "category": "PodDisruptionBudget", + "name": "production/payments-api-pdb", + "severity": "Critical", + "details": "PDB is blocking: minAvailable=3, current replicas=3, disruptions allowed=0. No pods can be evicted during node drain." + }, + { + "category": "PodDisruptionBudget", + "name": "production/order-service-pdb", + "severity": "Critical", + "details": "PDB is blocking: minAvailable=2, current replicas=2, disruptions allowed=0. Scale up replicas or reduce minAvailable before upgrading." + }, + { + "category": "PodDisruptionBudget", + "name": "ingress-nginx/ingress-nginx-pdb", + "severity": "Critical", + "details": "PDB is blocking: maxUnavailable=0, current replicas=2, disruptions allowed=0. maxUnavailable=0 prevents all evictions." + } + ] + }, + "attachedToExtension": "k8s-upgrade-assessment" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json index de69695a4fd7..f1633a3e68b1 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json @@ -235,8 +235,7 @@ "from": "kubelet", "message": "Started container nginx" } - ], - "attachedToExtension": "azure-kube-inventory" + ] } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json new file mode 100644 index 000000000000..6e7d1d46f435 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json @@ -0,0 +1,261 @@ +{ + "title": "Get Upgrade Assessment", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "upgrade-assessment-current", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current", + "name": "upgrade-assessment-current", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-02T10:15:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-02T10:15:00.000Z" + }, + "properties": { + "apiVersion": "upgrade.config.io/v1alpha1", + "kind": "UpgradeAssessment", + "metadata": { + "name": "current", + "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901", + "creationTimestamp": "2026-06-02T10:15:00Z" + }, + "spec": { + "currentKubernetesVersion": "1.27.9", + "targetKubernetesVersion": "1.30.0" + }, + "status": { + "assessmentTime": "2026-06-02T10:15:00Z", + "overallSeverity": "Critical", + "componentCompatibility": [ + { + "name": "kube-proxy", + "version": "1.27.9", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "coredns", + "version": "1.10.1", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "metrics-server", + "version": "0.6.3", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "azure-cni", + "version": "1.4.14", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "cert-manager", + "version": "1.8.0", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.12.0", + "notes": "cert-manager v1.8.0 does not support Kubernetes 1.30+. The cert-manager webhook API group was changed in K8s 1.29 and cert-manager >= 1.12.0 is required." + }, + { + "name": "ingress-nginx", + "version": "1.2.1", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.9.0", + "notes": "ingress-nginx v1.2.1 uses networking.k8s.io/v1beta1 which is removed in Kubernetes 1.29. Upgrade to >= 1.9.0." + }, + { + "name": "azure-policy", + "version": "1.2.1", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.6.0", + "notes": "azure-policy v1.2.1 relies on PodSecurityPolicy (policy/v1beta1/podsecuritypolicies) which was removed in Kubernetes 1.25." + }, + { + "name": "kube-state-metrics", + "version": "2.7.0", + "compatibilityStatus": "Untested", + "severity": "Warning", + "notes": "kube-state-metrics v2.7.0 has been tested up to Kubernetes 1.28. Compatibility with 1.30 is not confirmed; upgrade to >= 2.10.0 is recommended." + }, + { + "name": "cluster-autoscaler", + "version": "1.27.2", + "compatibilityStatus": "Untested", + "severity": "Warning", + "notes": "cluster-autoscaler v1.27.2 is outside the tested range for Kubernetes 1.30. The autoscaler major version should match the cluster minor version." + }, + { + "name": "prometheus-operator", + "version": "0.63.0", + "compatibilityStatus": "Untested", + "severity": "Warning", + "notes": "prometheus-operator v0.63.0 has not been validated against Kubernetes 1.30. Upgrade to >= 0.72.0 which includes 1.30 test coverage." + } + ], + "deprecatedApis": [ + { + "group": "networking.k8s.io", + "version": "v1beta1", + "resource": "ingresses", + "removedRelease": "1.22", + "usageMetrics": { + "get": 142, + "list": 89, + "watch": 512, + "post": 3, + "put": 7 + }, + "lastUsageObservedAt": "2026-06-02T09:58:34Z", + "severity": "Critical" + }, + { + "group": "policy", + "version": "v1beta1", + "resource": "poddisruptionbudgets", + "removedRelease": "1.25", + "usageMetrics": { + "get": 54, + "list": 31, + "watch": 210 + }, + "lastUsageObservedAt": "2026-06-02T10:01:12Z", + "severity": "Critical" + }, + { + "group": "autoscaling", + "version": "v2beta2", + "resource": "horizontalpodautoscalers", + "removedRelease": "1.26", + "usageMetrics": { + "get": 22, + "list": 15, + "watch": 88 + }, + "lastUsageObservedAt": "2026-06-02T09:45:00Z", + "severity": "Critical" + }, + { + "group": "batch", + "version": "v1beta1", + "resource": "cronjobs", + "removedRelease": "1.25", + "usageMetrics": { + "get": 8, + "list": 4, + "watch": 27, + "post": 1 + }, + "lastUsageObservedAt": "2026-06-01T22:30:00Z", + "severity": "Critical" + }, + { + "group": "storage.k8s.io", + "version": "v1beta1", + "resource": "storageclasses", + "removedRelease": "1.32", + "usageMetrics": { + "get": 5, + "list": 3 + }, + "lastUsageObservedAt": "2026-06-02T08:10:00Z", + "severity": "Warning" + } + ], + "readinessChecks": [ + { + "category": "APIServerHealth", + "severity": "Pass", + "details": "API server /healthz and /readyz endpoints responded successfully." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000000", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000001", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000002", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000003", + "severity": "Critical", + "details": "Node is NotReady. Last transition: 2026-06-02T07:42:00Z. Condition: KubeletNotReady — PLEG is not healthy: pleg was last seen active 3m45s ago; threshold is 3m0s." + }, + { + "category": "PodDisruptionBudget", + "name": "default/frontend-pdb", + "severity": "Pass", + "details": "PDB allows disruption: minAvailable=2, current replicas=5, disruptions allowed=3." + }, + { + "category": "PodDisruptionBudget", + "name": "default/backend-pdb", + "severity": "Pass", + "details": "PDB allows disruption: minAvailable=1, current replicas=4, disruptions allowed=3." + }, + { + "category": "PodDisruptionBudget", + "name": "kube-system/coredns-pdb", + "severity": "Pass", + "details": "PDB allows disruption: minAvailable=1, current replicas=2, disruptions allowed=1." + }, + { + "category": "PodDisruptionBudget", + "name": "monitoring/prometheus-pdb", + "severity": "Pass", + "details": "PDB allows disruption: maxUnavailable=1, current replicas=3, disruptions allowed=1." + }, + { + "category": "PodDisruptionBudget", + "name": "production/payments-api-pdb", + "severity": "Critical", + "details": "PDB is blocking: minAvailable=3, current replicas=3, disruptions allowed=0. No pods can be evicted during node drain." + }, + { + "category": "PodDisruptionBudget", + "name": "production/order-service-pdb", + "severity": "Critical", + "details": "PDB is blocking: minAvailable=2, current replicas=2, disruptions allowed=0. Scale up replicas or reduce minAvailable before upgrading." + }, + { + "category": "PodDisruptionBudget", + "name": "ingress-nginx/ingress-nginx-pdb", + "severity": "Critical", + "details": "PDB is blocking: maxUnavailable=0, current replicas=2, disruptions allowed=0. maxUnavailable=0 prevents all evictions." + } + ] + }, + "attachedToExtension": "k8s-upgrade-assessment" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 6599ebf4b912..1ec60e95f32e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -64,10 +64,10 @@ { "name": "clusterRp", "in": "path", - "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes,\nMicrosoft.HybridContainerService.", + "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes,\nMicrosoft.HybridContainerService, Microsoft.KubernetesConfiguration.", "required": true, "type": "string", - "pattern": "^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService)$" + "pattern": "^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService|KubernetesConfiguration)$" }, { "name": "clusterResourceName", @@ -130,10 +130,10 @@ { "name": "clusterRp", "in": "path", - "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes,\nMicrosoft.HybridContainerService.", + "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes,\nMicrosoft.HybridContainerService, Microsoft.KubernetesConfiguration.", "required": true, "type": "string", - "pattern": "^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService)$" + "pattern": "^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService|KubernetesConfiguration)$" }, { "name": "clusterResourceName", @@ -177,6 +177,9 @@ "x-ms-examples": { "Get KubeInventory": { "$ref": "./examples/GetKubeInventory.json" + }, + "Get Upgrade Assessment": { + "$ref": "./examples/GetUpgradeAssessment.json" } } } From 686794e1a1ed7291204e2da91dd5837ec0074cba Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 4 Jun 2026 13:37:11 -0700 Subject: [PATCH 17/39] Split UpgradeAssessment and KubeInventory --- .../GetUpgradeAssessment.json | 261 --------- .../2026-06-15-preview/ListKubeInventory.json | 91 --- .../kubeInventory/models.tsp | 206 +------ .../examples/GetUpgradeAssessment.json | 261 --------- .../examples/ListKubeInventory.json | 91 --- .../2026-06-15-preview/kubeInventory.json | 315 +--------- .../upgradeAssessment/UpgradeAssessment.tsp | 94 +++ .../GetUpgradeAssessment.json | 122 ++++ .../ListUpgradeAssessment.json | 72 +++ .../upgradeAssessment/main.tsp | 33 ++ .../upgradeAssessment/models.tsp | 205 +++++++ .../examples/GetUpgradeAssessment.json | 122 ++++ .../examples/ListUpgradeAssessment.json | 72 +++ .../2026-06-15-preview/upgradeAssessment.json | 536 ++++++++++++++++++ .../upgradeAssessment/tspconfig.yaml | 50 ++ 15 files changed, 1312 insertions(+), 1219 deletions(-) delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/UpgradeAssessment.tsp create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/main.tsp create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/tspconfig.yaml diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json deleted file mode 100644 index 6e7d1d46f435..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetUpgradeAssessment.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "title": "Get Upgrade Assessment", - "operationId": "KubeInventories_Get", - "parameters": { - "subscriptionId": "00000000-0000-0000-0000-000000000001", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", - "clusterName": "clusterName1", - "kubeInventoryName": "upgrade-assessment-current", - "api-version": "2026-06-15-preview" - }, - "responses": { - "200": { - "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current", - "name": "upgrade-assessment-current", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", - "systemData": { - "createdBy": "string", - "createdByType": "Application", - "createdAt": "2026-06-02T10:15:00.000Z", - "lastModifiedBy": "string", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-02T10:15:00.000Z" - }, - "properties": { - "apiVersion": "upgrade.config.io/v1alpha1", - "kind": "UpgradeAssessment", - "metadata": { - "name": "current", - "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901", - "creationTimestamp": "2026-06-02T10:15:00Z" - }, - "spec": { - "currentKubernetesVersion": "1.27.9", - "targetKubernetesVersion": "1.30.0" - }, - "status": { - "assessmentTime": "2026-06-02T10:15:00Z", - "overallSeverity": "Critical", - "componentCompatibility": [ - { - "name": "kube-proxy", - "version": "1.27.9", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "coredns", - "version": "1.10.1", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "metrics-server", - "version": "0.6.3", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "azure-cni", - "version": "1.4.14", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "cert-manager", - "version": "1.8.0", - "compatibilityStatus": "Incompatible", - "severity": "Critical", - "minCompatibleVersion": "1.12.0", - "notes": "cert-manager v1.8.0 does not support Kubernetes 1.30+. The cert-manager webhook API group was changed in K8s 1.29 and cert-manager >= 1.12.0 is required." - }, - { - "name": "ingress-nginx", - "version": "1.2.1", - "compatibilityStatus": "Incompatible", - "severity": "Critical", - "minCompatibleVersion": "1.9.0", - "notes": "ingress-nginx v1.2.1 uses networking.k8s.io/v1beta1 which is removed in Kubernetes 1.29. Upgrade to >= 1.9.0." - }, - { - "name": "azure-policy", - "version": "1.2.1", - "compatibilityStatus": "Incompatible", - "severity": "Critical", - "minCompatibleVersion": "1.6.0", - "notes": "azure-policy v1.2.1 relies on PodSecurityPolicy (policy/v1beta1/podsecuritypolicies) which was removed in Kubernetes 1.25." - }, - { - "name": "kube-state-metrics", - "version": "2.7.0", - "compatibilityStatus": "Untested", - "severity": "Warning", - "notes": "kube-state-metrics v2.7.0 has been tested up to Kubernetes 1.28. Compatibility with 1.30 is not confirmed; upgrade to >= 2.10.0 is recommended." - }, - { - "name": "cluster-autoscaler", - "version": "1.27.2", - "compatibilityStatus": "Untested", - "severity": "Warning", - "notes": "cluster-autoscaler v1.27.2 is outside the tested range for Kubernetes 1.30. The autoscaler major version should match the cluster minor version." - }, - { - "name": "prometheus-operator", - "version": "0.63.0", - "compatibilityStatus": "Untested", - "severity": "Warning", - "notes": "prometheus-operator v0.63.0 has not been validated against Kubernetes 1.30. Upgrade to >= 0.72.0 which includes 1.30 test coverage." - } - ], - "deprecatedApis": [ - { - "group": "networking.k8s.io", - "version": "v1beta1", - "resource": "ingresses", - "removedRelease": "1.22", - "usageMetrics": { - "get": 142, - "list": 89, - "watch": 512, - "post": 3, - "put": 7 - }, - "lastUsageObservedAt": "2026-06-02T09:58:34Z", - "severity": "Critical" - }, - { - "group": "policy", - "version": "v1beta1", - "resource": "poddisruptionbudgets", - "removedRelease": "1.25", - "usageMetrics": { - "get": 54, - "list": 31, - "watch": 210 - }, - "lastUsageObservedAt": "2026-06-02T10:01:12Z", - "severity": "Critical" - }, - { - "group": "autoscaling", - "version": "v2beta2", - "resource": "horizontalpodautoscalers", - "removedRelease": "1.26", - "usageMetrics": { - "get": 22, - "list": 15, - "watch": 88 - }, - "lastUsageObservedAt": "2026-06-02T09:45:00Z", - "severity": "Critical" - }, - { - "group": "batch", - "version": "v1beta1", - "resource": "cronjobs", - "removedRelease": "1.25", - "usageMetrics": { - "get": 8, - "list": 4, - "watch": 27, - "post": 1 - }, - "lastUsageObservedAt": "2026-06-01T22:30:00Z", - "severity": "Critical" - }, - { - "group": "storage.k8s.io", - "version": "v1beta1", - "resource": "storageclasses", - "removedRelease": "1.32", - "usageMetrics": { - "get": 5, - "list": 3 - }, - "lastUsageObservedAt": "2026-06-02T08:10:00Z", - "severity": "Warning" - } - ], - "readinessChecks": [ - { - "category": "APIServerHealth", - "severity": "Pass", - "details": "API server /healthz and /readyz endpoints responded successfully." - }, - { - "category": "NodeStatus", - "name": "aks-nodepool1-12345678-vmss000000", - "severity": "Pass", - "details": "Node is Ready. Kubelet version: v1.27.9." - }, - { - "category": "NodeStatus", - "name": "aks-nodepool1-12345678-vmss000001", - "severity": "Pass", - "details": "Node is Ready. Kubelet version: v1.27.9." - }, - { - "category": "NodeStatus", - "name": "aks-nodepool1-12345678-vmss000002", - "severity": "Pass", - "details": "Node is Ready. Kubelet version: v1.27.9." - }, - { - "category": "NodeStatus", - "name": "aks-nodepool1-12345678-vmss000003", - "severity": "Critical", - "details": "Node is NotReady. Last transition: 2026-06-02T07:42:00Z. Condition: KubeletNotReady — PLEG is not healthy: pleg was last seen active 3m45s ago; threshold is 3m0s." - }, - { - "category": "PodDisruptionBudget", - "name": "default/frontend-pdb", - "severity": "Pass", - "details": "PDB allows disruption: minAvailable=2, current replicas=5, disruptions allowed=3." - }, - { - "category": "PodDisruptionBudget", - "name": "default/backend-pdb", - "severity": "Pass", - "details": "PDB allows disruption: minAvailable=1, current replicas=4, disruptions allowed=3." - }, - { - "category": "PodDisruptionBudget", - "name": "kube-system/coredns-pdb", - "severity": "Pass", - "details": "PDB allows disruption: minAvailable=1, current replicas=2, disruptions allowed=1." - }, - { - "category": "PodDisruptionBudget", - "name": "monitoring/prometheus-pdb", - "severity": "Pass", - "details": "PDB allows disruption: maxUnavailable=1, current replicas=3, disruptions allowed=1." - }, - { - "category": "PodDisruptionBudget", - "name": "production/payments-api-pdb", - "severity": "Critical", - "details": "PDB is blocking: minAvailable=3, current replicas=3, disruptions allowed=0. No pods can be evicted during node drain." - }, - { - "category": "PodDisruptionBudget", - "name": "production/order-service-pdb", - "severity": "Critical", - "details": "PDB is blocking: minAvailable=2, current replicas=2, disruptions allowed=0. Scale up replicas or reduce minAvailable before upgrading." - }, - { - "category": "PodDisruptionBudget", - "name": "ingress-nginx/ingress-nginx-pdb", - "severity": "Critical", - "details": "PDB is blocking: maxUnavailable=0, current replicas=2, disruptions allowed=0. maxUnavailable=0 prevents all evictions." - } - ] - }, - "attachedToExtension": "k8s-upgrade-assessment" - } - } - } - } -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index 7548aec275bf..e2ca313a2a46 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -206,97 +206,6 @@ ], "attachedToExtension": "azure-kube-inventory" } - }, - { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current-kube-system", - "name": "upgrade-assessment-current-kube-system", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", - "systemData": { - "createdBy": "string", - "createdByType": "Application", - "createdAt": "2026-06-01T10:00:00.000Z", - "lastModifiedBy": "string", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-01T10:00:00.000Z" - }, - "properties": { - "apiVersion": "upgrade.config.io/v1alpha1", - "kind": "UpgradeAssessment", - "metadata": { - "name": "current", - "namespaceName": "kube-system", - "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", - "resourceVersion": "9124033", - "generation": 3, - "creationTimestamp": "2026-05-15T08:00:00Z", - "labels": [ - { - "name": "managed-by", - "value": "azure-kube-inventory-agent" - } - ] - }, - "spec": { - "currentKubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30" - }, - "status": { - "assessmentTime": "2026-05-28T14:30:00Z", - "overallSeverity": "Pass", - "conditions": [ - { - "type": "AssessmentComplete", - "status": "True", - "reason": "Succeeded", - "message": "Upgrade assessment completed successfully.", - "lastTransitionTime": "2026-05-28T14:30:00Z" - } - ], - "componentCompatibility": [ - { - "name": "containerd", - "version": "1.7.4", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "azure-cni", - "version": "1.5.29", - "compatibilityStatus": "Compatible", - "severity": "Pass" - } - ], - "deprecatedApis": [], - "readinessChecks": [ - { - "category": "NodeStatus", - "severity": "Pass" - }, - { - "category": "APIServerHealth", - "severity": "Pass" - }, - { - "category": "PodDisruptionBudget", - "severity": "Pass" - }, - { - "category": "Addon", - "severity": "Pass" - } - ] - }, - "events": [ - { - "type": "Normal", - "reason": "AssessmentComplete", - "age": "1h", - "from": "azure-kube-inventory-agent", - "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." - } - ], - "attachedToExtension": "azure-kube-inventory" - } } ], "nextLink": null diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index fbcbad6965fe..ae1a527bb250 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -15,154 +15,6 @@ using Azure.ClientGenerator.Core; namespace Microsoft.KubernetesConfiguration; -// ─── UpgradeAssessment enums ────────────────────────────────────────────────── - -/** Severity of an upgrade-assessment finding or readiness check. */ -union Severity { - string, - - /** No issues found. */ - Pass: "Pass", - - /** Non-blocking issues found; upgrade is possible but action is recommended. */ - Warning: "Warning", - - /** Blocking issues found; upgrade should not proceed without remediation. */ - Critical: "Critical", - - /** Severity could not be determined. */ - Unknown: "Unknown", -} - -/** Compatibility status of a cluster component with the target Kubernetes version. */ -union CompatibilityStatus { - string, - - /** Component is compatible with the target version. */ - Compatible: "Compatible", - - /** Compatibility with the target version has not been tested. */ - Untested: "Untested", - - /** Component is incompatible with the target version. */ - Incompatible: "Incompatible", - - /** Compatibility status is unknown. */ - Unknown: "Unknown", -} - -/** Category of a cluster readiness check. */ -union ReadinessCategory { - string, - - /** Node status check. */ - NodeStatus: "NodeStatus", - - /** API server health check. */ - APIServerHealth: "APIServerHealth", - - /** Pod disruption budget check. */ - PodDisruptionBudget: "PodDisruptionBudget", - - /** Addon compatibility check. */ - Addon: "Addon", - - /** Storage compatibility check. */ - Storage: "Storage", - - /** Networking compatibility check. */ - Networking: "Networking", -} - -// ─── UpgradeAssessment typed sub-models ────────────────────────────────────── - -/** Compatibility status of a single cluster component with the target Kubernetes version. */ -model ComponentCompatibility { - /** Component name (e.g., 'containerd', 'calico'). */ - name: string; - - /** Installed component version. */ - version: string; - - /** Compatibility of the component with the target Kubernetes version. */ - compatibilityStatus: CompatibilityStatus; - - /** Severity associated with this compatibility result. */ - severity: Severity; - - /** Minimum component version known to be compatible with targetKubernetesVersion. */ - minCompatibleVersion?: string; - - /** Additional notes about compatibility. */ - notes?: string; -} - -/** Observed call counts per HTTP verb for a deprecated Kubernetes API. */ -model HttpVerbUsageMetrics { - /** Number of GET requests observed. */ - get?: int64; - - /** Number of LIST requests observed. */ - list?: int64; - - /** Number of POST (create) requests observed. */ - post?: int64; - - /** Number of PUT (replace) requests observed. */ - put?: int64; - - /** Number of PATCH requests observed. */ - patch?: int64; - - /** Number of DELETE requests observed. */ - delete?: int64; - - /** Number of WATCH requests observed. */ - watch?: int64; -} - -/** A deprecated Kubernetes API still in use in the cluster. */ -model DeprecatedApiUsage { - /** API group (e.g., 'flowcontrol.apiserver.k8s.io'). */ - group: string; - - /** API version (e.g., 'v1beta3'). */ - version: string; - - /** Resource plural name (e.g., 'flowschemas'). */ - resource: string; - - /** Kubernetes release in which this API is removed (e.g., '1.32'). */ - removedRelease?: string; - - /** HTTP verb call counts observed for this deprecated API. */ - usageMetrics?: HttpVerbUsageMetrics; - - /** UTC timestamp of the last observed usage. */ - lastUsageObservedAt?: utcDateTime; - - /** Severity of continued use of this deprecated API. */ - severity: Severity; -} - -/** A single cluster readiness check result. */ -model ReadinessCheck { - /** Category of the readiness check. */ - category: ReadinessCategory; - - /** - * Subject of the check (node name, workload namespace/name, etc.). - * Optional for cluster-wide checks. - */ - name?: string; - - /** Severity of the check result. */ - severity: Severity; - - /** Human-readable reason when severity is not 'pass'. */ - details?: string; -} - /** A single Kubernetes label (key/value pair used for selection and grouping). */ model KubernetesLabel { /** Label key (e.g., 'app.kubernetes.io/name'). */ @@ -594,8 +446,7 @@ model ContainerStatus { * Desired state (spec) of a Kubernetes resource. * * Well-known fields for native workloads (Pod, Deployment, Service, etc.) are typed - * directly. UpgradeAssessment spec fields are merged in as optional typed properties. - * Fields not covered by any typed property can be placed in additionalFields. + * directly. Fields not covered by any typed property can be placed in additionalFields. */ model KubernetesResourceSpec { // ── Pod / workload ────────────────────────────────────────────────────────── @@ -679,20 +530,6 @@ model KubernetesResourceSpec { */ securityContext?: PodSecurityContext; - // ── UpgradeAssessment (kind = "UpgradeAssessment") ────────────────────────── - - /** - * Current Kubernetes version running on the cluster (e.g., '1.29'). - * Populated for UpgradeAssessment resources. - */ - currentKubernetesVersion?: string; - - /** - * Target Kubernetes version to evaluate for upgrade (e.g., '1.30'). - * Populated for UpgradeAssessment resources. - */ - targetKubernetesVersion?: string; - // ── Generic overflow ──────────────────────────────────────────────────────── /** @@ -707,8 +544,7 @@ model KubernetesResourceSpec { * Observed state (status) of a Kubernetes resource, written by the controller. * * Well-known fields for native workloads (Pod, Deployment, Service, etc.) are typed - * directly. UpgradeAssessment status fields are merged in as optional typed properties. - * Fields not covered by any typed property can be placed in additionalFields. + * directly. Fields not covered by any typed property can be placed in additionalFields. */ model KubernetesResourceStatus { // ── Universal ─────────────────────────────────────────────────────────────── @@ -766,42 +602,6 @@ model KubernetesResourceStatus { */ observedGeneration?: int64; - // ── UpgradeAssessment (kind = "UpgradeAssessment") ────────────────────────── - - /** - * UTC timestamp when the in-cluster agent last computed this assessment. - * Populated for UpgradeAssessment resources. - */ - @visibility(Lifecycle.Read) - assessmentTime?: utcDateTime; - - /** - * Rolled-up severity across all checks; highest severity wins. - * Populated for UpgradeAssessment resources. - */ - overallSeverity?: Severity; - - /** - * Per-component compatibility results with the target Kubernetes version. - * Populated for UpgradeAssessment resources. - */ - @identifiers(#[]) - componentCompatibility?: ComponentCompatibility[]; - - /** - * Deprecated Kubernetes APIs still in use in the cluster. - * Populated for UpgradeAssessment resources. - */ - @identifiers(#[]) - deprecatedApis?: DeprecatedApiUsage[]; - - /** - * Cluster readiness check results. - * Populated for UpgradeAssessment resources. - */ - @identifiers(#[]) - readinessChecks?: ReadinessCheck[]; - // ── Generic overflow ──────────────────────────────────────────────────────── /** @@ -854,7 +654,7 @@ model KubeInventoryProperties { */ apiVersion?: string; - /** Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service', 'UpgradeAssessment'). */ + /** Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service'). */ kind?: string; /** Standard Kubernetes object metadata. */ diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json deleted file mode 100644 index 6e7d1d46f435..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "title": "Get Upgrade Assessment", - "operationId": "KubeInventories_Get", - "parameters": { - "subscriptionId": "00000000-0000-0000-0000-000000000001", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", - "clusterName": "clusterName1", - "kubeInventoryName": "upgrade-assessment-current", - "api-version": "2026-06-15-preview" - }, - "responses": { - "200": { - "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current", - "name": "upgrade-assessment-current", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", - "systemData": { - "createdBy": "string", - "createdByType": "Application", - "createdAt": "2026-06-02T10:15:00.000Z", - "lastModifiedBy": "string", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-02T10:15:00.000Z" - }, - "properties": { - "apiVersion": "upgrade.config.io/v1alpha1", - "kind": "UpgradeAssessment", - "metadata": { - "name": "current", - "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901", - "creationTimestamp": "2026-06-02T10:15:00Z" - }, - "spec": { - "currentKubernetesVersion": "1.27.9", - "targetKubernetesVersion": "1.30.0" - }, - "status": { - "assessmentTime": "2026-06-02T10:15:00Z", - "overallSeverity": "Critical", - "componentCompatibility": [ - { - "name": "kube-proxy", - "version": "1.27.9", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "coredns", - "version": "1.10.1", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "metrics-server", - "version": "0.6.3", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "azure-cni", - "version": "1.4.14", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "cert-manager", - "version": "1.8.0", - "compatibilityStatus": "Incompatible", - "severity": "Critical", - "minCompatibleVersion": "1.12.0", - "notes": "cert-manager v1.8.0 does not support Kubernetes 1.30+. The cert-manager webhook API group was changed in K8s 1.29 and cert-manager >= 1.12.0 is required." - }, - { - "name": "ingress-nginx", - "version": "1.2.1", - "compatibilityStatus": "Incompatible", - "severity": "Critical", - "minCompatibleVersion": "1.9.0", - "notes": "ingress-nginx v1.2.1 uses networking.k8s.io/v1beta1 which is removed in Kubernetes 1.29. Upgrade to >= 1.9.0." - }, - { - "name": "azure-policy", - "version": "1.2.1", - "compatibilityStatus": "Incompatible", - "severity": "Critical", - "minCompatibleVersion": "1.6.0", - "notes": "azure-policy v1.2.1 relies on PodSecurityPolicy (policy/v1beta1/podsecuritypolicies) which was removed in Kubernetes 1.25." - }, - { - "name": "kube-state-metrics", - "version": "2.7.0", - "compatibilityStatus": "Untested", - "severity": "Warning", - "notes": "kube-state-metrics v2.7.0 has been tested up to Kubernetes 1.28. Compatibility with 1.30 is not confirmed; upgrade to >= 2.10.0 is recommended." - }, - { - "name": "cluster-autoscaler", - "version": "1.27.2", - "compatibilityStatus": "Untested", - "severity": "Warning", - "notes": "cluster-autoscaler v1.27.2 is outside the tested range for Kubernetes 1.30. The autoscaler major version should match the cluster minor version." - }, - { - "name": "prometheus-operator", - "version": "0.63.0", - "compatibilityStatus": "Untested", - "severity": "Warning", - "notes": "prometheus-operator v0.63.0 has not been validated against Kubernetes 1.30. Upgrade to >= 0.72.0 which includes 1.30 test coverage." - } - ], - "deprecatedApis": [ - { - "group": "networking.k8s.io", - "version": "v1beta1", - "resource": "ingresses", - "removedRelease": "1.22", - "usageMetrics": { - "get": 142, - "list": 89, - "watch": 512, - "post": 3, - "put": 7 - }, - "lastUsageObservedAt": "2026-06-02T09:58:34Z", - "severity": "Critical" - }, - { - "group": "policy", - "version": "v1beta1", - "resource": "poddisruptionbudgets", - "removedRelease": "1.25", - "usageMetrics": { - "get": 54, - "list": 31, - "watch": 210 - }, - "lastUsageObservedAt": "2026-06-02T10:01:12Z", - "severity": "Critical" - }, - { - "group": "autoscaling", - "version": "v2beta2", - "resource": "horizontalpodautoscalers", - "removedRelease": "1.26", - "usageMetrics": { - "get": 22, - "list": 15, - "watch": 88 - }, - "lastUsageObservedAt": "2026-06-02T09:45:00Z", - "severity": "Critical" - }, - { - "group": "batch", - "version": "v1beta1", - "resource": "cronjobs", - "removedRelease": "1.25", - "usageMetrics": { - "get": 8, - "list": 4, - "watch": 27, - "post": 1 - }, - "lastUsageObservedAt": "2026-06-01T22:30:00Z", - "severity": "Critical" - }, - { - "group": "storage.k8s.io", - "version": "v1beta1", - "resource": "storageclasses", - "removedRelease": "1.32", - "usageMetrics": { - "get": 5, - "list": 3 - }, - "lastUsageObservedAt": "2026-06-02T08:10:00Z", - "severity": "Warning" - } - ], - "readinessChecks": [ - { - "category": "APIServerHealth", - "severity": "Pass", - "details": "API server /healthz and /readyz endpoints responded successfully." - }, - { - "category": "NodeStatus", - "name": "aks-nodepool1-12345678-vmss000000", - "severity": "Pass", - "details": "Node is Ready. Kubelet version: v1.27.9." - }, - { - "category": "NodeStatus", - "name": "aks-nodepool1-12345678-vmss000001", - "severity": "Pass", - "details": "Node is Ready. Kubelet version: v1.27.9." - }, - { - "category": "NodeStatus", - "name": "aks-nodepool1-12345678-vmss000002", - "severity": "Pass", - "details": "Node is Ready. Kubelet version: v1.27.9." - }, - { - "category": "NodeStatus", - "name": "aks-nodepool1-12345678-vmss000003", - "severity": "Critical", - "details": "Node is NotReady. Last transition: 2026-06-02T07:42:00Z. Condition: KubeletNotReady — PLEG is not healthy: pleg was last seen active 3m45s ago; threshold is 3m0s." - }, - { - "category": "PodDisruptionBudget", - "name": "default/frontend-pdb", - "severity": "Pass", - "details": "PDB allows disruption: minAvailable=2, current replicas=5, disruptions allowed=3." - }, - { - "category": "PodDisruptionBudget", - "name": "default/backend-pdb", - "severity": "Pass", - "details": "PDB allows disruption: minAvailable=1, current replicas=4, disruptions allowed=3." - }, - { - "category": "PodDisruptionBudget", - "name": "kube-system/coredns-pdb", - "severity": "Pass", - "details": "PDB allows disruption: minAvailable=1, current replicas=2, disruptions allowed=1." - }, - { - "category": "PodDisruptionBudget", - "name": "monitoring/prometheus-pdb", - "severity": "Pass", - "details": "PDB allows disruption: maxUnavailable=1, current replicas=3, disruptions allowed=1." - }, - { - "category": "PodDisruptionBudget", - "name": "production/payments-api-pdb", - "severity": "Critical", - "details": "PDB is blocking: minAvailable=3, current replicas=3, disruptions allowed=0. No pods can be evicted during node drain." - }, - { - "category": "PodDisruptionBudget", - "name": "production/order-service-pdb", - "severity": "Critical", - "details": "PDB is blocking: minAvailable=2, current replicas=2, disruptions allowed=0. Scale up replicas or reduce minAvailable before upgrading." - }, - { - "category": "PodDisruptionBudget", - "name": "ingress-nginx/ingress-nginx-pdb", - "severity": "Critical", - "details": "PDB is blocking: maxUnavailable=0, current replicas=2, disruptions allowed=0. maxUnavailable=0 prevents all evictions." - } - ] - }, - "attachedToExtension": "k8s-upgrade-assessment" - } - } - } - } -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json index 7548aec275bf..e2ca313a2a46 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json @@ -206,97 +206,6 @@ ], "attachedToExtension": "azure-kube-inventory" } - }, - { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/upgrade-assessment-current-kube-system", - "name": "upgrade-assessment-current-kube-system", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", - "systemData": { - "createdBy": "string", - "createdByType": "Application", - "createdAt": "2026-06-01T10:00:00.000Z", - "lastModifiedBy": "string", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-01T10:00:00.000Z" - }, - "properties": { - "apiVersion": "upgrade.config.io/v1alpha1", - "kind": "UpgradeAssessment", - "metadata": { - "name": "current", - "namespaceName": "kube-system", - "uid": "f9e8d7c6-b5a4-3210-fedc-ba9876543210", - "resourceVersion": "9124033", - "generation": 3, - "creationTimestamp": "2026-05-15T08:00:00Z", - "labels": [ - { - "name": "managed-by", - "value": "azure-kube-inventory-agent" - } - ] - }, - "spec": { - "currentKubernetesVersion": "1.29", - "targetKubernetesVersion": "1.30" - }, - "status": { - "assessmentTime": "2026-05-28T14:30:00Z", - "overallSeverity": "Pass", - "conditions": [ - { - "type": "AssessmentComplete", - "status": "True", - "reason": "Succeeded", - "message": "Upgrade assessment completed successfully.", - "lastTransitionTime": "2026-05-28T14:30:00Z" - } - ], - "componentCompatibility": [ - { - "name": "containerd", - "version": "1.7.4", - "compatibilityStatus": "Compatible", - "severity": "Pass" - }, - { - "name": "azure-cni", - "version": "1.5.29", - "compatibilityStatus": "Compatible", - "severity": "Pass" - } - ], - "deprecatedApis": [], - "readinessChecks": [ - { - "category": "NodeStatus", - "severity": "Pass" - }, - { - "category": "APIServerHealth", - "severity": "Pass" - }, - { - "category": "PodDisruptionBudget", - "severity": "Pass" - }, - { - "category": "Addon", - "severity": "Pass" - } - ] - }, - "events": [ - { - "type": "Normal", - "reason": "AssessmentComplete", - "age": "1h", - "from": "azure-kube-inventory-agent", - "message": "Upgrade assessment from 1.29 to 1.30 completed with overall severity Pass." - } - ], - "attachedToExtension": "azure-kube-inventory" - } } ], "nextLink": null diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 1ec60e95f32e..ea6e8dcd5ceb 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -177,9 +177,6 @@ "x-ms-examples": { "Get KubeInventory": { "$ref": "./examples/GetKubeInventory.json" - }, - "Get Upgrade Assessment": { - "$ref": "./examples/GetUpgradeAssessment.json" } } } @@ -206,78 +203,6 @@ } } }, - "CompatibilityStatus": { - "type": "string", - "description": "Compatibility status of a cluster component with the target Kubernetes version.", - "enum": [ - "Compatible", - "Untested", - "Incompatible", - "Unknown" - ], - "x-ms-enum": { - "name": "CompatibilityStatus", - "modelAsString": true, - "values": [ - { - "name": "Compatible", - "value": "Compatible", - "description": "Component is compatible with the target version." - }, - { - "name": "Untested", - "value": "Untested", - "description": "Compatibility with the target version has not been tested." - }, - { - "name": "Incompatible", - "value": "Incompatible", - "description": "Component is incompatible with the target version." - }, - { - "name": "Unknown", - "value": "Unknown", - "description": "Compatibility status is unknown." - } - ] - } - }, - "ComponentCompatibility": { - "type": "object", - "description": "Compatibility status of a single cluster component with the target Kubernetes version.", - "properties": { - "name": { - "type": "string", - "description": "Component name (e.g., 'containerd', 'calico')." - }, - "version": { - "type": "string", - "description": "Installed component version." - }, - "compatibilityStatus": { - "$ref": "#/definitions/CompatibilityStatus", - "description": "Compatibility of the component with the target Kubernetes version." - }, - "severity": { - "$ref": "#/definitions/Severity", - "description": "Severity associated with this compatibility result." - }, - "minCompatibleVersion": { - "type": "string", - "description": "Minimum component version known to be compatible with targetKubernetesVersion." - }, - "notes": { - "type": "string", - "description": "Additional notes about compatibility." - } - }, - "required": [ - "name", - "version", - "compatibilityStatus", - "severity" - ] - }, "ConditionStatus": { "type": "string", "description": "Whether a Kubernetes condition is currently active.", @@ -584,47 +509,6 @@ "restartCount" ] }, - "DeprecatedApiUsage": { - "type": "object", - "description": "A deprecated Kubernetes API still in use in the cluster.", - "properties": { - "group": { - "type": "string", - "description": "API group (e.g., 'flowcontrol.apiserver.k8s.io')." - }, - "version": { - "type": "string", - "description": "API version (e.g., 'v1beta3')." - }, - "resource": { - "type": "string", - "description": "Resource plural name (e.g., 'flowschemas')." - }, - "removedRelease": { - "type": "string", - "description": "Kubernetes release in which this API is removed (e.g., '1.32')." - }, - "usageMetrics": { - "$ref": "#/definitions/HttpVerbUsageMetrics", - "description": "HTTP verb call counts observed for this deprecated API." - }, - "lastUsageObservedAt": { - "type": "string", - "format": "date-time", - "description": "UTC timestamp of the last observed usage." - }, - "severity": { - "$ref": "#/definitions/Severity", - "description": "Severity of continued use of this deprecated API." - } - }, - "required": [ - "group", - "version", - "resource", - "severity" - ] - }, "EnvVar": { "type": "object", "description": "An environment variable set in a container.", @@ -642,47 +526,6 @@ "name" ] }, - "HttpVerbUsageMetrics": { - "type": "object", - "description": "Observed call counts per HTTP verb for a deprecated Kubernetes API.", - "properties": { - "get": { - "type": "integer", - "format": "int64", - "description": "Number of GET requests observed." - }, - "list": { - "type": "integer", - "format": "int64", - "description": "Number of LIST requests observed." - }, - "post": { - "type": "integer", - "format": "int64", - "description": "Number of POST (create) requests observed." - }, - "put": { - "type": "integer", - "format": "int64", - "description": "Number of PUT (replace) requests observed." - }, - "patch": { - "type": "integer", - "format": "int64", - "description": "Number of PATCH requests observed." - }, - "delete": { - "type": "integer", - "format": "int64", - "description": "Number of DELETE requests observed." - }, - "watch": { - "type": "integer", - "format": "int64", - "description": "Number of WATCH requests observed." - } - } - }, "KubeInventory": { "type": "object", "description": "Singleton container resource grouping cluster inventory reports.", @@ -729,7 +572,7 @@ }, "kind": { "type": "string", - "description": "Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service', 'UpgradeAssessment')." + "description": "Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service')." }, "metadata": { "$ref": "#/definitions/KubernetesObjectMeta", @@ -957,7 +800,7 @@ }, "KubernetesResourceSpec": { "type": "object", - "description": "Desired state (spec) of a Kubernetes resource.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. UpgradeAssessment spec fields are merged in as optional typed properties.\nFields not covered by any typed property can be placed in additionalFields.", + "description": "Desired state (spec) of a Kubernetes resource.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. Fields not covered by any typed property can be placed in additionalFields.", "properties": { "nodeName": { "type": "string", @@ -1039,14 +882,6 @@ "$ref": "#/definitions/PodSecurityContext", "description": "Security context applied at the pod level.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources." }, - "currentKubernetesVersion": { - "type": "string", - "description": "Current Kubernetes version running on the cluster (e.g., '1.29').\nPopulated for UpgradeAssessment resources." - }, - "targetKubernetesVersion": { - "type": "string", - "description": "Target Kubernetes version to evaluate for upgrade (e.g., '1.30').\nPopulated for UpgradeAssessment resources." - }, "additionalFields": { "type": "array", "description": "Additional resource-specific fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", @@ -1061,7 +896,7 @@ }, "KubernetesResourceStatus": { "type": "object", - "description": "Observed state (status) of a Kubernetes resource, written by the controller.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. UpgradeAssessment status fields are merged in as optional typed properties.\nFields not covered by any typed property can be placed in additionalFields.", + "description": "Observed state (status) of a Kubernetes resource, written by the controller.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. Fields not covered by any typed property can be placed in additionalFields.", "properties": { "conditions": { "type": "array", @@ -1123,40 +958,6 @@ "format": "int64", "description": "Most recent generation observed by the controller.\nPopulated for Deployment, StatefulSet, DaemonSet, and Pod resources." }, - "assessmentTime": { - "type": "string", - "format": "date-time", - "description": "UTC timestamp when the in-cluster agent last computed this assessment.\nPopulated for UpgradeAssessment resources.", - "readOnly": true - }, - "overallSeverity": { - "$ref": "#/definitions/Severity", - "description": "Rolled-up severity across all checks; highest severity wins.\nPopulated for UpgradeAssessment resources." - }, - "componentCompatibility": { - "type": "array", - "description": "Per-component compatibility results with the target Kubernetes version.\nPopulated for UpgradeAssessment resources.", - "items": { - "$ref": "#/definitions/ComponentCompatibility" - }, - "x-ms-identifiers": [] - }, - "deprecatedApis": { - "type": "array", - "description": "Deprecated Kubernetes APIs still in use in the cluster.\nPopulated for UpgradeAssessment resources.", - "items": { - "$ref": "#/definitions/DeprecatedApiUsage" - }, - "x-ms-identifiers": [] - }, - "readinessChecks": { - "type": "array", - "description": "Cluster readiness check results.\nPopulated for UpgradeAssessment resources.", - "items": { - "$ref": "#/definitions/ReadinessCheck" - }, - "x-ms-identifiers": [] - }, "additionalFields": { "type": "array", "description": "Additional resource-specific status fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", @@ -1268,116 +1069,6 @@ } } }, - "ReadinessCategory": { - "type": "string", - "description": "Category of a cluster readiness check.", - "enum": [ - "NodeStatus", - "APIServerHealth", - "PodDisruptionBudget", - "Addon", - "Storage", - "Networking" - ], - "x-ms-enum": { - "name": "ReadinessCategory", - "modelAsString": true, - "values": [ - { - "name": "NodeStatus", - "value": "NodeStatus", - "description": "Node status check." - }, - { - "name": "APIServerHealth", - "value": "APIServerHealth", - "description": "API server health check." - }, - { - "name": "PodDisruptionBudget", - "value": "PodDisruptionBudget", - "description": "Pod disruption budget check." - }, - { - "name": "Addon", - "value": "Addon", - "description": "Addon compatibility check." - }, - { - "name": "Storage", - "value": "Storage", - "description": "Storage compatibility check." - }, - { - "name": "Networking", - "value": "Networking", - "description": "Networking compatibility check." - } - ] - } - }, - "ReadinessCheck": { - "type": "object", - "description": "A single cluster readiness check result.", - "properties": { - "category": { - "$ref": "#/definitions/ReadinessCategory", - "description": "Category of the readiness check." - }, - "name": { - "type": "string", - "description": "Subject of the check (node name, workload namespace/name, etc.).\nOptional for cluster-wide checks." - }, - "severity": { - "$ref": "#/definitions/Severity", - "description": "Severity of the check result." - }, - "details": { - "type": "string", - "description": "Human-readable reason when severity is not 'pass'." - } - }, - "required": [ - "category", - "severity" - ] - }, - "Severity": { - "type": "string", - "description": "Severity of an upgrade-assessment finding or readiness check.", - "enum": [ - "Pass", - "Warning", - "Critical", - "Unknown" - ], - "x-ms-enum": { - "name": "Severity", - "modelAsString": true, - "values": [ - { - "name": "Pass", - "value": "Pass", - "description": "No issues found." - }, - { - "name": "Warning", - "value": "Warning", - "description": "Non-blocking issues found; upgrade is possible but action is recommended." - }, - { - "name": "Critical", - "value": "Critical", - "description": "Blocking issues found; upgrade should not proceed without remediation." - }, - { - "name": "Unknown", - "value": "Unknown", - "description": "Severity could not be determined." - } - ] - } - }, "Toleration": { "type": "object", "description": "A toleration allows a pod to be scheduled on a node with a matching taint.", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/UpgradeAssessment.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/UpgradeAssessment.tsp new file mode 100644 index 000000000000..c5356808ac9f --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/UpgradeAssessment.tsp @@ -0,0 +1,94 @@ +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-azure-resource-manager"; +import "@typespec/rest"; +import "./models.tsp"; + +using TypeSpec.Rest; +using Azure.Core; +using Azure.ResourceManager; +using Azure.ResourceManager.Foundations; +using TypeSpec.Http; + +namespace Microsoft.KubernetesConfiguration; + +/** + * ARM resource representing a Kubernetes cluster upgrade assessment. + */ +model UpgradeAssessment + is Azure.ResourceManager.ProxyResource { + ...ResourceNameParameter< + Resource = UpgradeAssessment, + KeyName = "upgradeAssessmentName", + SegmentName = "upgradeAssessment", + NamePattern = "^[a-z]([a-z0-9._-]{0,126}[a-z0-9])?$" + >; +} + +/** + * Operations alias for UpgradeAssessment using the cluster extension routing pattern. + * Generates URLs of the form: + * /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessment[/{upgradeAssessmentName}] + */ +alias UpgradeAssessmentOps = Azure.ResourceManager.Legacy.ExtensionOperations< + { + ...ApiVersionParameter; + ...SubscriptionIdParameter; + ...ResourceGroupParameter; + + /** + * The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes, + * Microsoft.HybridContainerService, Microsoft.KubernetesConfiguration. + */ + @path + @segment("providers") + @key + @pattern("^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService|KubernetesConfiguration)$") + clusterRp: string; + + /** + * The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters, + * provisionedClusters, appliances. + */ + @key + @path + @pattern("^[a-zA-Z]+$") + clusterResourceName: string; + + /** + * The name of the kubernetes cluster. + */ + @key + @path + @pattern("^[a-zA-Z0-9][a-zA-Z0-9-_.]{0,62}$") + clusterName: string; + }, + { + ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; + ...ParentKeysOf; + }, + { + ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; + ...KeysOf; + } +>; + +@armResourceOperations(#{ allowStaticRoutes: true, omitTags: true }) +interface UpgradeAssessments { + /** + * Get the upgrade assessment for a cluster. + */ + @tag("UpgradeAssessment") + get is UpgradeAssessmentOps.Read; + + /** + * List upgrade assessments for the cluster. + */ + @tag("UpgradeAssessment") + list is UpgradeAssessmentOps.List; +} + +@@doc(UpgradeAssessment.name, "Name of the UpgradeAssessment resource."); +@@doc( + UpgradeAssessment.properties, + "Properties of the UpgradeAssessment resource." +); diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json new file mode 100644 index 000000000000..a25e708ab4e2 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json @@ -0,0 +1,122 @@ +{ + "title": "Get Upgrade Assessment", + "operationId": "UpgradeAssessments_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "upgradeAssessmentName": "current", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/upgradeAssessment", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-02T10:15:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-02T10:15:00.000Z" + }, + "properties": { + "currentKubernetesVersion": "1.27.9", + "targetKubernetesVersion": "1.30.0", + "assessmentTime": "2026-06-02T10:15:00Z", + "overallSeverity": "Critical", + "componentCompatibility": [ + { + "name": "kube-proxy", + "version": "1.27.9", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "coredns", + "version": "1.10.1", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "cert-manager", + "version": "1.8.0", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.12.0", + "notes": "cert-manager v1.8.0 does not support Kubernetes 1.30+. Upgrade to >= 1.12.0." + }, + { + "name": "ingress-nginx", + "version": "1.2.1", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.9.0", + "notes": "ingress-nginx v1.2.1 uses networking.k8s.io/v1beta1 which is removed in Kubernetes 1.29. Upgrade to >= 1.9.0." + } + ], + "deprecatedApis": [ + { + "group": "networking.k8s.io", + "version": "v1beta1", + "resource": "ingresses", + "removedRelease": "1.22", + "usageMetrics": { + "get": 142, + "list": 89, + "watch": 512, + "post": 3, + "put": 7 + }, + "lastUsageObservedAt": "2026-06-02T09:58:34Z", + "severity": "Critical" + }, + { + "group": "policy", + "version": "v1beta1", + "resource": "poddisruptionbudgets", + "removedRelease": "1.25", + "usageMetrics": { + "get": 54, + "list": 31, + "watch": 210 + }, + "lastUsageObservedAt": "2026-06-02T10:01:12Z", + "severity": "Critical" + } + ], + "readinessChecks": [ + { + "category": "APIServerHealth", + "severity": "Pass", + "details": "API server /healthz and /readyz endpoints responded successfully." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000000", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000001", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "PodDisruptionBudget", + "name": "default/my-app", + "severity": "Warning", + "details": "PodDisruptionBudget 'my-app' in namespace 'default' may block node drain during upgrade." + } + ], + "provisioningState": "Succeeded" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json new file mode 100644 index 000000000000..53dfebdf7bff --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json @@ -0,0 +1,72 @@ +{ + "title": "List Upgrade Assessments", + "operationId": "UpgradeAssessments_List", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/upgradeAssessment", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-02T10:15:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-02T10:15:00.000Z" + }, + "properties": { + "currentKubernetesVersion": "1.27.9", + "targetKubernetesVersion": "1.30.0", + "assessmentTime": "2026-06-02T10:15:00Z", + "overallSeverity": "Critical", + "componentCompatibility": [ + { + "name": "kube-proxy", + "version": "1.27.9", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "cert-manager", + "version": "1.8.0", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.12.0", + "notes": "cert-manager v1.8.0 does not support Kubernetes 1.30+. Upgrade to >= 1.12.0." + } + ], + "deprecatedApis": [ + { + "group": "networking.k8s.io", + "version": "v1beta1", + "resource": "ingresses", + "removedRelease": "1.22", + "severity": "Critical" + } + ], + "readinessChecks": [ + { + "category": "APIServerHealth", + "severity": "Pass", + "details": "API server /healthz and /readyz endpoints responded successfully." + } + ], + "provisioningState": "Succeeded" + } + } + ] + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/main.tsp new file mode 100644 index 000000000000..73b575c37ae4 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/main.tsp @@ -0,0 +1,33 @@ +import "@typespec/rest"; +import "@typespec/versioning"; +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-azure-resource-manager"; +import "./models.tsp"; +import "./UpgradeAssessment.tsp"; + +using TypeSpec.Rest; +using TypeSpec.Http; +using Azure.ResourceManager.Foundations; +using Azure.Core; +using Azure.ResourceManager; +using TypeSpec.Versioning; + +/** + * APIs for cluster upgrade assessment resources under Microsoft.KubernetesConfiguration. + */ +#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "UpgradeAssessment is a proxy resource provider under Microsoft.Kubernetes; no independent operations endpoint is registered." +@armProviderNamespace +@service(#{ title: "UpgradeAssessmentClient" }) +@versioned(Versions) +@armCommonTypesVersion(Azure.ResourceManager.CommonTypes.Versions.v6) +namespace Microsoft.KubernetesConfiguration; + +/** + * The available API versions. + */ +enum Versions { + /** + * The 2026-06-15-preview API version. + */ + v2026_06_15_preview: "2026-06-15-preview", +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp new file mode 100644 index 000000000000..6f88253775de --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp @@ -0,0 +1,205 @@ +import "@typespec/rest"; +import "@typespec/http"; +import "@typespec/versioning"; +import "@azure-tools/typespec-azure-resource-manager"; +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-client-generator-core"; + +using TypeSpec.Rest; +using TypeSpec.Http; +using TypeSpec.Versioning; +using Azure.Core; +using Azure.ResourceManager; +using Azure.ResourceManager.Foundations; +using Azure.ClientGenerator.Core; + +namespace Microsoft.KubernetesConfiguration; + +// ─── UpgradeAssessment enums ────────────────────────────────────────────────── + +/** Severity of an upgrade-assessment finding or readiness check. */ +union Severity { + string, + + /** No issues found. */ + Pass: "Pass", + + /** Non-blocking issues found; upgrade is possible but action is recommended. */ + Warning: "Warning", + + /** Blocking issues found; upgrade should not proceed without remediation. */ + Critical: "Critical", + + /** Severity could not be determined. */ + Unknown: "Unknown", +} + +/** Compatibility status of a cluster component with the target Kubernetes version. */ +union CompatibilityStatus { + string, + + /** Component is compatible with the target version. */ + Compatible: "Compatible", + + /** Compatibility with the target version has not been tested. */ + Untested: "Untested", + + /** Component is incompatible with the target version. */ + Incompatible: "Incompatible", + + /** Compatibility status is unknown. */ + Unknown: "Unknown", +} + +/** Category of a cluster readiness check. */ +union ReadinessCategory { + string, + + /** Node status check. */ + NodeStatus: "NodeStatus", + + /** API server health check. */ + APIServerHealth: "APIServerHealth", + + /** Pod disruption budget check. */ + PodDisruptionBudget: "PodDisruptionBudget", + + /** Addon compatibility check. */ + Addon: "Addon", + + /** Storage compatibility check. */ + Storage: "Storage", + + /** Networking compatibility check. */ + Networking: "Networking", +} + +// ─── UpgradeAssessment sub-models ───────────────────────────────────────────── + +/** Compatibility status of a single cluster component with the target Kubernetes version. */ +model ComponentCompatibility { + /** Component name (e.g., 'containerd', 'calico'). */ + name: string; + + /** Installed component version. */ + version: string; + + /** Compatibility of the component with the target Kubernetes version. */ + compatibilityStatus: CompatibilityStatus; + + /** Severity associated with this compatibility result. */ + severity: Severity; + + /** Minimum component version known to be compatible with targetKubernetesVersion. */ + minCompatibleVersion?: string; + + /** Additional notes about compatibility. */ + notes?: string; +} + +/** Observed call counts per HTTP verb for a deprecated Kubernetes API. */ +model HttpVerbUsageMetrics { + /** Number of GET requests observed. */ + get?: int64; + + /** Number of LIST requests observed. */ + list?: int64; + + /** Number of POST (create) requests observed. */ + post?: int64; + + /** Number of PUT (replace) requests observed. */ + put?: int64; + + /** Number of PATCH requests observed. */ + patch?: int64; + + /** Number of DELETE requests observed. */ + delete?: int64; + + /** Number of WATCH requests observed. */ + watch?: int64; +} + +/** A deprecated Kubernetes API still in use in the cluster. */ +model DeprecatedApiUsage { + /** API group (e.g., 'flowcontrol.apiserver.k8s.io'). */ + group: string; + + /** API version (e.g., 'v1beta3'). */ + version: string; + + /** Resource plural name (e.g., 'flowschemas'). */ + resource: string; + + /** Kubernetes release in which this API is removed (e.g., '1.32'). */ + removedRelease?: string; + + /** HTTP verb call counts observed for this deprecated API. */ + usageMetrics?: HttpVerbUsageMetrics; + + /** UTC timestamp of the last observed usage. */ + lastUsageObservedAt?: utcDateTime; + + /** Severity of continued use of this deprecated API. */ + severity: Severity; +} + +/** A single cluster readiness check result. */ +model ReadinessCheck { + /** Category of the readiness check. */ + category: ReadinessCategory; + + /** + * Subject of the check (node name, workload namespace/name, etc.). + * Optional for cluster-wide checks. + */ + name?: string; + + /** Severity of the check result. */ + severity: Severity; + + /** Human-readable reason when severity is not 'pass'. */ + details?: string; +} + +// ─── ARM resource properties ────────────────────────────────────────────────── + +/** Properties of a single UpgradeAssessment ARM resource. */ +#suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state" "This resource does not have a provisioning state per the original Swagger design" +model UpgradeAssessmentProperties { + /** Current Kubernetes version running on the cluster (e.g., '1.29'). */ + currentKubernetesVersion?: string; + + /** Target Kubernetes version to evaluate for upgrade (e.g., '1.30'). */ + targetKubernetesVersion?: string; + + /** + * UTC timestamp when the in-cluster agent last computed this assessment. + */ + @visibility(Lifecycle.Read) + assessmentTime?: utcDateTime; + + /** + * Rolled-up severity across all checks; highest severity wins. + */ + overallSeverity?: Severity; + + /** + * Per-component compatibility results with the target Kubernetes version. + */ + @identifiers(#[]) + componentCompatibility?: ComponentCompatibility[]; + + /** + * Deprecated Kubernetes APIs still in use in the cluster. + */ + @identifiers(#[]) + deprecatedApis?: DeprecatedApiUsage[]; + + /** + * Cluster readiness check results. + */ + @identifiers(#[]) + readinessChecks?: ReadinessCheck[]; +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json new file mode 100644 index 000000000000..a25e708ab4e2 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json @@ -0,0 +1,122 @@ +{ + "title": "Get Upgrade Assessment", + "operationId": "UpgradeAssessments_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "upgradeAssessmentName": "current", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/upgradeAssessment", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-02T10:15:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-02T10:15:00.000Z" + }, + "properties": { + "currentKubernetesVersion": "1.27.9", + "targetKubernetesVersion": "1.30.0", + "assessmentTime": "2026-06-02T10:15:00Z", + "overallSeverity": "Critical", + "componentCompatibility": [ + { + "name": "kube-proxy", + "version": "1.27.9", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "coredns", + "version": "1.10.1", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "cert-manager", + "version": "1.8.0", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.12.0", + "notes": "cert-manager v1.8.0 does not support Kubernetes 1.30+. Upgrade to >= 1.12.0." + }, + { + "name": "ingress-nginx", + "version": "1.2.1", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.9.0", + "notes": "ingress-nginx v1.2.1 uses networking.k8s.io/v1beta1 which is removed in Kubernetes 1.29. Upgrade to >= 1.9.0." + } + ], + "deprecatedApis": [ + { + "group": "networking.k8s.io", + "version": "v1beta1", + "resource": "ingresses", + "removedRelease": "1.22", + "usageMetrics": { + "get": 142, + "list": 89, + "watch": 512, + "post": 3, + "put": 7 + }, + "lastUsageObservedAt": "2026-06-02T09:58:34Z", + "severity": "Critical" + }, + { + "group": "policy", + "version": "v1beta1", + "resource": "poddisruptionbudgets", + "removedRelease": "1.25", + "usageMetrics": { + "get": 54, + "list": 31, + "watch": 210 + }, + "lastUsageObservedAt": "2026-06-02T10:01:12Z", + "severity": "Critical" + } + ], + "readinessChecks": [ + { + "category": "APIServerHealth", + "severity": "Pass", + "details": "API server /healthz and /readyz endpoints responded successfully." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000000", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "NodeStatus", + "name": "aks-nodepool1-12345678-vmss000001", + "severity": "Pass", + "details": "Node is Ready. Kubelet version: v1.27.9." + }, + { + "category": "PodDisruptionBudget", + "name": "default/my-app", + "severity": "Warning", + "details": "PodDisruptionBudget 'my-app' in namespace 'default' may block node drain during upgrade." + } + ], + "provisioningState": "Succeeded" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json new file mode 100644 index 000000000000..53dfebdf7bff --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json @@ -0,0 +1,72 @@ +{ + "title": "List Upgrade Assessments", + "operationId": "UpgradeAssessments_List", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/current", + "name": "current", + "type": "Microsoft.KubernetesConfiguration/upgradeAssessment", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-02T10:15:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-02T10:15:00.000Z" + }, + "properties": { + "currentKubernetesVersion": "1.27.9", + "targetKubernetesVersion": "1.30.0", + "assessmentTime": "2026-06-02T10:15:00Z", + "overallSeverity": "Critical", + "componentCompatibility": [ + { + "name": "kube-proxy", + "version": "1.27.9", + "compatibilityStatus": "Compatible", + "severity": "Pass" + }, + { + "name": "cert-manager", + "version": "1.8.0", + "compatibilityStatus": "Incompatible", + "severity": "Critical", + "minCompatibleVersion": "1.12.0", + "notes": "cert-manager v1.8.0 does not support Kubernetes 1.30+. Upgrade to >= 1.12.0." + } + ], + "deprecatedApis": [ + { + "group": "networking.k8s.io", + "version": "v1beta1", + "resource": "ingresses", + "removedRelease": "1.22", + "severity": "Critical" + } + ], + "readinessChecks": [ + { + "category": "APIServerHealth", + "severity": "Pass", + "details": "API server /healthz and /readyz endpoints responded successfully." + } + ], + "provisioningState": "Succeeded" + } + } + ] + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json new file mode 100644 index 000000000000..68c5c52d8f25 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json @@ -0,0 +1,536 @@ +{ + "swagger": "2.0", + "info": { + "title": "UpgradeAssessmentClient", + "version": "2026-06-15-preview", + "description": "APIs for cluster upgrade assessment resources under Microsoft.KubernetesConfiguration.", + "x-typespec-generated": [ + { + "emitter": "@azure-tools/typespec-autorest" + } + ] + }, + "schemes": [ + "https" + ], + "host": "management.azure.com", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "security": [ + { + "azure_auth": [ + "user_impersonation" + ] + } + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "description": "Azure Active Directory OAuth2 Flow.", + "flow": "implicit", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "scopes": { + "user_impersonation": "impersonate your user account" + } + } + }, + "tags": [ + { + "name": "UpgradeAssessment" + } + ], + "paths": { + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessment": { + "get": { + "operationId": "UpgradeAssessments_List", + "tags": [ + "UpgradeAssessment" + ], + "description": "List upgrade assessments for the cluster.", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/SubscriptionIdParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ResourceGroupNameParameter" + }, + { + "name": "clusterRp", + "in": "path", + "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes,\nMicrosoft.HybridContainerService, Microsoft.KubernetesConfiguration.", + "required": true, + "type": "string", + "pattern": "^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService|KubernetesConfiguration)$" + }, + { + "name": "clusterResourceName", + "in": "path", + "description": "The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters,\nprovisionedClusters, appliances.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z]+$" + }, + { + "name": "clusterName", + "in": "path", + "description": "The name of the kubernetes cluster.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-_.]{0,62}$" + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/UpgradeAssessmentListResult" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "List Upgrade Assessments": { + "$ref": "./examples/ListUpgradeAssessment.json" + } + }, + "x-ms-pageable": { + "nextLinkName": "nextLink" + } + } + }, + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/{upgradeAssessmentName}": { + "get": { + "operationId": "UpgradeAssessments_Get", + "tags": [ + "UpgradeAssessment" + ], + "description": "Get the upgrade assessment for a cluster.", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/SubscriptionIdParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ResourceGroupNameParameter" + }, + { + "name": "clusterRp", + "in": "path", + "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes,\nMicrosoft.HybridContainerService, Microsoft.KubernetesConfiguration.", + "required": true, + "type": "string", + "pattern": "^Microsoft\\.(ContainerService|Kubernetes|HybridContainerService|KubernetesConfiguration)$" + }, + { + "name": "clusterResourceName", + "in": "path", + "description": "The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters,\nprovisionedClusters, appliances.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z]+$" + }, + { + "name": "clusterName", + "in": "path", + "description": "The name of the kubernetes cluster.", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-_.]{0,62}$" + }, + { + "name": "upgradeAssessmentName", + "in": "path", + "description": "Name of the UpgradeAssessment resource.", + "required": true, + "type": "string", + "pattern": "^[a-z]([a-z0-9._-]{0,126}[a-z0-9])?$" + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/UpgradeAssessment" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "Get Upgrade Assessment": { + "$ref": "./examples/GetUpgradeAssessment.json" + } + } + } + } + }, + "definitions": { + "CompatibilityStatus": { + "type": "string", + "description": "Compatibility status of a cluster component with the target Kubernetes version.", + "enum": [ + "Compatible", + "Untested", + "Incompatible", + "Unknown" + ], + "x-ms-enum": { + "name": "CompatibilityStatus", + "modelAsString": true, + "values": [ + { + "name": "Compatible", + "value": "Compatible", + "description": "Component is compatible with the target version." + }, + { + "name": "Untested", + "value": "Untested", + "description": "Compatibility with the target version has not been tested." + }, + { + "name": "Incompatible", + "value": "Incompatible", + "description": "Component is incompatible with the target version." + }, + { + "name": "Unknown", + "value": "Unknown", + "description": "Compatibility status is unknown." + } + ] + } + }, + "ComponentCompatibility": { + "type": "object", + "description": "Compatibility status of a single cluster component with the target Kubernetes version.", + "properties": { + "name": { + "type": "string", + "description": "Component name (e.g., 'containerd', 'calico')." + }, + "version": { + "type": "string", + "description": "Installed component version." + }, + "compatibilityStatus": { + "$ref": "#/definitions/CompatibilityStatus", + "description": "Compatibility of the component with the target Kubernetes version." + }, + "severity": { + "$ref": "#/definitions/Severity", + "description": "Severity associated with this compatibility result." + }, + "minCompatibleVersion": { + "type": "string", + "description": "Minimum component version known to be compatible with targetKubernetesVersion." + }, + "notes": { + "type": "string", + "description": "Additional notes about compatibility." + } + }, + "required": [ + "name", + "version", + "compatibilityStatus", + "severity" + ] + }, + "DeprecatedApiUsage": { + "type": "object", + "description": "A deprecated Kubernetes API still in use in the cluster.", + "properties": { + "group": { + "type": "string", + "description": "API group (e.g., 'flowcontrol.apiserver.k8s.io')." + }, + "version": { + "type": "string", + "description": "API version (e.g., 'v1beta3')." + }, + "resource": { + "type": "string", + "description": "Resource plural name (e.g., 'flowschemas')." + }, + "removedRelease": { + "type": "string", + "description": "Kubernetes release in which this API is removed (e.g., '1.32')." + }, + "usageMetrics": { + "$ref": "#/definitions/HttpVerbUsageMetrics", + "description": "HTTP verb call counts observed for this deprecated API." + }, + "lastUsageObservedAt": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp of the last observed usage." + }, + "severity": { + "$ref": "#/definitions/Severity", + "description": "Severity of continued use of this deprecated API." + } + }, + "required": [ + "group", + "version", + "resource", + "severity" + ] + }, + "HttpVerbUsageMetrics": { + "type": "object", + "description": "Observed call counts per HTTP verb for a deprecated Kubernetes API.", + "properties": { + "get": { + "type": "integer", + "format": "int64", + "description": "Number of GET requests observed." + }, + "list": { + "type": "integer", + "format": "int64", + "description": "Number of LIST requests observed." + }, + "post": { + "type": "integer", + "format": "int64", + "description": "Number of POST (create) requests observed." + }, + "put": { + "type": "integer", + "format": "int64", + "description": "Number of PUT (replace) requests observed." + }, + "patch": { + "type": "integer", + "format": "int64", + "description": "Number of PATCH requests observed." + }, + "delete": { + "type": "integer", + "format": "int64", + "description": "Number of DELETE requests observed." + }, + "watch": { + "type": "integer", + "format": "int64", + "description": "Number of WATCH requests observed." + } + } + }, + "ReadinessCategory": { + "type": "string", + "description": "Category of a cluster readiness check.", + "enum": [ + "NodeStatus", + "APIServerHealth", + "PodDisruptionBudget", + "Addon", + "Storage", + "Networking" + ], + "x-ms-enum": { + "name": "ReadinessCategory", + "modelAsString": true, + "values": [ + { + "name": "NodeStatus", + "value": "NodeStatus", + "description": "Node status check." + }, + { + "name": "APIServerHealth", + "value": "APIServerHealth", + "description": "API server health check." + }, + { + "name": "PodDisruptionBudget", + "value": "PodDisruptionBudget", + "description": "Pod disruption budget check." + }, + { + "name": "Addon", + "value": "Addon", + "description": "Addon compatibility check." + }, + { + "name": "Storage", + "value": "Storage", + "description": "Storage compatibility check." + }, + { + "name": "Networking", + "value": "Networking", + "description": "Networking compatibility check." + } + ] + } + }, + "ReadinessCheck": { + "type": "object", + "description": "A single cluster readiness check result.", + "properties": { + "category": { + "$ref": "#/definitions/ReadinessCategory", + "description": "Category of the readiness check." + }, + "name": { + "type": "string", + "description": "Subject of the check (node name, workload namespace/name, etc.).\nOptional for cluster-wide checks." + }, + "severity": { + "$ref": "#/definitions/Severity", + "description": "Severity of the check result." + }, + "details": { + "type": "string", + "description": "Human-readable reason when severity is not 'pass'." + } + }, + "required": [ + "category", + "severity" + ] + }, + "Severity": { + "type": "string", + "description": "Severity of an upgrade-assessment finding or readiness check.", + "enum": [ + "Pass", + "Warning", + "Critical", + "Unknown" + ], + "x-ms-enum": { + "name": "Severity", + "modelAsString": true, + "values": [ + { + "name": "Pass", + "value": "Pass", + "description": "No issues found." + }, + { + "name": "Warning", + "value": "Warning", + "description": "Non-blocking issues found; upgrade is possible but action is recommended." + }, + { + "name": "Critical", + "value": "Critical", + "description": "Blocking issues found; upgrade should not proceed without remediation." + }, + { + "name": "Unknown", + "value": "Unknown", + "description": "Severity could not be determined." + } + ] + } + }, + "UpgradeAssessment": { + "type": "object", + "description": "ARM resource representing a Kubernetes cluster upgrade assessment.", + "properties": { + "properties": { + "$ref": "#/definitions/UpgradeAssessmentProperties", + "description": "Properties of the UpgradeAssessment resource." + } + }, + "allOf": [ + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ProxyResource" + } + ] + }, + "UpgradeAssessmentListResult": { + "type": "object", + "description": "The response of a UpgradeAssessment list operation.", + "properties": { + "value": { + "type": "array", + "description": "The UpgradeAssessment items on this page", + "items": { + "$ref": "#/definitions/UpgradeAssessment" + } + }, + "nextLink": { + "type": "string", + "format": "uri", + "description": "The link to the next page of items" + } + }, + "required": [ + "value" + ] + }, + "UpgradeAssessmentProperties": { + "type": "object", + "description": "Properties of a single UpgradeAssessment ARM resource.", + "properties": { + "currentKubernetesVersion": { + "type": "string", + "description": "Current Kubernetes version running on the cluster (e.g., '1.29')." + }, + "targetKubernetesVersion": { + "type": "string", + "description": "Target Kubernetes version to evaluate for upgrade (e.g., '1.30')." + }, + "assessmentTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the in-cluster agent last computed this assessment.", + "readOnly": true + }, + "overallSeverity": { + "$ref": "#/definitions/Severity", + "description": "Rolled-up severity across all checks; highest severity wins." + }, + "componentCompatibility": { + "type": "array", + "description": "Per-component compatibility results with the target Kubernetes version.", + "items": { + "$ref": "#/definitions/ComponentCompatibility" + }, + "x-ms-identifiers": [] + }, + "deprecatedApis": { + "type": "array", + "description": "Deprecated Kubernetes APIs still in use in the cluster.", + "items": { + "$ref": "#/definitions/DeprecatedApiUsage" + }, + "x-ms-identifiers": [] + }, + "readinessChecks": { + "type": "array", + "description": "Cluster readiness check results.", + "items": { + "$ref": "#/definitions/ReadinessCheck" + }, + "x-ms-identifiers": [] + } + } + } + }, + "parameters": {} +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/tspconfig.yaml b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/tspconfig.yaml new file mode 100644 index 000000000000..360b7ee370a8 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/tspconfig.yaml @@ -0,0 +1,50 @@ +parameters: + "service-dir": + default: "sdk/upgradeassessment" +emit: + - "@azure-tools/typespec-autorest" +options: + "@azure-tools/typespec-autorest": + omit-unreachable-types: false + emitter-output-dir: "{project-root}" + output-file: "{version-status}/{version}/upgradeAssessment.json" + arm-types-dir: "{project-root}/../../../../common-types/resource-management" + emit-lro-options: "all" + examples-dir: "{project-root}/examples" + "@azure-tools/typespec-python": + service-dir: sdk/kubernetesconfiguration + emitter-output-dir: "{output-dir}/{service-dir}/azure-mgmt-kubernetesconfiguration-upgradeassessment" + namespace: "azure.mgmt.kubernetesconfiguration.upgradeassessment" + generate-test: true + generate-sample: true + flavor: "azure" + "@azure-tools/typespec-java": + service-dir: sdk/kubernetesconfiguration + emitter-output-dir: "{output-dir}/{service-dir}/azure-resourcemanager-kubernetesconfiguration-upgradeassessment" + namespace: "com.azure.resourcemanager.kubernetesconfiguration.upgradeassessment" + service-name: "UpgradeAssessment" + flavor: azure + "@azure-tools/typespec-ts": + service-dir: sdk/kubernetesconfiguration + emitter-output-dir: "{output-dir}/{service-dir}/arm-kubernetesconfiguration-upgradeassessment" + flavor: "azure" + compatibility-lro: true + experimental-extensible-enums: true + package-details: + name: "@azure/arm-kubernetesconfiguration-upgradeassessment" + "@azure-tools/typespec-go": + service-dir: "sdk/resourcemanager/kubernetesconfiguration" + emitter-output-dir: "{output-dir}/{service-dir}/armupgradeassessment" + module: "github.com/Azure/azure-sdk-for-go/{service-dir}/armupgradeassessment" + fix-const-stuttering: true + flavor: "azure" + generate-samples: true + generate-fakes: true + head-as-boolean: true + inject-spans: true + "@azure-typespec/http-client-csharp-mgmt": + namespace: "Azure.ResourceManager.KubernetesConfiguration.UpgradeAssessment" + emitter-output-dir: "{output-dir}/sdk/kubernetesconfiguration/{namespace}" +linter: + extends: + - "@azure-tools/typespec-azure-rulesets/resource-manager" From 11525d9e42d18630d0f8baf4576317e090f61ee8 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 4 Jun 2026 13:46:18 -0700 Subject: [PATCH 18/39] Update Readme --- .../kubernetesconfiguration/resource-manager/readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/specification/kubernetesconfiguration/resource-manager/readme.md b/specification/kubernetesconfiguration/resource-manager/readme.md index bfd06b4f62f5..4ebe99ba52c2 100644 --- a/specification/kubernetesconfiguration/resource-manager/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/readme.md @@ -41,6 +41,7 @@ input-file: - Microsoft.KubernetesConfiguration/stable/2023-05-01/kubernetesconfiguration.json - Microsoft.KubernetesConfiguration/stable/2023-05-01/operations.json - Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json + - Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json suppressions: - code: ResourceNameRestriction from: fluxconfiguration.json @@ -69,6 +70,11 @@ These settings apply only when `--tag=package-preview-2026-06-only` is specified ``` yaml $(tag) == 'package-preview-2026-06-only' input-file: - Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json + - Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json +suppressions: + - code: EnumInsteadOfBoolean + from: kubeInventory.json + reason: Boolean properties mirror the Kubernetes API contract directly and must remain boolean for compatibility. ``` ### Tag: package-preview-2024-04 From 16978bce9dafaf4d2a4bb54c760c0b9befe78979 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 4 Jun 2026 13:52:52 -0700 Subject: [PATCH 19/39] Remove Provisioning state --- .../examples/2026-06-15-preview/GetUpgradeAssessment.json | 3 +-- .../examples/2026-06-15-preview/ListUpgradeAssessment.json | 3 +-- .../2026-06-15-preview/examples/GetUpgradeAssessment.json | 3 +-- .../2026-06-15-preview/examples/ListUpgradeAssessment.json | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json index a25e708ab4e2..e3861a83b981 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json @@ -113,8 +113,7 @@ "severity": "Warning", "details": "PodDisruptionBudget 'my-app' in namespace 'default' may block node drain during upgrade." } - ], - "provisioningState": "Succeeded" + ] } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json index 53dfebdf7bff..159f0e693265 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json @@ -61,8 +61,7 @@ "severity": "Pass", "details": "API server /healthz and /readyz endpoints responded successfully." } - ], - "provisioningState": "Succeeded" + ] } } ] diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json index a25e708ab4e2..e3861a83b981 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json @@ -113,8 +113,7 @@ "severity": "Warning", "details": "PodDisruptionBudget 'my-app' in namespace 'default' may block node drain during upgrade." } - ], - "provisioningState": "Succeeded" + ] } } } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json index 53dfebdf7bff..159f0e693265 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json @@ -61,8 +61,7 @@ "severity": "Pass", "details": "API server /healthz and /readyz endpoints responded successfully." } - ], - "provisioningState": "Succeeded" + ] } } ] From cb287a6bfeffcf017ee3301d90eb0f56239cf3a5 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 4 Jun 2026 16:21:59 -0700 Subject: [PATCH 20/39] Add more fields and examples --- .../GetKubeInventory-CronJob.json | 86 ++ .../GetKubeInventory-DaemonSet.json | 110 ++ .../GetKubeInventory-Deployment.json | 144 ++ ...KubeInventory-HorizontalPodAutoscaler.json | 83 ++ .../GetKubeInventory-Ingress.json | 92 ++ .../GetKubeInventory-IngressClass.json | 56 + .../GetKubeInventory-Job.json | 112 ++ .../GetKubeInventory-NetworkPolicy.json | 61 + .../GetKubeInventory-Node.json | 122 ++ .../GetKubeInventory-PersistentVolume.json | 59 + ...etKubeInventory-PersistentVolumeClaim.json | 60 + .../GetKubeInventory-PodDisruptionBudget.json | 67 + .../GetKubeInventory-ReplicaSet.json | 92 ++ .../GetKubeInventory-Role.json | 58 + .../GetKubeInventory-RoleBinding.json | 59 + .../GetKubeInventory-Service.json | 95 ++ .../GetKubeInventory-ServiceAccount.json | 57 + .../GetKubeInventory-StatefulSet.json | 131 ++ .../GetKubeInventory-StorageClass.json | 57 + .../GetKubeInventory-VolumeAttachment.json | 54 + .../2026-06-15-preview/GetKubeInventory.json | 32 +- .../2026-06-15-preview/ListKubeInventory.json | 78 ++ .../kubeInventory/models.tsp | 902 ++++++++++++- .../examples/GetKubeInventory-CronJob.json | 86 ++ .../examples/GetKubeInventory-DaemonSet.json | 110 ++ .../examples/GetKubeInventory-Deployment.json | 144 ++ ...KubeInventory-HorizontalPodAutoscaler.json | 83 ++ .../examples/GetKubeInventory-Ingress.json | 92 ++ .../GetKubeInventory-IngressClass.json | 56 + .../examples/GetKubeInventory-Job.json | 112 ++ .../GetKubeInventory-NetworkPolicy.json | 61 + .../examples/GetKubeInventory-Node.json | 122 ++ .../GetKubeInventory-PersistentVolume.json | 59 + ...etKubeInventory-PersistentVolumeClaim.json | 60 + .../GetKubeInventory-PodDisruptionBudget.json | 67 + .../examples/GetKubeInventory-ReplicaSet.json | 92 ++ .../examples/GetKubeInventory-Role.json | 58 + .../GetKubeInventory-RoleBinding.json | 59 + .../examples/GetKubeInventory-Service.json | 95 ++ .../GetKubeInventory-ServiceAccount.json | 57 + .../GetKubeInventory-StatefulSet.json | 131 ++ .../GetKubeInventory-StorageClass.json | 57 + .../GetKubeInventory-VolumeAttachment.json | 54 + .../examples/GetKubeInventory.json | 32 +- .../examples/ListKubeInventory.json | 78 ++ .../2026-06-15-preview/kubeInventory.json | 1176 ++++++++++++++++- 46 files changed, 5540 insertions(+), 68 deletions(-) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-RoleBinding.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-RoleBinding.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json new file mode 100644 index 000000000000..54d5db53e780 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json @@ -0,0 +1,86 @@ +{ + "title": "Get KubeInventory - CronJob", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "cronjob-report-generator-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/cronjob-report-generator-default", + "name": "cronjob-report-generator-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "batch/v1", + "kind": "CronJob", + "metadata": { + "name": "report-generator", + "namespaceName": "default", + "uid": "c9d0e1f2-a3b4-5678-cdef-890123456789", + "resourceVersion": "8901234", + "generation": 3, + "creationTimestamp": "2026-01-05T00:00:00Z", + "labels": [ + { "name": "app", "value": "report-generator" } + ] + }, + "spec": { + "schedule": "0 2 * * *", + "concurrencyPolicy": "Forbid", + "suspend": false, + "timeZone": "America/New_York", + "startingDeadlineSeconds": 60, + "completions": 1, + "parallelism": 1, + "backoffLimit": 2, + "containers": [ + { + "name": "reporter", + "image": "myapp/reporter:latest", + "imagePullPolicy": "Always", + "envFrom": [ + { "configMapRef": "report-config" }, + { "secretRef": "report-credentials" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "1000m", "memory": "1Gi" } + } + } + ] + }, + "status": { + "lastScheduleTime": "2026-06-04T02:00:00Z", + "lastSuccessfulTime": "2026-06-04T02:03:45Z", + "activeJobCount": 0, + "conditions": [] + }, + "events": [ + { + "type": "Normal", + "reason": "SuccessfulCreate", + "age": "1d", + "from": "cronjob-controller", + "message": "Created job report-generator-28651200" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json new file mode 100644 index 000000000000..09d6a902e439 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json @@ -0,0 +1,110 @@ +{ + "title": "Get KubeInventory - DaemonSet", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "daemonset-fluentbit-logging", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/daemonset-fluentbit-logging", + "name": "daemonset-fluentbit-logging", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "DaemonSet", + "metadata": { + "name": "fluent-bit", + "namespaceName": "logging", + "uid": "d3e4f5a6-b7c8-9012-defa-345678901234", + "resourceVersion": "3456789", + "generation": 1, + "creationTimestamp": "2026-02-01T12:00:00Z", + "labels": [ + { "name": "app", "value": "fluent-bit" }, + { "name": "k8s-app", "value": "fluent-bit" } + ] + }, + "spec": { + "selector": [ + { "name": "app", "value": "fluent-bit" } + ], + "strategyType": "RollingUpdate", + "maxUnavailable": "1", + "serviceAccountName": "fluent-bit-sa", + "tolerations": [ + { + "key": "node-role.kubernetes.io/control-plane", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + } + ], + "volumes": [ + { "name": "varlog", "sourceType": "hostPath", "source": "/var/log" }, + { "name": "varlibdockercontainers", "sourceType": "hostPath", "source": "/var/lib/docker/containers" } + ], + "containers": [ + { + "name": "fluent-bit", + "image": "fluent/fluent-bit:2.2.0", + "imagePullPolicy": "IfNotPresent", + "envFrom": [ + { "configMapRef": "fluent-bit-config" } + ], + "resources": { + "requests": { "cpu": "50m", "memory": "50Mi" }, + "limits": { "cpu": "200m", "memory": "200Mi" } + }, + "volumeMounts": [ + { "name": "varlog", "mountPath": "/var/log", "readOnly": true }, + { "name": "varlibdockercontainers", "mountPath": "/var/lib/docker/containers", "readOnly": true } + ], + "securityContext": { + "readOnlyRootFilesystem": false, + "allowPrivilegeEscalation": false + } + } + ] + }, + "status": { + "desiredNumberScheduled": 5, + "currentNumberScheduled": 5, + "numberReady": 5, + "numberMisscheduled": 0, + "numberUnavailable": 0, + "availableReplicas": 5, + "updatedReplicas": 5, + "observedGeneration": 1, + "conditions": [ + { + "type": "Available", + "status": "True", + "lastTransitionTime": "2026-02-01T12:02:00Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json new file mode 100644 index 000000000000..d45851e10560 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json @@ -0,0 +1,144 @@ +{ + "title": "Get KubeInventory - Deployment", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "deployment-nginx-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", + "name": "deployment-nginx-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "nginx", + "namespaceName": "default", + "uid": "b1c2d3e4-f5a6-7890-bcde-f12345678901", + "resourceVersion": "9012345", + "generation": 3, + "creationTimestamp": "2026-04-15T09:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" }, + { "name": "version", "value": "1.25" } + ], + "annotations": [ + { "name": "deployment.kubernetes.io/revision", "value": "3" } + ] + }, + "spec": { + "replicas": 3, + "selector": [ + { "name": "app", "value": "nginx" } + ], + "strategyType": "RollingUpdate", + "maxUnavailable": "25%", + "maxSurge": "25%", + "serviceAccountName": "nginx-sa", + "priorityClassName": "high-priority", + "nodeSelector": [ + { "name": "kubernetes.io/os", "value": "linux" } + ], + "securityContext": { + "runAsNonRoot": true, + "runAsUser": 1000, + "fsGroup": 2000, + "seccompProfile": "RuntimeDefault" + }, + "tolerations": [ + { + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "effect": "NoExecute", + "tolerationSeconds": 300 + } + ], + "volumes": [ + { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config" } + ], + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" } + ], + "env": [ + { "name": "ENV", "value": "production" } + ], + "envFrom": [ + { "configMapRef": "app-config" }, + { "secretRef": "app-secrets", "prefix": "SECRET_" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + }, + "volumeMounts": [ + { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "privileged": false, + "capabilities": { "drop": ["ALL"] } + } + } + ] + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "updatedReplicas": 3, + "unavailableReplicas": 0, + "observedGeneration": 3, + "conditions": [ + { + "type": "Available", + "status": "True", + "reason": "MinimumReplicasAvailable", + "message": "Deployment has minimum availability.", + "lastTransitionTime": "2026-04-15T09:01:30Z" + }, + { + "type": "Progressing", + "status": "True", + "reason": "NewReplicaSetAvailable", + "message": "ReplicaSet \"nginx-7d9f8c\" has successfully progressed.", + "lastTransitionTime": "2026-04-15T09:01:30Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "ScalingReplicaSet", + "age": "50d", + "from": "deployment-controller", + "message": "Scaled up replica set nginx-7d9f8c to 3" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json new file mode 100644 index 000000000000..3af9b66034d2 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json @@ -0,0 +1,83 @@ +{ + "title": "Get KubeInventory - HorizontalPodAutoscaler", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "horizontalpodautoscaler-nginx-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/horizontalpodautoscaler-nginx-default", + "name": "horizontalpodautoscaler-nginx-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "autoscaling/v2", + "kind": "HorizontalPodAutoscaler", + "metadata": { + "name": "nginx-hpa", + "namespaceName": "default", + "uid": "e7f8a9b0-c1d2-3456-efab-678901234567", + "resourceVersion": "1578901", + "creationTimestamp": "2026-04-20T10:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" } + ] + }, + "spec": { + "scaleTargetRefKind": "Deployment", + "scaleTargetRefName": "nginx", + "minReplicas": 2, + "maxReplicas": 10, + "additionalFields": [ + { "name": "metrics[0].type", "value": "Resource" }, + { "name": "metrics[0].resource.name", "value": "cpu" }, + { "name": "metrics[0].resource.target.type", "value": "Utilization" }, + { "name": "metrics[0].resource.target.averageUtilization", "value": "70" }, + { "name": "metrics[1].type", "value": "Resource" }, + { "name": "metrics[1].resource.name", "value": "memory" }, + { "name": "metrics[1].resource.target.type", "value": "Utilization" }, + { "name": "metrics[1].resource.target.averageUtilization", "value": "80" } + ] + }, + "status": { + "currentReplicas": 3, + "desiredReplicas": 3, + "lastScaleTime": "2026-04-20T10:00:00Z", + "conditions": [ + { + "type": "AbleToScale", + "status": "True", + "reason": "ReadyForNewScale", + "message": "recommended size matches current size", + "lastTransitionTime": "2026-04-20T10:01:00Z" + }, + { + "type": "ScalingActive", + "status": "True", + "reason": "ValidMetricFound", + "message": "the HPA was able to successfully calculate a replica count", + "lastTransitionTime": "2026-04-20T10:01:00Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json new file mode 100644 index 000000000000..964a1080d912 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json @@ -0,0 +1,92 @@ +{ + "title": "Get KubeInventory - Ingress", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "ingress-myapp-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/ingress-myapp-default", + "name": "ingress-myapp-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "networking.k8s.io/v1", + "kind": "Ingress", + "metadata": { + "name": "myapp", + "namespaceName": "default", + "uid": "a3b4c5d6-e7f8-9012-abcd-234567890123", + "resourceVersion": "1134567", + "creationTimestamp": "2026-04-01T08:00:00Z", + "labels": [ + { "name": "app", "value": "myapp" } + ], + "annotations": [ + { "name": "nginx.ingress.kubernetes.io/rewrite-target", "value": "/" }, + { "name": "nginx.ingress.kubernetes.io/ssl-redirect", "value": "true" } + ] + }, + "spec": { + "ingressClassName": "nginx", + "defaultBackendServiceName": "default-backend", + "defaultBackendServicePort": "80", + "ingressRules": [ + { + "host": "myapp.example.com", + "paths": [ + { + "path": "/api", + "pathType": "Prefix", + "serviceName": "myapp-api", + "servicePort": "8080" + }, + { + "path": "/", + "pathType": "Prefix", + "serviceName": "myapp-frontend", + "servicePort": "80" + } + ] + } + ], + "ingressTls": [ + { + "hosts": ["myapp.example.com"], + "secretName": "myapp-tls-cert" + } + ] + }, + "status": { + "loadBalancerIngress": ["203.0.113.10"], + "conditions": [] + }, + "events": [ + { + "type": "Normal", + "reason": "Sync", + "age": "1h", + "from": "nginx-ingress-controller", + "message": "Scheduled for sync" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json new file mode 100644 index 000000000000..c4c228758d9c --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json @@ -0,0 +1,56 @@ +{ + "title": "Get KubeInventory - IngressClass", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "ingressclass-nginx", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/ingressclass-nginx", + "name": "ingressclass-nginx", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "networking.k8s.io/v1", + "kind": "IngressClass", + "metadata": { + "name": "nginx", + "uid": "a3b4c5d6-e7f8-9012-abcd-456789012345", + "resourceVersion": "9345678", + "creationTimestamp": "2026-01-10T07:30:00Z", + "labels": [ + { "name": "app.kubernetes.io/component", "value": "controller" }, + { "name": "app.kubernetes.io/instance", "value": "ingress-nginx" }, + { "name": "app.kubernetes.io/name", "value": "ingress-nginx" } + ], + "annotations": [ + { "name": "ingressclass.kubernetes.io/is-default-class", "value": "true" } + ] + }, + "spec": { + "ingressController": "k8s.io/ingress-nginx" + }, + "status": { + "conditions": [] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json new file mode 100644 index 000000000000..eeaa27378fb6 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json @@ -0,0 +1,112 @@ +{ + "title": "Get KubeInventory - Job", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "job-db-migration-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/job-db-migration-default", + "name": "job-db-migration-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "batch/v1", + "kind": "Job", + "metadata": { + "name": "db-migration", + "namespaceName": "default", + "uid": "b8c9d0e1-f2a3-4567-bcde-789012345678", + "resourceVersion": "7890123", + "generation": 1, + "creationTimestamp": "2026-06-01T06:00:00Z", + "labels": [ + { "name": "app", "value": "db-migration" }, + { "name": "batch.kubernetes.io/job-name", "value": "db-migration" } + ] + }, + "spec": { + "completions": 1, + "parallelism": 1, + "backoffLimit": 3, + "suspend": false, + "activeDeadlineSeconds": 600, + "completionMode": "NonIndexed", + "ttlSecondsAfterFinished": 3600, + "serviceAccountName": "migration-sa", + "containers": [ + { + "name": "migration", + "image": "myapp/migration:v2.3.0", + "imagePullPolicy": "Always", + "envFrom": [ + { "secretRef": "db-credentials" }, + { "configMapRef": "migration-config" } + ], + "resources": { + "requests": { "cpu": "200m", "memory": "256Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "privileged": false, + "runAsNonRoot": true, + "runAsUser": 1000 + } + } + ] + }, + "status": { + "activeJobCount": 0, + "succeededJobCount": 1, + "failedJobCount": 0, + "readyPods": 0, + "jobStartTime": "2026-06-01T06:00:05Z", + "jobCompletionTime": "2026-06-01T06:02:30Z", + "conditions": [ + { + "type": "Complete", + "status": "True", + "reason": "Completed", + "message": "Job completed successfully", + "lastTransitionTime": "2026-06-01T06:02:30Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "SuccessfulCreate", + "age": "3d", + "from": "job-controller", + "message": "Created pod: db-migration-xk9p2" + }, + { + "type": "Normal", + "reason": "Completed", + "age": "3d", + "from": "job-controller", + "message": "Job completed" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json new file mode 100644 index 000000000000..01af9d6154f4 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json @@ -0,0 +1,61 @@ +{ + "title": "Get KubeInventory - NetworkPolicy", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "networkpolicy-deny-external-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/networkpolicy-deny-external-default", + "name": "networkpolicy-deny-external-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "deny-external", + "namespaceName": "default", + "uid": "b4c5d6e7-f8a9-0123-bcde-345678901234", + "resourceVersion": "1245678", + "creationTimestamp": "2026-02-15T12:00:00Z", + "labels": [ + { "name": "policy-type", "value": "isolation" } + ] + }, + "spec": { + "podSelectorLabels": [ + { "name": "app", "value": "myapp" } + ], + "networkPolicyTypes": ["Ingress", "Egress"], + "additionalFields": [ + { "name": "ingress[0].from[0].podSelector.matchLabels.app", "value": "frontend" }, + { "name": "ingress[0].ports[0].port", "value": "8080" }, + { "name": "ingress[0].ports[0].protocol", "value": "TCP" }, + { "name": "egress[0].to[0].namespaceSelector.matchLabels.name", "value": "kube-system" }, + { "name": "egress[0].ports[0].port", "value": "53" }, + { "name": "egress[0].ports[0].protocol", "value": "UDP" } + ] + }, + "status": {}, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json new file mode 100644 index 000000000000..f2695b0848b4 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json @@ -0,0 +1,122 @@ +{ + "title": "Get KubeInventory - Node", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "node-aks-nodepool1-12345678-0", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/node-aks-nodepool1-12345678-0", + "name": "node-aks-nodepool1-12345678-0", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "Node", + "metadata": { + "name": "aks-nodepool1-12345678-0", + "uid": "a7b8c9d0-e1f2-3456-abcd-678901234567", + "resourceVersion": "6789012", + "creationTimestamp": "2026-01-10T07:00:00Z", + "labels": [ + { "name": "kubernetes.io/os", "value": "linux" }, + { "name": "kubernetes.io/arch", "value": "amd64" }, + { "name": "node.kubernetes.io/instance-type", "value": "Standard_D4s_v3" }, + { "name": "topology.kubernetes.io/zone", "value": "eastus-1" }, + { "name": "agentpool", "value": "nodepool1" } + ], + "annotations": [ + { "name": "node.alpha.kubernetes.io/ttl", "value": "0" }, + { "name": "volumes.kubernetes.io/controller-managed-attach-detach", "value": "true" } + ] + }, + "spec": { + "providerId": "azure:///subscriptions/subId1/resourceGroups/mc_rg1_clusterName1_eastus/providers/Microsoft.Compute/virtualMachines/aks-nodepool1-12345678-0", + "podCidr": "10.244.0.0/24", + "unschedulable": false, + "taints": [ + { + "key": "node.kubernetes.io/memory-pressure", + "effect": "PreferNoSchedule" + } + ] + }, + "status": { + "nodeAddresses": [ + { "type": "InternalIP", "address": "10.240.0.4" }, + { "type": "Hostname", "address": "aks-nodepool1-12345678-0" } + ], + "nodeInfo": { + "kernelVersion": "5.15.0-1057-azure", + "osImage": "Ubuntu 22.04.4 LTS", + "containerRuntimeVersion": "containerd://1.7.13", + "kubeletVersion": "v1.29.2", + "kubeProxyVersion": "v1.29.2", + "architecture": "amd64", + "operatingSystem": "linux" + }, + "nodeCapacity": { + "cpu": "4", + "memory": "16Gi", + "pods": "110", + "ephemeralStorage": "119Gi" + }, + "nodeAllocatable": { + "cpu": "3850m", + "memory": "14902Mi", + "pods": "110", + "ephemeralStorage": "109Gi" + }, + "volumesAttached": [ + { "name": "kubernetes-dynamic-pvc-a1b2c3d4", "devicePath": "/dev/sdc" }, + { "name": "kubernetes-dynamic-pvc-e5f6a7b8", "devicePath": "/dev/sdd" } + ], + "conditions": [ + { + "type": "MemoryPressure", + "status": "False", + "reason": "KubeletHasSufficientMemory", + "lastTransitionTime": "2026-01-10T07:01:00Z" + }, + { + "type": "DiskPressure", + "status": "False", + "reason": "KubeletHasNoDiskPressure", + "lastTransitionTime": "2026-01-10T07:01:00Z" + }, + { + "type": "PIDPressure", + "status": "False", + "reason": "KubeletHasSufficientPID", + "lastTransitionTime": "2026-01-10T07:01:00Z" + }, + { + "type": "Ready", + "status": "True", + "reason": "KubeletReady", + "message": "kubelet is posting ready status", + "lastTransitionTime": "2026-01-10T07:01:30Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json new file mode 100644 index 000000000000..06018502eada --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json @@ -0,0 +1,59 @@ +{ + "title": "Get KubeInventory - PersistentVolume", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "name": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "PersistentVolume", + "metadata": { + "name": "pvc-d0e1f2a3-b4c5-6789-defa-901234567890", + "uid": "e1f2a3b4-c5d6-7890-efab-012345678901", + "resourceVersion": "9123456", + "creationTimestamp": "2026-03-01T10:00:05Z", + "labels": [ + { "name": "failure-domain.beta.kubernetes.io/zone", "value": "eastus-1" } + ] + }, + "spec": { + "storageCapacity": "50Gi", + "accessModes": ["ReadWriteOnce"], + "reclaimPolicy": "Delete", + "storageClassName": "managed-premium", + "volumeMode": "Filesystem", + "claimRefNamespace": "default", + "boundVolumeName": "data-postgres-0", + "csiDriver": "disk.csi.azure.com", + "csiVolumeHandle": "/subscriptions/subId1/resourceGroups/mc_rg1_clusterName1_eastus/providers/Microsoft.Compute/disks/pvc-d0e1f2a3-b4c5-6789-defa-901234567890" + }, + "status": { + "phase": "Bound" + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json new file mode 100644 index 000000000000..c702bbecc94a --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json @@ -0,0 +1,60 @@ +{ + "title": "Get KubeInventory - PersistentVolumeClaim", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "persistentvolumeclaim-data-postgres-0-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/persistentvolumeclaim-data-postgres-0-default", + "name": "persistentvolumeclaim-data-postgres-0-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "PersistentVolumeClaim", + "metadata": { + "name": "data-postgres-0", + "namespaceName": "default", + "uid": "d0e1f2a3-b4c5-6789-defa-901234567890", + "resourceVersion": "9012345", + "creationTimestamp": "2026-03-01T10:00:05Z", + "labels": [ + { "name": "app", "value": "postgres" }, + { "name": "statefulset.kubernetes.io/pod-name", "value": "postgres-0" } + ] + }, + "spec": { + "accessModes": ["ReadWriteOnce"], + "storageClassName": "managed-premium", + "storageRequest": "50Gi", + "volumeMode": "Filesystem", + "boundVolumeName": "pvc-d0e1f2a3-b4c5-6789-defa-901234567890" + }, + "status": { + "phase": "Bound", + "pvcCapacity": "50Gi", + "pvcAccessModes": ["ReadWriteOnce"], + "conditions": [] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json new file mode 100644 index 000000000000..fc8b83064431 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json @@ -0,0 +1,67 @@ +{ + "title": "Get KubeInventory - PodDisruptionBudget", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "poddisruptionbudget-nginx-pdb-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/poddisruptionbudget-nginx-pdb-default", + "name": "poddisruptionbudget-nginx-pdb-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "policy/v1", + "kind": "PodDisruptionBudget", + "metadata": { + "name": "nginx-pdb", + "namespaceName": "default", + "uid": "f8a9b0c1-d2e3-4567-fabc-789012345678", + "resourceVersion": "1689012", + "creationTimestamp": "2026-04-21T09:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" } + ] + }, + "spec": { + "minAvailable": "2", + "serviceSelector": [ + { "name": "app", "value": "nginx" } + ] + }, + "status": { + "currentHealthy": 3, + "desiredHealthy": 2, + "disruptionsAllowed": 1, + "expectedPods": 3, + "conditions": [ + { + "type": "DisruptionAllowed", + "status": "True", + "reason": "SufficientPods", + "message": "3 healthy replicas found, disruption is allowed", + "lastTransitionTime": "2026-04-21T09:01:00Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json new file mode 100644 index 000000000000..470196b5af13 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json @@ -0,0 +1,92 @@ +{ + "title": "Get KubeInventory - ReplicaSet", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "replicaset-nginx-7d9f8c-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/replicaset-nginx-7d9f8c-default", + "name": "replicaset-nginx-7d9f8c-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "metadata": { + "name": "nginx-7d9f8c", + "namespaceName": "default", + "uid": "e4f5a6b7-c8d9-0123-efab-456789012345", + "resourceVersion": "4567890", + "generation": 1, + "creationTimestamp": "2026-04-15T09:00:10Z", + "labels": [ + { "name": "app", "value": "nginx" }, + { "name": "pod-template-hash", "value": "7d9f8c" } + ], + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "name": "nginx", + "uid": "b1c2d3e4-f5a6-7890-bcde-f12345678901", + "controller": true, + "blockOwnerDeletion": true + } + ] + }, + "spec": { + "replicas": 3, + "selector": [ + { "name": "app", "value": "nginx" }, + { "name": "pod-template-hash", "value": "7d9f8c" } + ], + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + } + } + ] + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "observedGeneration": 1, + "conditions": [ + { + "type": "ReplicaFailure", + "status": "False", + "lastTransitionTime": "2026-04-15T09:00:10Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json new file mode 100644 index 000000000000..d2d308f4332a --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json @@ -0,0 +1,58 @@ +{ + "title": "Get KubeInventory - Role", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "role-pod-reader-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/role-pod-reader-default", + "name": "role-pod-reader-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "Role", + "metadata": { + "name": "pod-reader", + "namespaceName": "default", + "uid": "c5d6e7f8-a9b0-1234-cdef-456789012345", + "resourceVersion": "1356789", + "creationTimestamp": "2026-01-20T14:00:00Z" + }, + "spec": { + "rbacRules": [ + { + "apiGroups": [""], + "resources": ["pods", "pods/log"], + "verbs": ["get", "list", "watch"] + }, + { + "apiGroups": ["apps"], + "resources": ["deployments", "replicasets"], + "verbs": ["get", "list"] + } + ] + }, + "status": {}, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-RoleBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-RoleBinding.json new file mode 100644 index 000000000000..01ac5def7af5 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-RoleBinding.json @@ -0,0 +1,59 @@ +{ + "title": "Get KubeInventory - RoleBinding", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "rolebinding-read-pods-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/rolebinding-read-pods-default", + "name": "rolebinding-read-pods-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "RoleBinding", + "metadata": { + "name": "read-pods", + "namespaceName": "default", + "uid": "d6e7f8a9-b0c1-2345-defa-567890123456", + "resourceVersion": "1467890", + "creationTimestamp": "2026-01-20T14:05:00Z" + }, + "spec": { + "rbacSubjects": [ + { + "kind": "ServiceAccount", + "name": "monitoring-sa", + "namespaceName": "monitoring" + }, + { + "kind": "User", + "name": "alice@example.com" + } + ], + "rbacRoleRefKind": "Role", + "rbacRoleRefName": "pod-reader" + }, + "status": {}, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json new file mode 100644 index 000000000000..3864418947aa --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json @@ -0,0 +1,95 @@ +{ + "title": "Get KubeInventory - Service", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "service-nginx-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/service-nginx-default", + "name": "service-nginx-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "nginx", + "namespaceName": "default", + "uid": "f5a6b7c8-d9e0-1234-fabc-567890123456", + "resourceVersion": "5678901", + "creationTimestamp": "2026-04-15T09:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" } + ] + }, + "spec": { + "serviceType": "LoadBalancer", + "clusterIp": "10.0.128.45", + "servicePorts": [ + { + "name": "http", + "port": 80, + "targetPort": "http", + "protocol": "TCP" + }, + { + "name": "https", + "port": 443, + "targetPort": "https", + "protocol": "TCP" + } + ], + "serviceSelector": [ + { "name": "app", "value": "nginx" } + ], + "externalTrafficPolicy": "Local", + "loadBalancerClass": "service.beta.kubernetes.io/azure-load-balancer-internal", + "loadBalancerIp": "52.183.12.45" + }, + "status": { + "loadBalancerIngress": ["52.183.12.45"], + "conditions": [ + { + "type": "Available", + "status": "True", + "lastTransitionTime": "2026-04-15T09:02:00Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "EnsuringLoadBalancer", + "age": "50d", + "from": "service-controller", + "message": "Ensuring load balancer" + }, + { + "type": "Normal", + "reason": "EnsuredLoadBalancer", + "age": "50d", + "from": "service-controller", + "message": "Ensured load balancer" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json new file mode 100644 index 000000000000..c4905fdf2d40 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json @@ -0,0 +1,57 @@ +{ + "title": "Get KubeInventory - ServiceAccount", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "serviceaccount-nginx-sa-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/serviceaccount-nginx-sa-default", + "name": "serviceaccount-nginx-sa-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "name": "nginx-sa", + "namespaceName": "default", + "uid": "f2a3b4c5-d6e7-8901-fabc-345678901234", + "resourceVersion": "9234567", + "creationTimestamp": "2026-01-15T08:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" }, + { "name": "app.kubernetes.io/managed-by", "value": "Helm" } + ], + "annotations": [ + { "name": "eks.amazonaws.com/role-arn", "value": "" }, + { "name": "meta.helm.sh/release-name", "value": "nginx" } + ] + }, + "spec": { + "automountServiceAccountToken": false + }, + "status": { + "conditions": [] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json new file mode 100644 index 000000000000..472100a470fb --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json @@ -0,0 +1,131 @@ +{ + "title": "Get KubeInventory - StatefulSet", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "statefulset-postgres-data", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/statefulset-postgres-data", + "name": "statefulset-postgres-data", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": { + "name": "postgres", + "namespaceName": "data", + "uid": "c2d3e4f5-a6b7-8901-cdef-234567890123", + "resourceVersion": "7654321", + "generation": 2, + "creationTimestamp": "2026-03-10T08:00:00Z", + "labels": [ + { "name": "app", "value": "postgres" }, + { "name": "tier", "value": "database" } + ] + }, + "spec": { + "replicas": 3, + "serviceName": "postgres-headless", + "selector": [ + { "name": "app", "value": "postgres" } + ], + "strategyType": "RollingUpdate", + "podManagementPolicy": "OrderedReady", + "serviceAccountName": "postgres-sa", + "securityContext": { + "runAsUser": 999, + "runAsGroup": 999, + "fsGroup": 999, + "runAsNonRoot": true + }, + "volumes": [ + { "name": "config", "sourceType": "configMap", "source": "postgres-config" } + ], + "containers": [ + { + "name": "postgres", + "image": "postgres:15.4", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "postgres", "containerPort": 5432, "protocol": "TCP" } + ], + "env": [ + { "name": "POSTGRES_DB", "value": "appdb" } + ], + "envFrom": [ + { "secretRef": "postgres-credentials" } + ], + "resources": { + "requests": { "cpu": "500m", "memory": "1Gi" }, + "limits": { "cpu": "2", "memory": "4Gi" } + }, + "volumeMounts": [ + { "name": "data", "mountPath": "/var/lib/postgresql/data", "subPath": "postgres" }, + { "name": "config", "mountPath": "/etc/postgresql", "readOnly": true } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": false, + "privileged": false + } + } + ], + "volumeClaimTemplates": [ + { + "name": "data", + "accessModes": ["ReadWriteOnce"], + "storageClassName": "managed-premium", + "storageRequest": "20Gi", + "volumeMode": "Filesystem" + } + ] + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "currentReplicas": 3, + "updatedReplicas": 3, + "currentRevision": "postgres-7d4c9f6b8", + "updateRevision": "postgres-7d4c9f6b8", + "observedGeneration": 2, + "conditions": [ + { + "type": "Available", + "status": "True", + "reason": "MinimumReplicasAvailable", + "lastTransitionTime": "2026-03-10T08:05:00Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "SuccessfulCreate", + "age": "86d", + "from": "statefulset-controller", + "message": "create Pod postgres-0 in StatefulSet postgres successful" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json new file mode 100644 index 000000000000..911ebf69cbd1 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json @@ -0,0 +1,57 @@ +{ + "title": "Get KubeInventory - StorageClass", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "storageclass-managed-premium", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/storageclass-managed-premium", + "name": "storageclass-managed-premium", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "storage.k8s.io/v1", + "kind": "StorageClass", + "metadata": { + "name": "managed-premium", + "uid": "f2a3b4c5-d6e7-8901-fabc-123456789012", + "resourceVersion": "1023456", + "creationTimestamp": "2026-01-10T07:00:10Z", + "annotations": [ + { "name": "storageclass.kubernetes.io/is-default-class", "value": "false" } + ] + }, + "spec": { + "provisioner": "disk.csi.azure.com", + "reclaimPolicy": "Delete", + "volumeBindingMode": "WaitForFirstConsumer", + "allowVolumeExpansion": true, + "additionalFields": [ + { "name": "parameters.skuName", "value": "Premium_LRS" }, + { "name": "parameters.kind", "value": "Managed" }, + { "name": "parameters.cachingMode", "value": "ReadOnly" } + ] + }, + "status": {}, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json new file mode 100644 index 000000000000..01e8642160bd --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json @@ -0,0 +1,54 @@ +{ + "title": "Get KubeInventory - VolumeAttachment", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "name": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "storage.k8s.io/v1", + "kind": "VolumeAttachment", + "metadata": { + "name": "csi-azuredisk-pvc-d0e1f2a3-b4c5-6789-defa-901234567890", + "uid": "e1f2a3b4-c5d6-7890-efab-234567890123", + "resourceVersion": "9123456", + "creationTimestamp": "2026-03-01T10:00:10Z", + "labels": [ + { "name": "app.kubernetes.io/managed-by", "value": "disk.csi.azure.com" } + ] + }, + "spec": { + "attacherName": "disk.csi.azure.com", + "attachedVolumeName": "pvc-d0e1f2a3-b4c5-6789-defa-901234567890", + "nodeName": "aks-nodepool1-12345678-0" + }, + "status": { + "volumeAttached": true, + "conditions": [] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index f1633a3e68b1..53623d74577f 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -67,11 +67,21 @@ "serviceAccountName": "nginx-sa", "dnsPolicy": "ClusterFirst", "terminationGracePeriodSeconds": 30, + "priorityClassName": "high-priority", + "nodeSelector": [ + { "name": "kubernetes.io/os", "value": "linux" }, + { "name": "agentpool", "value": "nodepool1" } + ], + "hostNetwork": false, + "hostPid": false, + "hostIpc": false, + "runtimeClassName": "containerd", "securityContext": { "runAsUser": 1000, "runAsGroup": 3000, "fsGroup": 2000, - "runAsNonRoot": true + "runAsNonRoot": true, + "seccompProfile": "RuntimeDefault" }, "tolerations": [ { @@ -107,6 +117,7 @@ { "name": "nginx", "image": "nginx:1.25.4", + "imagePullPolicy": "IfNotPresent", "ports": [ { "name": "http", @@ -129,6 +140,9 @@ "value": "2" } ], + "envFrom": [ + { "configMapRef": "nginx-common-config" } + ], "resources": { "requests": { "cpu": "100m", @@ -160,11 +174,23 @@ "readOnlyRootFilesystem": true, "runAsNonRoot": true, "runAsUser": 1000, + "privileged": false, + "seccompProfile": "RuntimeDefault", "capabilities": { "drop": [ "ALL" ] } + }, + "livenessProbe": { + "type": "HTTPGet", + "path": "/healthz", + "port": 8080 + }, + "readinessProbe": { + "type": "HTTPGet", + "path": "/readyz", + "port": 8080 } } ] @@ -172,9 +198,13 @@ "status": { "phase": "Running", "podIp": "10.244.1.42", + "podIps": ["10.244.1.42", "fd00::1:2a"], "hostIp": "10.240.0.4", + "hostIps": ["10.240.0.4"], "startTime": "2026-05-01T10:00:05Z", "qosClass": "Burstable", + "reason": "", + "initContainerStatuses": [], "conditions": [ { "type": "Initialized", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index e2ca313a2a46..8f99ec417ffc 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -207,6 +207,84 @@ "attachedToExtension": "azure-kube-inventory" } } + , + { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", + "name": "deployment-nginx-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "nginx", + "namespaceName": "default", + "uid": "b1c2d3e4-f5a6-7890-bcde-f12345678901", + "resourceVersion": "2234567", + "generation": 3, + "creationTimestamp": "2026-04-15T09:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" } + ] + }, + "spec": { + "replicas": 3, + "selector": [ + { "name": "app", "value": "nginx" } + ], + "strategyType": "RollingUpdate", + "maxUnavailable": "25%", + "maxSurge": "25%", + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + } + } + ] + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "updatedReplicas": 3, + "unavailableReplicas": 0, + "observedGeneration": 3, + "conditions": [ + { + "type": "Available", + "status": "True", + "reason": "MinimumReplicasAvailable", + "message": "Deployment has minimum availability.", + "lastTransitionTime": "2026-04-15T09:00:20Z" + }, + { + "type": "Progressing", + "status": "True", + "reason": "NewReplicaSetAvailable", + "message": "ReplicaSet has successfully progressed.", + "lastTransitionTime": "2026-04-15T09:00:20Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } ], "nextLink": null } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index ae1a527bb250..a9d987f33bd3 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -188,6 +188,9 @@ model ContainerSecurityContext { /** Linux capability adjustments for this container. */ capabilities?: Capabilities; + /** When true, the container runs with full host privileges (root + all Linux capabilities). */ + privileged?: boolean; + /** Mount the container's root filesystem as read-only when true. */ readOnlyRootFilesystem?: boolean; @@ -202,6 +205,9 @@ model ContainerSecurityContext { /** GID to run the container process as. */ runAsGroup?: int64; + + /** Seccomp profile type applied to this container ('RuntimeDefault', 'Unconfined', or 'Localhost'). */ + seccompProfile?: string; } /** Network protocol used by a container port. */ @@ -240,6 +246,19 @@ model EnvVar { value?: string; } +/** A source for bulk-importing environment variables into a container from a ConfigMap or Secret. */ +model EnvFromSource { + /** Name of the ConfigMap whose keys are imported as environment variables. */ + configMapRef?: string; + + /** Name of the Secret whose keys are imported as environment variables. */ + #suppress "@azure-tools/typespec-azure-resource-manager/secret-prop" "secretRef holds the name of a Kubernetes Secret object, not a secret value" + secretRef?: string; + + /** Optional prefix prepended to each imported environment variable name. */ + prefix?: string; +} + /** * CPU and memory resource quantities for a container. * Values use Kubernetes resource notation: CPU as millicores (e.g., '500m', '2') @@ -263,6 +282,22 @@ model ContainerResourceRequirements { requests?: ContainerResourceQuantity; } +/** + * Simplified health probe configuration for a container. + * Captures the probe mechanism type and the primary target (path or port). + * Detailed timing parameters (initialDelaySeconds, periodSeconds, etc.) can be stored in additionalFields. + */ +model ContainerProbe { + /** Probe mechanism: 'HTTPGet', 'TCPSocket', 'Exec', or 'GRPC'. */ + type?: string; + + /** URL path for HTTPGet probes (e.g., '/healthz', '/readyz'). */ + path?: string; + + /** Port number for HTTPGet or TCPSocket probes. */ + port?: int32; +} + /** Specification of a single container within a pod. */ model ContainerSpec { /** Name of the container, unique within the pod. */ @@ -271,6 +306,9 @@ model ContainerSpec { /** Container image reference (e.g., 'nginx:1.25'). */ image: string; + /** Image pull policy for this container ('Always', 'IfNotPresent', or 'Never'). */ + imagePullPolicy?: string; + /** Ports to expose from the container. */ @identifiers(#["name"]) ports?: ContainerPort[]; @@ -279,6 +317,10 @@ model ContainerSpec { @identifiers(#["name"]) env?: EnvVar[]; + /** Sources that populate environment variables in bulk from ConfigMaps or Secrets. */ + @identifiers(#[]) + envFrom?: EnvFromSource[]; + /** Compute resource requests and limits. */ resources?: ContainerResourceRequirements; @@ -294,6 +336,12 @@ model ContainerSpec { /** Security context applied to this container. */ securityContext?: ContainerSecurityContext; + + /** Liveness probe that determines when to restart the container. */ + livenessProbe?: ContainerProbe; + + /** Readiness probe that determines when the container is ready to accept traffic. */ + readinessProbe?: ContainerProbe; } // ─── Pod-level support models ───────────────────────────────────────────────── @@ -363,6 +411,9 @@ model PodSecurityContext { /** Supplemental GIDs applied to each container in addition to the primary GID. */ supplementalGroups?: int64[]; + + /** Seccomp profile type applied to all containers ('RuntimeDefault', 'Unconfined', or 'Localhost'). */ + seccompProfile?: string; } /** State of a currently running container. */ @@ -440,6 +491,200 @@ model ContainerStatus { containerId?: string; } +// ─── Service models ─────────────────────────────────────────────────────────── + +/** A port exposed by a Kubernetes Service. */ +model ServicePort { + /** Port number the Service listens on (cluster-internal). */ + port: int32; + + /** Port or named port on the target pod the traffic is forwarded to. */ + targetPort?: string; + + /** NodePort allocated for NodePort and LoadBalancer Services. */ + nodePort?: int32; + + /** Network protocol for this port. */ + protocol?: NetworkProtocol; + + /** Optional name for this port, unique within the Service. */ + name?: string; + + /** Application-level protocol hint (e.g., 'http', 'https', 'grpc'). */ + appProtocol?: string; +} + +// ─── Node models ───────────────────────────────────────────────────────────── + +/** Effect applied to pods that do not tolerate a node taint. */ +union NodeTaintEffect { + string, + + /** New pods will not be scheduled on the tainted node. */ + NoSchedule: "NoSchedule", + + /** The scheduler tries to avoid placing new pods on the tainted node. */ + PreferNoSchedule: "PreferNoSchedule", + + /** Existing pods without a matching toleration are evicted from the tainted node. */ + NoExecute: "NoExecute", +} + +/** A taint applied to a Kubernetes Node that repels pods without a matching toleration. */ +model NodeTaint { + /** Taint key (e.g., 'node.kubernetes.io/not-ready'). */ + #suppress "@azure-tools/typespec-azure-resource-manager/secret-prop" "Taint key is a Kubernetes taint key identifier, not a secret" + key: string; + + /** Taint value matched by tolerations using the 'Equal' operator. */ + value?: string; + + /** Effect applied to non-tolerating pods. */ + effect: NodeTaintEffect; +} + +/** A network address associated with a Kubernetes Node. */ +model NodeAddress { + /** Address type (e.g., 'InternalIP', 'ExternalIP', 'Hostname'). */ + type: string; + + /** The address value (IP address or hostname). */ + address: string; +} + +/** Operating system and runtime information reported by the kubelet for a Node. */ +model NodeSystemInfo { + /** Kernel version of the node OS (e.g., '5.15.0-1041-azure'). */ + kernelVersion?: string; + + /** Human-readable OS image string (e.g., 'Ubuntu 22.04.3 LTS'). */ + osImage?: string; + + /** Container runtime name and version (e.g., 'containerd://1.7.2'). */ + containerRuntimeVersion?: string; + + /** Kubelet binary version running on the node (e.g., 'v1.29.2'). */ + kubeletVersion?: string; + + /** kube-proxy version running on the node. */ + kubeProxyVersion?: string; + + /** CPU architecture of the node (e.g., 'amd64', 'arm64'). */ + architecture?: string; + + /** Operating system family ('linux' or 'windows'). */ + operatingSystem?: string; +} + +/** Resource quantities reported for a Kubernetes Node (capacity or allocatable). */ +model NodeResourceMap { + /** CPU quantity (e.g., '4', '3850m'). */ + cpu?: string; + + /** Memory quantity (e.g., '16Gi', '14902Mi'). */ + memory?: string; + + /** Maximum number of pods the node supports. */ + pods?: string; + + /** Ephemeral storage quantity (e.g., '119Gi'). */ + ephemeralStorage?: string; +} + +/** A volume attached to a Kubernetes Node by the attach/detach controller. */ +model AttachedVolume { + /** Name of the attached volume (matches the PersistentVolume name). */ + name: string; + + /** Device path on the node where the volume is attached (e.g., '/dev/sdc'). */ + devicePath?: string; +} + +// ─── StatefulSet models ─────────────────────────────────────────────────────── + +/** A PersistentVolumeClaim template in a StatefulSet that provisions stable storage per replica. */ +model VolumeClaimTemplate { + /** Name of the volume claim template, referenced by container volumeMounts. */ + name: string; + + /** Requested storage access modes (e.g., 'ReadWriteOnce'). */ + accessModes?: string[]; + + /** StorageClass used for dynamic provisioning. */ + storageClassName?: string; + + /** Storage quantity requested per replica (e.g., '10Gi'). */ + storageRequest?: string; + + /** Volume mode ('Filesystem' or 'Block'). */ + volumeMode?: string; +} + +// ─── RBAC models ───────────────────────────────────────────────────────────── + +/** A single RBAC permission rule granting verbs on Kubernetes API resources. */ +model PolicyRule { + /** API groups the rule applies to (use '' for the core group). */ + apiGroups?: string[]; + + /** Resource types the rule applies to (e.g., 'pods', 'deployments', 'secrets'). */ + resources?: string[]; + + /** Actions permitted (e.g., 'get', 'list', 'watch', 'create', 'update', 'patch', 'delete'). */ + verbs: string[]; + + /** Specific resource names this rule applies to. Empty means all instances. */ + resourceNames?: string[]; +} + +/** A subject (user, group, or service account) in a RoleBinding or ClusterRoleBinding. */ +model RbacSubject { + /** Kind of the subject: 'User', 'Group', or 'ServiceAccount'. */ + kind: string; + + /** Name of the subject. */ + name: string; + + /** Namespace of the ServiceAccount. Required when kind is ServiceAccount. */ + namespaceName?: string; +} + +// ─── Ingress models ─────────────────────────────────────────────────────────── + +/** An HTTP path rule within an Ingress host entry, mapping a URL path to a backend Service. */ +model IngressPath { + /** URL path to match (e.g., '/api', '/'). */ + path?: string; + + /** Path matching semantics ('Exact', 'Prefix', or 'ImplementationSpecific'). */ + pathType?: string; + + /** Name of the backend Service receiving matched traffic. */ + serviceName: string; + + /** Port of the backend Service (numeric string or named port). */ + servicePort: string; +} + +/** A host-level routing rule in an Ingress resource. */ +model IngressRule { + /** Fully qualified domain name or wildcard host (e.g., 'api.example.com', '*.example.com'). */ + host?: string; + + /** HTTP path rules mapping URL paths to backend Services. */ + @identifiers(#[]) + paths?: IngressPath[]; +} + +/** TLS configuration entry for an Ingress resource. */ +model IngressTls { + /** Hostnames covered by this TLS certificate. */ + hosts?: string[]; + + /** Name of the Secret containing the TLS certificate and private key. */ + secretName?: string; +} + // ─── Generic flat spec and status ──────────────────────────────────────────── /** @@ -474,6 +719,49 @@ model KubernetesResourceSpec { /** Grace period in seconds before forcibly terminating the pod on deletion. */ terminationGracePeriodSeconds?: int64; + /** + * Node label selector constraining which nodes this pod may be scheduled on. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + @identifiers(#["name"]) + nodeSelector?: KubernetesLabel[]; + + /** + * Name of the PriorityClass governing scheduling priority and preemption for this pod. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + priorityClassName?: string; + + /** + * When true, the pod uses the host network namespace (disables pod network isolation). + * Populated for Pod resources. + */ + hostNetwork?: boolean; + + /** When true, the pod shares the host PID namespace. Populated for Pod resources. */ + hostPid?: boolean; + + /** When true, the pod shares the host IPC namespace. Populated for Pod resources. */ + hostIpc?: boolean; + + /** + * Name of the RuntimeClass for sandbox or specialized container runtimes + * (e.g., 'gvisor', 'kata-containers'). Populated for Pod resources. + */ + runtimeClassName?: string; + + /** + * Names of Secrets used to authenticate image pulls from private registries. + * Populated for Pod, Deployment, StatefulSet, and DaemonSet resources. + */ + imagePullSecrets?: string[]; + + /** + * Operating system of the containers ('linux' or 'windows'). + * Populated for Pod resources. + */ + podOs?: string; + // ── Deployment / StatefulSet / DaemonSet ──────────────────────────────────── /** Desired number of pod replicas. Populated for Deployment and StatefulSet resources. */ @@ -485,6 +773,51 @@ model KubernetesResourceSpec { */ serviceName?: string; + /** + * Label selector identifying which pods are managed by this workload. + * Populated for Deployment, StatefulSet, DaemonSet, and ReplicaSet resources. + */ + @identifiers(#["name"]) + selector?: KubernetesLabel[]; + + /** + * Rollout strategy type. + * 'RollingUpdate' or 'Recreate' for Deployment; + * 'RollingUpdate' or 'OnDelete' for StatefulSet and DaemonSet. + */ + strategyType?: string; + + /** + * Maximum number of pods that can be unavailable during a rolling update + * (absolute number or percentage string, e.g., '25%'). + * Populated for Deployment and DaemonSet resources. + */ + maxUnavailable?: string; + + /** + * Maximum number of pods that can be created above the desired count during a rolling update + * (absolute number or percentage string, e.g., '25%'). + * Populated for Deployment resources. + */ + maxSurge?: string; + + /** When true, the Deployment rollout is paused. Populated for Deployment resources. */ + paused?: boolean; + + /** + * Pod creation and deletion ordering policy for a StatefulSet + * ('OrderedReady' for sequential or 'Parallel' for simultaneous). + * Populated for StatefulSet resources. + */ + podManagementPolicy?: string; + + /** + * PVC templates stamped out per StatefulSet replica to provide stable per-pod storage. + * Populated for StatefulSet resources. + */ + @identifiers(#["name"]) + volumeClaimTemplates?: VolumeClaimTemplate[]; + // ── Service ───────────────────────────────────────────────────────────────── /** @@ -496,6 +829,39 @@ model KubernetesResourceSpec { /** Cluster-internal IP assigned to the service. Populated for Service resources. */ clusterIp?: string; + /** Ports exposed by the Service. Populated for Service resources. */ + @identifiers(#["name"]) + servicePorts?: ServicePort[]; + + /** + * Label selector routing traffic to pods backing this Service. + * Populated for Service resources. + */ + @identifiers(#["name"]) + serviceSelector?: KubernetesLabel[]; + + /** External IP addresses accepted by cluster nodes for this Service. Populated for Service resources. */ + externalIps?: string[]; + + /** DNS CNAME alias target for ExternalName Services. Populated for Service resources. */ + externalName?: string; + + /** + * Traffic routing policy for externally-facing addresses ('Cluster' or 'Local'). + * Populated for Service resources. + */ + externalTrafficPolicy?: string; + + /** Load balancer implementation class identifier. Populated for LoadBalancer Service resources. */ + loadBalancerClass?: string; + + /** + * Static IP address requested from the cloud provider for a LoadBalancer Service. + * Deprecated in Kubernetes 1.24 in favor of spec.loadBalancerIP on the Service. + * Populated for LoadBalancer Service resources. + */ + loadBalancerIp?: string; + // ── Pod security and scheduling ───────────────────────────────────────────── /** @@ -530,6 +896,352 @@ model KubernetesResourceSpec { */ securityContext?: PodSecurityContext; + // ── Job / CronJob ───────────────────────────────────────────────────────────── + + /** + * Total successful pod completions required for the Job to succeed. + * Populated for Job resources. + */ + completions?: int32; + + /** + * Maximum number of pods running concurrently for a Job. + * Populated for Job resources. + */ + parallelism?: int32; + + /** + * Number of retries before marking the Job as failed. + * Populated for Job resources. + */ + backoffLimit?: int32; + + /** + * Cron schedule expression. + * Populated for CronJob resources. + */ + schedule?: string; + + /** + * Concurrency policy for simultaneous CronJob runs ('Allow', 'Forbid', or 'Replace'). + * Populated for CronJob resources. + */ + concurrencyPolicy?: string; + + /** + * When true, future executions are suspended. + * Populated for CronJob and Job resources. + */ + suspend?: boolean; + + /** + * Maximum duration in seconds before the Job is terminated regardless of its success. + * Populated for Job resources. + */ + activeDeadlineSeconds?: int32; + + /** + * Completion tracking mode for Job pods: 'NonIndexed' (default) or 'Indexed'. + * Populated for Job resources. + */ + completionMode?: string; + + /** + * Seconds after Job completion before the Job and its pods are deleted automatically. + * Populated for Job resources. + */ + ttlSecondsAfterFinished?: int32; + + /** + * IANA time zone name for CronJob scheduling (e.g., 'America/New_York', 'UTC'). + * Populated for CronJob resources. + */ + timeZone?: string; + + /** + * Deadline in seconds for a CronJob run to start if missed; missed runs are ignored beyond this window. + * Populated for CronJob resources. + */ + startingDeadlineSeconds?: int32; + + // ── Storage (PVC / PV / StorageClass) ───────────────────────────────────────── + + /** + * Storage access modes requested or granted + * (e.g., 'ReadWriteOnce', 'ReadOnlyMany', 'ReadWriteMany'). + * Populated for PersistentVolumeClaim and PersistentVolume resources. + */ + accessModes?: string[]; + + /** + * Name of the StorageClass for dynamic provisioning or PVC-to-PV binding. + * Populated for PVC, PV, and StorageClass resources. + */ + storageClassName?: string; + + /** + * Storage quantity requested by a PVC (e.g., '10Gi'). + * Populated for PersistentVolumeClaim resources. + */ + storageRequest?: string; + + /** + * Total storage capacity of a PV (e.g., '100Gi'). + * Populated for PersistentVolume resources. + */ + storageCapacity?: string; + + /** + * Reclaim policy for a PV after its claim is released ('Retain', 'Delete', or 'Recycle'). + * Populated for PersistentVolume and StorageClass resources. + */ + reclaimPolicy?: string; + + /** + * Volume mode describing how the volume is used ('Filesystem' or 'Block'). + * Populated for PVC and PV resources. + */ + volumeMode?: string; + + /** + * For a PVC: the name of the PV it is bound to. + * For a PV: the name of the PVC bound to it. + */ + boundVolumeName?: string; + + /** + * Namespace of the PVC bound to a PV (populated in PV claimRef). + * Populated for PersistentVolume resources. + */ + claimRefNamespace?: string; + + /** + * CSI driver name managing this PersistentVolume (e.g., 'disk.csi.azure.com'). + * Populated for PersistentVolume resources backed by a CSI driver. + */ + csiDriver?: string; + + /** + * Unique volume handle assigned by the CSI driver. + * Populated for PersistentVolume resources backed by a CSI driver. + */ + csiVolumeHandle?: string; + + /** + * CSI driver (provisioner) name for a StorageClass (e.g., 'disk.csi.azure.com'). + * Populated for StorageClass resources. + */ + provisioner?: string; + + /** + * When to bind a PV to a PVC: 'Immediate' binds on creation; + * 'WaitForFirstConsumer' delays until a pod claims the PVC. + * Populated for StorageClass resources. + */ + volumeBindingMode?: string; + + /** + * When true, PVCs using this StorageClass may be expanded after provisioning. + * Populated for StorageClass resources. + */ + allowVolumeExpansion?: boolean; + + /** + * Kubernetes Secret type (e.g., 'Opaque', 'kubernetes.io/tls', 'kubernetes.io/service-account-token'). + * Populated for Secret resources. + */ + secretType?: string; + + // ── ServiceAccount ───────────────────────────────────────────────────────── + + /** + * When false, prevents the default Kubernetes service account token from being + * auto-mounted into pods running as this ServiceAccount. + * Populated for ServiceAccount resources. + */ + automountServiceAccountToken?: boolean; + + // ── VolumeAttachment ──────────────────────────────────────────────────────── + + /** + * Name of the CSI driver that should attach/detach the volume (e.g., 'disk.csi.azure.com'). + * Populated for VolumeAttachment resources. + */ + attacherName?: string; + + /** + * Name of the PersistentVolume being attached. + * Populated for VolumeAttachment resources. + */ + attachedVolumeName?: string; + + // ── Ingress / NetworkPolicy ─────────────────────────────────────────────────── + + /** + * Name of the IngressClass that governs this Ingress resource. + * Populated for Ingress resources. + */ + ingressClassName?: string; + + /** + * Routing rules mapping hostnames and URL paths to backend Services. + * Populated for Ingress resources. + */ + @identifiers(#[]) + ingressRules?: IngressRule[]; + + /** + * TLS termination configuration for Ingress resources. + * Populated for Ingress resources. + */ + @identifiers(#[]) + ingressTls?: IngressTls[]; + + /** + * Backend Service name to route traffic when no rule matches. + * Populated for Ingress resources. + */ + defaultBackendServiceName?: string; + + /** + * Backend Service port to route traffic when no rule matches (number or named port). + * Populated for Ingress resources. + */ + defaultBackendServicePort?: string; + + /** + * Controller class reference for an IngressClass (e.g., 'nginx.ingress.kubernetes.io/controller'). + * Populated for IngressClass resources. + */ + ingressController?: string; + + /** + * Label selector identifying the pods this NetworkPolicy applies to. + * Populated for NetworkPolicy resources. + */ + @identifiers(#["name"]) + podSelectorLabels?: KubernetesLabel[]; + + /** + * Policy directions enforced ('Ingress', 'Egress', or both). + * Populated for NetworkPolicy resources. + */ + networkPolicyTypes?: string[]; + + // ── RBAC (Role / RoleBinding / ClusterRole / ClusterRoleBinding) ────────────── + + /** + * RBAC permission rules granting access to Kubernetes API resources. + * Populated for Role and ClusterRole resources. + */ + @identifiers(#[]) + rbacRules?: PolicyRule[]; + + /** + * Subjects (users, groups, service accounts) granted permissions by this binding. + * Populated for RoleBinding and ClusterRoleBinding resources. + */ + @identifiers(#[]) + rbacSubjects?: RbacSubject[]; + + /** + * Kind of the role referenced by a binding ('Role' or 'ClusterRole'). + * Populated for RoleBinding and ClusterRoleBinding resources. + */ + rbacRoleRefKind?: string; + + /** + * Name of the role referenced by a binding. + * Populated for RoleBinding and ClusterRoleBinding resources. + */ + rbacRoleRefName?: string; + + // ── HPA / PDB / PriorityClass ──────────────────────────────────────────────── + + /** + * Kind of the resource being autoscaled (e.g., 'Deployment', 'StatefulSet'). + * Populated for HorizontalPodAutoscaler resources. + */ + scaleTargetRefKind?: string; + + /** + * Name of the resource being autoscaled. + * Populated for HorizontalPodAutoscaler resources. + */ + scaleTargetRefName?: string; + + /** + * Minimum replica count for autoscaling. + * Populated for HorizontalPodAutoscaler resources. + */ + minReplicas?: int32; + + /** + * Maximum replica count for autoscaling. + * Populated for HorizontalPodAutoscaler resources. + */ + maxReplicas?: int32; + + /** + * Minimum number of pods that must remain available during voluntary disruptions + * (absolute number or percentage string, e.g., '2', '50%'). + * Populated for PodDisruptionBudget resources. + */ + minAvailable?: string; + + /** + * Maximum number of pods that may be simultaneously unavailable during voluntary disruptions. + * Populated for PodDisruptionBudget resources. + */ + maxUnavailablePods?: string; + + /** + * Numeric scheduling priority value for a PriorityClass. + * Populated for PriorityClass resources. + */ + priorityValue?: int32; + + /** + * When true, this PriorityClass is the cluster default for pods without an explicit priorityClassName. + * Populated for PriorityClass resources. + */ + globalDefault?: boolean; + + /** + * Preemption policy for pods with this priority class when system resources are scarce + * ('PreemptLowerPriority' or 'Never'). + * Populated for PriorityClass resources. + */ + preemptionPolicy?: string; + + // ── Node ────────────────────────────────────────────────────────────────────── + + /** + * Taints applied to the node, repelling pods that lack a matching toleration. + * Populated for Node resources. + */ + @identifiers(#[]) + taints?: NodeTaint[]; + + /** + * When true, the node is cordoned and will not accept new pod scheduling. + * Populated for Node resources. + */ + unschedulable?: boolean; + + /** + * Cloud provider identifier for the node + * (e.g., 'azure:///subscriptions/.../virtualMachines/vm-0'). + * Populated for Node resources. + */ + providerId?: string; + + /** + * IP range assigned to pods running on this node. + * Populated for Node resources. + */ + podCidr?: string; + // ── Generic overflow ──────────────────────────────────────────────────────── /** @@ -566,20 +1278,85 @@ model KubernetesResourceStatus { // ── Workload replica counters ──────────────────────────────────────────────── + /** Total non-terminating pods targeted by this workload. Populated for Deployment, StatefulSet, ReplicaSet. */ + replicas?: int32; + /** Number of pods ready to serve requests. Populated for Deployment, StatefulSet, DaemonSet. */ readyReplicas?: int32; - /** Number of pods available for at least minReadySeconds. Populated for Deployment, DaemonSet. */ + /** Number of pods available for at least minReadySeconds. Populated for Deployment, DaemonSet, StatefulSet. */ availableReplicas?: int32; + /** Pods running the current (desired) template spec. Populated for Deployment, StatefulSet, DaemonSet. */ + updatedReplicas?: int32; + + /** Pods required but not yet available. Populated for Deployment resources. */ + unavailableReplicas?: int32; + + /** + * Pods running the previous revision (before update completes). + * Populated for StatefulSet resources. + */ + currentReplicas?: int32; + + /** + * Name of the StatefulSet revision corresponding to currentReplicas. + * Populated for StatefulSet resources. + */ + currentRevision?: string; + + /** + * Name of the StatefulSet revision applied to updatedReplicas. + * Populated for StatefulSet resources. + */ + updateRevision?: string; + + /** + * Desired replica count calculated by the HorizontalPodAutoscaler. + * Populated for HorizontalPodAutoscaler resources. + */ + desiredReplicas?: int32; + + /** + * Pods that are terminating but not yet removed from the endpoints. + * Populated for Deployment and ReplicaSet resources. + */ + terminatingReplicas?: int32; + + // ── DaemonSet scheduling counters ──────────────────────────────────────────── + + /** Total nodes that should run the daemon pod. Populated for DaemonSet resources. */ + desiredNumberScheduled?: int32; + + /** Nodes running at least one daemon pod. Populated for DaemonSet resources. */ + currentNumberScheduled?: int32; + + /** Nodes with a Ready daemon pod. Populated for DaemonSet resources. */ + numberReady?: int32; + + /** + * Nodes running the daemon pod that should not be running it. + * Populated for DaemonSet resources. + */ + numberMisscheduled?: int32; + + /** Nodes missing an available daemon pod. Populated for DaemonSet resources. */ + numberUnavailable?: int32; + // ── Pod ───────────────────────────────────────────────────────────────────── /** IP address allocated to the pod within the cluster. Populated for Pod resources. */ podIp?: string; + /** Additional pod IPs assigned in multi-network or dual-stack clusters. Populated for Pod resources. */ + podIps?: string[]; + /** IP address of the node hosting the pod. Populated for Pod resources. */ hostIp?: string; + /** Additional host IPs for dual-stack nodes. Populated for Pod resources. */ + hostIps?: string[]; + /** UTC timestamp when the pod was accepted by the scheduler. Populated for Pod resources. */ startTime?: utcDateTime; @@ -590,18 +1367,141 @@ model KubernetesResourceStatus { @identifiers(#["name"]) containerStatuses?: ContainerStatus[]; + /** + * Runtime status of each init container in the pod. + * Populated for Pod resources. + */ + @identifiers(#["name"]) + initContainerStatuses?: ContainerStatus[]; + /** * QoS class assigned by Kubernetes based on resource requests and limits. * One of 'Guaranteed', 'Burstable', or 'BestEffort'. Populated for Pod resources. */ qosClass?: string; + /** + * Brief CamelCase reason for the pod's current state (e.g., 'Evicted', 'OOMKilled'). + * Populated for Pod resources. + */ + reason?: string; + /** * Most recent generation observed by the controller. * Populated for Deployment, StatefulSet, DaemonSet, and Pod resources. */ observedGeneration?: int64; + // ── Job / CronJob ───────────────────────────────────────────────────────────── + + /** Number of currently active (running or pending) pods. Populated for Job resources. */ + activeJobCount?: int32; + + /** Number of pods that completed successfully. Populated for Job resources. */ + succeededJobCount?: int32; + + /** Number of pods that failed. Populated for Job resources. */ + failedJobCount?: int32; + + /** Number of pods in ready state for a Job. Populated for Job resources. */ + readyPods?: int32; + + /** UTC timestamp when the Job started executing. Populated for Job resources. */ + jobStartTime?: utcDateTime; + + /** UTC timestamp when the Job completed successfully. Populated for Job resources. */ + jobCompletionTime?: utcDateTime; + + /** UTC timestamp when the CronJob last successfully scheduled a Job. */ + lastScheduleTime?: utcDateTime; + + /** UTC timestamp when the last Job triggered by this CronJob completed successfully. */ + lastSuccessfulTime?: utcDateTime; + + // ── Service / Ingress ───────────────────────────────────────────────────────── + + /** + * External IP addresses or hostnames assigned to LoadBalancer Services or Ingress resources. + * Populated for Service (type LoadBalancer) and Ingress resources. + */ + loadBalancerIngress?: string[]; + + /** + * UTC timestamp of the most recent scaling event triggered by the HPA. + * Populated for HorizontalPodAutoscaler resources. + */ + lastScaleTime?: utcDateTime; + + // ── Node ────────────────────────────────────────────────────────────────────── + + /** + * Network addresses of the node (InternalIP, ExternalIP, Hostname). + * Populated for Node resources. + */ + @identifiers(#["address"]) + nodeAddresses?: NodeAddress[]; + + /** + * Operating system and runtime information for the node. + * Populated for Node resources. + */ + nodeInfo?: NodeSystemInfo; + + /** + * Total hardware resources of the node (cpu, memory, pods, ephemeral-storage). + * Populated for Node resources. + */ + nodeCapacity?: NodeResourceMap; + + /** + * Resources available for scheduling after system reservation. + * Populated for Node resources. + */ + nodeAllocatable?: NodeResourceMap; + + /** + * Volumes that have been successfully attached to the node by the attach/detach controller. + * Populated for Node resources. + */ + @identifiers(#["name"]) + volumesAttached?: AttachedVolume[]; + + // ── PDB ─────────────────────────────────────────────────────────────────────── + + /** Currently healthy (Ready) pods counted by the PodDisruptionBudget. */ + currentHealthy?: int32; + + /** Minimum healthy pods required by the PodDisruptionBudget. */ + desiredHealthy?: int32; + + /** Number of pod disruptions currently allowed by the PodDisruptionBudget. */ + disruptionsAllowed?: int32; + + /** Total number of pods counted by the PodDisruptionBudget (ready + not ready). */ + expectedPods?: int32; + + // ── PVC ─────────────────────────────────────────────────────────────────────── + + /** + * Actual provisioned storage capacity for the PVC after binding (e.g., '10Gi'). + * Populated for PersistentVolumeClaim resources. + */ + pvcCapacity?: string; + + /** + * Access modes granted to the PVC after it is bound to a PV. + * Populated for PersistentVolumeClaim resources. + */ + pvcAccessModes?: string[]; + + // ── VolumeAttachment ──────────────────────────────────────────────────────── + + /** + * When true, the volume is successfully attached to the target node. + * Populated for VolumeAttachment resources. + */ + volumeAttached?: boolean; + // ── Generic overflow ──────────────────────────────────────────────────────── /** diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json new file mode 100644 index 000000000000..54d5db53e780 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json @@ -0,0 +1,86 @@ +{ + "title": "Get KubeInventory - CronJob", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "cronjob-report-generator-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/cronjob-report-generator-default", + "name": "cronjob-report-generator-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "batch/v1", + "kind": "CronJob", + "metadata": { + "name": "report-generator", + "namespaceName": "default", + "uid": "c9d0e1f2-a3b4-5678-cdef-890123456789", + "resourceVersion": "8901234", + "generation": 3, + "creationTimestamp": "2026-01-05T00:00:00Z", + "labels": [ + { "name": "app", "value": "report-generator" } + ] + }, + "spec": { + "schedule": "0 2 * * *", + "concurrencyPolicy": "Forbid", + "suspend": false, + "timeZone": "America/New_York", + "startingDeadlineSeconds": 60, + "completions": 1, + "parallelism": 1, + "backoffLimit": 2, + "containers": [ + { + "name": "reporter", + "image": "myapp/reporter:latest", + "imagePullPolicy": "Always", + "envFrom": [ + { "configMapRef": "report-config" }, + { "secretRef": "report-credentials" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "1000m", "memory": "1Gi" } + } + } + ] + }, + "status": { + "lastScheduleTime": "2026-06-04T02:00:00Z", + "lastSuccessfulTime": "2026-06-04T02:03:45Z", + "activeJobCount": 0, + "conditions": [] + }, + "events": [ + { + "type": "Normal", + "reason": "SuccessfulCreate", + "age": "1d", + "from": "cronjob-controller", + "message": "Created job report-generator-28651200" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json new file mode 100644 index 000000000000..09d6a902e439 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json @@ -0,0 +1,110 @@ +{ + "title": "Get KubeInventory - DaemonSet", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "daemonset-fluentbit-logging", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/daemonset-fluentbit-logging", + "name": "daemonset-fluentbit-logging", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "DaemonSet", + "metadata": { + "name": "fluent-bit", + "namespaceName": "logging", + "uid": "d3e4f5a6-b7c8-9012-defa-345678901234", + "resourceVersion": "3456789", + "generation": 1, + "creationTimestamp": "2026-02-01T12:00:00Z", + "labels": [ + { "name": "app", "value": "fluent-bit" }, + { "name": "k8s-app", "value": "fluent-bit" } + ] + }, + "spec": { + "selector": [ + { "name": "app", "value": "fluent-bit" } + ], + "strategyType": "RollingUpdate", + "maxUnavailable": "1", + "serviceAccountName": "fluent-bit-sa", + "tolerations": [ + { + "key": "node-role.kubernetes.io/control-plane", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + } + ], + "volumes": [ + { "name": "varlog", "sourceType": "hostPath", "source": "/var/log" }, + { "name": "varlibdockercontainers", "sourceType": "hostPath", "source": "/var/lib/docker/containers" } + ], + "containers": [ + { + "name": "fluent-bit", + "image": "fluent/fluent-bit:2.2.0", + "imagePullPolicy": "IfNotPresent", + "envFrom": [ + { "configMapRef": "fluent-bit-config" } + ], + "resources": { + "requests": { "cpu": "50m", "memory": "50Mi" }, + "limits": { "cpu": "200m", "memory": "200Mi" } + }, + "volumeMounts": [ + { "name": "varlog", "mountPath": "/var/log", "readOnly": true }, + { "name": "varlibdockercontainers", "mountPath": "/var/lib/docker/containers", "readOnly": true } + ], + "securityContext": { + "readOnlyRootFilesystem": false, + "allowPrivilegeEscalation": false + } + } + ] + }, + "status": { + "desiredNumberScheduled": 5, + "currentNumberScheduled": 5, + "numberReady": 5, + "numberMisscheduled": 0, + "numberUnavailable": 0, + "availableReplicas": 5, + "updatedReplicas": 5, + "observedGeneration": 1, + "conditions": [ + { + "type": "Available", + "status": "True", + "lastTransitionTime": "2026-02-01T12:02:00Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json new file mode 100644 index 000000000000..d45851e10560 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json @@ -0,0 +1,144 @@ +{ + "title": "Get KubeInventory - Deployment", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "deployment-nginx-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", + "name": "deployment-nginx-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "nginx", + "namespaceName": "default", + "uid": "b1c2d3e4-f5a6-7890-bcde-f12345678901", + "resourceVersion": "9012345", + "generation": 3, + "creationTimestamp": "2026-04-15T09:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" }, + { "name": "version", "value": "1.25" } + ], + "annotations": [ + { "name": "deployment.kubernetes.io/revision", "value": "3" } + ] + }, + "spec": { + "replicas": 3, + "selector": [ + { "name": "app", "value": "nginx" } + ], + "strategyType": "RollingUpdate", + "maxUnavailable": "25%", + "maxSurge": "25%", + "serviceAccountName": "nginx-sa", + "priorityClassName": "high-priority", + "nodeSelector": [ + { "name": "kubernetes.io/os", "value": "linux" } + ], + "securityContext": { + "runAsNonRoot": true, + "runAsUser": 1000, + "fsGroup": 2000, + "seccompProfile": "RuntimeDefault" + }, + "tolerations": [ + { + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "effect": "NoExecute", + "tolerationSeconds": 300 + } + ], + "volumes": [ + { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config" } + ], + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" } + ], + "env": [ + { "name": "ENV", "value": "production" } + ], + "envFrom": [ + { "configMapRef": "app-config" }, + { "secretRef": "app-secrets", "prefix": "SECRET_" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + }, + "volumeMounts": [ + { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "privileged": false, + "capabilities": { "drop": ["ALL"] } + } + } + ] + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "updatedReplicas": 3, + "unavailableReplicas": 0, + "observedGeneration": 3, + "conditions": [ + { + "type": "Available", + "status": "True", + "reason": "MinimumReplicasAvailable", + "message": "Deployment has minimum availability.", + "lastTransitionTime": "2026-04-15T09:01:30Z" + }, + { + "type": "Progressing", + "status": "True", + "reason": "NewReplicaSetAvailable", + "message": "ReplicaSet \"nginx-7d9f8c\" has successfully progressed.", + "lastTransitionTime": "2026-04-15T09:01:30Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "ScalingReplicaSet", + "age": "50d", + "from": "deployment-controller", + "message": "Scaled up replica set nginx-7d9f8c to 3" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json new file mode 100644 index 000000000000..3af9b66034d2 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json @@ -0,0 +1,83 @@ +{ + "title": "Get KubeInventory - HorizontalPodAutoscaler", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "horizontalpodautoscaler-nginx-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/horizontalpodautoscaler-nginx-default", + "name": "horizontalpodautoscaler-nginx-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "autoscaling/v2", + "kind": "HorizontalPodAutoscaler", + "metadata": { + "name": "nginx-hpa", + "namespaceName": "default", + "uid": "e7f8a9b0-c1d2-3456-efab-678901234567", + "resourceVersion": "1578901", + "creationTimestamp": "2026-04-20T10:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" } + ] + }, + "spec": { + "scaleTargetRefKind": "Deployment", + "scaleTargetRefName": "nginx", + "minReplicas": 2, + "maxReplicas": 10, + "additionalFields": [ + { "name": "metrics[0].type", "value": "Resource" }, + { "name": "metrics[0].resource.name", "value": "cpu" }, + { "name": "metrics[0].resource.target.type", "value": "Utilization" }, + { "name": "metrics[0].resource.target.averageUtilization", "value": "70" }, + { "name": "metrics[1].type", "value": "Resource" }, + { "name": "metrics[1].resource.name", "value": "memory" }, + { "name": "metrics[1].resource.target.type", "value": "Utilization" }, + { "name": "metrics[1].resource.target.averageUtilization", "value": "80" } + ] + }, + "status": { + "currentReplicas": 3, + "desiredReplicas": 3, + "lastScaleTime": "2026-04-20T10:00:00Z", + "conditions": [ + { + "type": "AbleToScale", + "status": "True", + "reason": "ReadyForNewScale", + "message": "recommended size matches current size", + "lastTransitionTime": "2026-04-20T10:01:00Z" + }, + { + "type": "ScalingActive", + "status": "True", + "reason": "ValidMetricFound", + "message": "the HPA was able to successfully calculate a replica count", + "lastTransitionTime": "2026-04-20T10:01:00Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json new file mode 100644 index 000000000000..964a1080d912 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json @@ -0,0 +1,92 @@ +{ + "title": "Get KubeInventory - Ingress", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "ingress-myapp-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/ingress-myapp-default", + "name": "ingress-myapp-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "networking.k8s.io/v1", + "kind": "Ingress", + "metadata": { + "name": "myapp", + "namespaceName": "default", + "uid": "a3b4c5d6-e7f8-9012-abcd-234567890123", + "resourceVersion": "1134567", + "creationTimestamp": "2026-04-01T08:00:00Z", + "labels": [ + { "name": "app", "value": "myapp" } + ], + "annotations": [ + { "name": "nginx.ingress.kubernetes.io/rewrite-target", "value": "/" }, + { "name": "nginx.ingress.kubernetes.io/ssl-redirect", "value": "true" } + ] + }, + "spec": { + "ingressClassName": "nginx", + "defaultBackendServiceName": "default-backend", + "defaultBackendServicePort": "80", + "ingressRules": [ + { + "host": "myapp.example.com", + "paths": [ + { + "path": "/api", + "pathType": "Prefix", + "serviceName": "myapp-api", + "servicePort": "8080" + }, + { + "path": "/", + "pathType": "Prefix", + "serviceName": "myapp-frontend", + "servicePort": "80" + } + ] + } + ], + "ingressTls": [ + { + "hosts": ["myapp.example.com"], + "secretName": "myapp-tls-cert" + } + ] + }, + "status": { + "loadBalancerIngress": ["203.0.113.10"], + "conditions": [] + }, + "events": [ + { + "type": "Normal", + "reason": "Sync", + "age": "1h", + "from": "nginx-ingress-controller", + "message": "Scheduled for sync" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json new file mode 100644 index 000000000000..c4c228758d9c --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json @@ -0,0 +1,56 @@ +{ + "title": "Get KubeInventory - IngressClass", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "ingressclass-nginx", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/ingressclass-nginx", + "name": "ingressclass-nginx", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "networking.k8s.io/v1", + "kind": "IngressClass", + "metadata": { + "name": "nginx", + "uid": "a3b4c5d6-e7f8-9012-abcd-456789012345", + "resourceVersion": "9345678", + "creationTimestamp": "2026-01-10T07:30:00Z", + "labels": [ + { "name": "app.kubernetes.io/component", "value": "controller" }, + { "name": "app.kubernetes.io/instance", "value": "ingress-nginx" }, + { "name": "app.kubernetes.io/name", "value": "ingress-nginx" } + ], + "annotations": [ + { "name": "ingressclass.kubernetes.io/is-default-class", "value": "true" } + ] + }, + "spec": { + "ingressController": "k8s.io/ingress-nginx" + }, + "status": { + "conditions": [] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json new file mode 100644 index 000000000000..eeaa27378fb6 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json @@ -0,0 +1,112 @@ +{ + "title": "Get KubeInventory - Job", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "job-db-migration-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/job-db-migration-default", + "name": "job-db-migration-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "batch/v1", + "kind": "Job", + "metadata": { + "name": "db-migration", + "namespaceName": "default", + "uid": "b8c9d0e1-f2a3-4567-bcde-789012345678", + "resourceVersion": "7890123", + "generation": 1, + "creationTimestamp": "2026-06-01T06:00:00Z", + "labels": [ + { "name": "app", "value": "db-migration" }, + { "name": "batch.kubernetes.io/job-name", "value": "db-migration" } + ] + }, + "spec": { + "completions": 1, + "parallelism": 1, + "backoffLimit": 3, + "suspend": false, + "activeDeadlineSeconds": 600, + "completionMode": "NonIndexed", + "ttlSecondsAfterFinished": 3600, + "serviceAccountName": "migration-sa", + "containers": [ + { + "name": "migration", + "image": "myapp/migration:v2.3.0", + "imagePullPolicy": "Always", + "envFrom": [ + { "secretRef": "db-credentials" }, + { "configMapRef": "migration-config" } + ], + "resources": { + "requests": { "cpu": "200m", "memory": "256Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "privileged": false, + "runAsNonRoot": true, + "runAsUser": 1000 + } + } + ] + }, + "status": { + "activeJobCount": 0, + "succeededJobCount": 1, + "failedJobCount": 0, + "readyPods": 0, + "jobStartTime": "2026-06-01T06:00:05Z", + "jobCompletionTime": "2026-06-01T06:02:30Z", + "conditions": [ + { + "type": "Complete", + "status": "True", + "reason": "Completed", + "message": "Job completed successfully", + "lastTransitionTime": "2026-06-01T06:02:30Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "SuccessfulCreate", + "age": "3d", + "from": "job-controller", + "message": "Created pod: db-migration-xk9p2" + }, + { + "type": "Normal", + "reason": "Completed", + "age": "3d", + "from": "job-controller", + "message": "Job completed" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json new file mode 100644 index 000000000000..01af9d6154f4 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json @@ -0,0 +1,61 @@ +{ + "title": "Get KubeInventory - NetworkPolicy", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "networkpolicy-deny-external-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/networkpolicy-deny-external-default", + "name": "networkpolicy-deny-external-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "networking.k8s.io/v1", + "kind": "NetworkPolicy", + "metadata": { + "name": "deny-external", + "namespaceName": "default", + "uid": "b4c5d6e7-f8a9-0123-bcde-345678901234", + "resourceVersion": "1245678", + "creationTimestamp": "2026-02-15T12:00:00Z", + "labels": [ + { "name": "policy-type", "value": "isolation" } + ] + }, + "spec": { + "podSelectorLabels": [ + { "name": "app", "value": "myapp" } + ], + "networkPolicyTypes": ["Ingress", "Egress"], + "additionalFields": [ + { "name": "ingress[0].from[0].podSelector.matchLabels.app", "value": "frontend" }, + { "name": "ingress[0].ports[0].port", "value": "8080" }, + { "name": "ingress[0].ports[0].protocol", "value": "TCP" }, + { "name": "egress[0].to[0].namespaceSelector.matchLabels.name", "value": "kube-system" }, + { "name": "egress[0].ports[0].port", "value": "53" }, + { "name": "egress[0].ports[0].protocol", "value": "UDP" } + ] + }, + "status": {}, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json new file mode 100644 index 000000000000..f2695b0848b4 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json @@ -0,0 +1,122 @@ +{ + "title": "Get KubeInventory - Node", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "node-aks-nodepool1-12345678-0", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/node-aks-nodepool1-12345678-0", + "name": "node-aks-nodepool1-12345678-0", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "Node", + "metadata": { + "name": "aks-nodepool1-12345678-0", + "uid": "a7b8c9d0-e1f2-3456-abcd-678901234567", + "resourceVersion": "6789012", + "creationTimestamp": "2026-01-10T07:00:00Z", + "labels": [ + { "name": "kubernetes.io/os", "value": "linux" }, + { "name": "kubernetes.io/arch", "value": "amd64" }, + { "name": "node.kubernetes.io/instance-type", "value": "Standard_D4s_v3" }, + { "name": "topology.kubernetes.io/zone", "value": "eastus-1" }, + { "name": "agentpool", "value": "nodepool1" } + ], + "annotations": [ + { "name": "node.alpha.kubernetes.io/ttl", "value": "0" }, + { "name": "volumes.kubernetes.io/controller-managed-attach-detach", "value": "true" } + ] + }, + "spec": { + "providerId": "azure:///subscriptions/subId1/resourceGroups/mc_rg1_clusterName1_eastus/providers/Microsoft.Compute/virtualMachines/aks-nodepool1-12345678-0", + "podCidr": "10.244.0.0/24", + "unschedulable": false, + "taints": [ + { + "key": "node.kubernetes.io/memory-pressure", + "effect": "PreferNoSchedule" + } + ] + }, + "status": { + "nodeAddresses": [ + { "type": "InternalIP", "address": "10.240.0.4" }, + { "type": "Hostname", "address": "aks-nodepool1-12345678-0" } + ], + "nodeInfo": { + "kernelVersion": "5.15.0-1057-azure", + "osImage": "Ubuntu 22.04.4 LTS", + "containerRuntimeVersion": "containerd://1.7.13", + "kubeletVersion": "v1.29.2", + "kubeProxyVersion": "v1.29.2", + "architecture": "amd64", + "operatingSystem": "linux" + }, + "nodeCapacity": { + "cpu": "4", + "memory": "16Gi", + "pods": "110", + "ephemeralStorage": "119Gi" + }, + "nodeAllocatable": { + "cpu": "3850m", + "memory": "14902Mi", + "pods": "110", + "ephemeralStorage": "109Gi" + }, + "volumesAttached": [ + { "name": "kubernetes-dynamic-pvc-a1b2c3d4", "devicePath": "/dev/sdc" }, + { "name": "kubernetes-dynamic-pvc-e5f6a7b8", "devicePath": "/dev/sdd" } + ], + "conditions": [ + { + "type": "MemoryPressure", + "status": "False", + "reason": "KubeletHasSufficientMemory", + "lastTransitionTime": "2026-01-10T07:01:00Z" + }, + { + "type": "DiskPressure", + "status": "False", + "reason": "KubeletHasNoDiskPressure", + "lastTransitionTime": "2026-01-10T07:01:00Z" + }, + { + "type": "PIDPressure", + "status": "False", + "reason": "KubeletHasSufficientPID", + "lastTransitionTime": "2026-01-10T07:01:00Z" + }, + { + "type": "Ready", + "status": "True", + "reason": "KubeletReady", + "message": "kubelet is posting ready status", + "lastTransitionTime": "2026-01-10T07:01:30Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json new file mode 100644 index 000000000000..06018502eada --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json @@ -0,0 +1,59 @@ +{ + "title": "Get KubeInventory - PersistentVolume", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "name": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "PersistentVolume", + "metadata": { + "name": "pvc-d0e1f2a3-b4c5-6789-defa-901234567890", + "uid": "e1f2a3b4-c5d6-7890-efab-012345678901", + "resourceVersion": "9123456", + "creationTimestamp": "2026-03-01T10:00:05Z", + "labels": [ + { "name": "failure-domain.beta.kubernetes.io/zone", "value": "eastus-1" } + ] + }, + "spec": { + "storageCapacity": "50Gi", + "accessModes": ["ReadWriteOnce"], + "reclaimPolicy": "Delete", + "storageClassName": "managed-premium", + "volumeMode": "Filesystem", + "claimRefNamespace": "default", + "boundVolumeName": "data-postgres-0", + "csiDriver": "disk.csi.azure.com", + "csiVolumeHandle": "/subscriptions/subId1/resourceGroups/mc_rg1_clusterName1_eastus/providers/Microsoft.Compute/disks/pvc-d0e1f2a3-b4c5-6789-defa-901234567890" + }, + "status": { + "phase": "Bound" + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json new file mode 100644 index 000000000000..c702bbecc94a --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json @@ -0,0 +1,60 @@ +{ + "title": "Get KubeInventory - PersistentVolumeClaim", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "persistentvolumeclaim-data-postgres-0-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/persistentvolumeclaim-data-postgres-0-default", + "name": "persistentvolumeclaim-data-postgres-0-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "PersistentVolumeClaim", + "metadata": { + "name": "data-postgres-0", + "namespaceName": "default", + "uid": "d0e1f2a3-b4c5-6789-defa-901234567890", + "resourceVersion": "9012345", + "creationTimestamp": "2026-03-01T10:00:05Z", + "labels": [ + { "name": "app", "value": "postgres" }, + { "name": "statefulset.kubernetes.io/pod-name", "value": "postgres-0" } + ] + }, + "spec": { + "accessModes": ["ReadWriteOnce"], + "storageClassName": "managed-premium", + "storageRequest": "50Gi", + "volumeMode": "Filesystem", + "boundVolumeName": "pvc-d0e1f2a3-b4c5-6789-defa-901234567890" + }, + "status": { + "phase": "Bound", + "pvcCapacity": "50Gi", + "pvcAccessModes": ["ReadWriteOnce"], + "conditions": [] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json new file mode 100644 index 000000000000..fc8b83064431 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json @@ -0,0 +1,67 @@ +{ + "title": "Get KubeInventory - PodDisruptionBudget", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "poddisruptionbudget-nginx-pdb-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/poddisruptionbudget-nginx-pdb-default", + "name": "poddisruptionbudget-nginx-pdb-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "policy/v1", + "kind": "PodDisruptionBudget", + "metadata": { + "name": "nginx-pdb", + "namespaceName": "default", + "uid": "f8a9b0c1-d2e3-4567-fabc-789012345678", + "resourceVersion": "1689012", + "creationTimestamp": "2026-04-21T09:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" } + ] + }, + "spec": { + "minAvailable": "2", + "serviceSelector": [ + { "name": "app", "value": "nginx" } + ] + }, + "status": { + "currentHealthy": 3, + "desiredHealthy": 2, + "disruptionsAllowed": 1, + "expectedPods": 3, + "conditions": [ + { + "type": "DisruptionAllowed", + "status": "True", + "reason": "SufficientPods", + "message": "3 healthy replicas found, disruption is allowed", + "lastTransitionTime": "2026-04-21T09:01:00Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json new file mode 100644 index 000000000000..470196b5af13 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json @@ -0,0 +1,92 @@ +{ + "title": "Get KubeInventory - ReplicaSet", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "replicaset-nginx-7d9f8c-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/replicaset-nginx-7d9f8c-default", + "name": "replicaset-nginx-7d9f8c-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "metadata": { + "name": "nginx-7d9f8c", + "namespaceName": "default", + "uid": "e4f5a6b7-c8d9-0123-efab-456789012345", + "resourceVersion": "4567890", + "generation": 1, + "creationTimestamp": "2026-04-15T09:00:10Z", + "labels": [ + { "name": "app", "value": "nginx" }, + { "name": "pod-template-hash", "value": "7d9f8c" } + ], + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "name": "nginx", + "uid": "b1c2d3e4-f5a6-7890-bcde-f12345678901", + "controller": true, + "blockOwnerDeletion": true + } + ] + }, + "spec": { + "replicas": 3, + "selector": [ + { "name": "app", "value": "nginx" }, + { "name": "pod-template-hash", "value": "7d9f8c" } + ], + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + } + } + ] + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "observedGeneration": 1, + "conditions": [ + { + "type": "ReplicaFailure", + "status": "False", + "lastTransitionTime": "2026-04-15T09:00:10Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json new file mode 100644 index 000000000000..d2d308f4332a --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json @@ -0,0 +1,58 @@ +{ + "title": "Get KubeInventory - Role", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "role-pod-reader-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/role-pod-reader-default", + "name": "role-pod-reader-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "Role", + "metadata": { + "name": "pod-reader", + "namespaceName": "default", + "uid": "c5d6e7f8-a9b0-1234-cdef-456789012345", + "resourceVersion": "1356789", + "creationTimestamp": "2026-01-20T14:00:00Z" + }, + "spec": { + "rbacRules": [ + { + "apiGroups": [""], + "resources": ["pods", "pods/log"], + "verbs": ["get", "list", "watch"] + }, + { + "apiGroups": ["apps"], + "resources": ["deployments", "replicasets"], + "verbs": ["get", "list"] + } + ] + }, + "status": {}, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-RoleBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-RoleBinding.json new file mode 100644 index 000000000000..01ac5def7af5 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-RoleBinding.json @@ -0,0 +1,59 @@ +{ + "title": "Get KubeInventory - RoleBinding", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "rolebinding-read-pods-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/rolebinding-read-pods-default", + "name": "rolebinding-read-pods-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "RoleBinding", + "metadata": { + "name": "read-pods", + "namespaceName": "default", + "uid": "d6e7f8a9-b0c1-2345-defa-567890123456", + "resourceVersion": "1467890", + "creationTimestamp": "2026-01-20T14:05:00Z" + }, + "spec": { + "rbacSubjects": [ + { + "kind": "ServiceAccount", + "name": "monitoring-sa", + "namespaceName": "monitoring" + }, + { + "kind": "User", + "name": "alice@example.com" + } + ], + "rbacRoleRefKind": "Role", + "rbacRoleRefName": "pod-reader" + }, + "status": {}, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json new file mode 100644 index 000000000000..3864418947aa --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json @@ -0,0 +1,95 @@ +{ + "title": "Get KubeInventory - Service", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "service-nginx-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/service-nginx-default", + "name": "service-nginx-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "nginx", + "namespaceName": "default", + "uid": "f5a6b7c8-d9e0-1234-fabc-567890123456", + "resourceVersion": "5678901", + "creationTimestamp": "2026-04-15T09:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" } + ] + }, + "spec": { + "serviceType": "LoadBalancer", + "clusterIp": "10.0.128.45", + "servicePorts": [ + { + "name": "http", + "port": 80, + "targetPort": "http", + "protocol": "TCP" + }, + { + "name": "https", + "port": 443, + "targetPort": "https", + "protocol": "TCP" + } + ], + "serviceSelector": [ + { "name": "app", "value": "nginx" } + ], + "externalTrafficPolicy": "Local", + "loadBalancerClass": "service.beta.kubernetes.io/azure-load-balancer-internal", + "loadBalancerIp": "52.183.12.45" + }, + "status": { + "loadBalancerIngress": ["52.183.12.45"], + "conditions": [ + { + "type": "Available", + "status": "True", + "lastTransitionTime": "2026-04-15T09:02:00Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "EnsuringLoadBalancer", + "age": "50d", + "from": "service-controller", + "message": "Ensuring load balancer" + }, + { + "type": "Normal", + "reason": "EnsuredLoadBalancer", + "age": "50d", + "from": "service-controller", + "message": "Ensured load balancer" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json new file mode 100644 index 000000000000..c4905fdf2d40 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json @@ -0,0 +1,57 @@ +{ + "title": "Get KubeInventory - ServiceAccount", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "serviceaccount-nginx-sa-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/serviceaccount-nginx-sa-default", + "name": "serviceaccount-nginx-sa-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "name": "nginx-sa", + "namespaceName": "default", + "uid": "f2a3b4c5-d6e7-8901-fabc-345678901234", + "resourceVersion": "9234567", + "creationTimestamp": "2026-01-15T08:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" }, + { "name": "app.kubernetes.io/managed-by", "value": "Helm" } + ], + "annotations": [ + { "name": "eks.amazonaws.com/role-arn", "value": "" }, + { "name": "meta.helm.sh/release-name", "value": "nginx" } + ] + }, + "spec": { + "automountServiceAccountToken": false + }, + "status": { + "conditions": [] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json new file mode 100644 index 000000000000..472100a470fb --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json @@ -0,0 +1,131 @@ +{ + "title": "Get KubeInventory - StatefulSet", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "statefulset-postgres-data", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/statefulset-postgres-data", + "name": "statefulset-postgres-data", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "StatefulSet", + "metadata": { + "name": "postgres", + "namespaceName": "data", + "uid": "c2d3e4f5-a6b7-8901-cdef-234567890123", + "resourceVersion": "7654321", + "generation": 2, + "creationTimestamp": "2026-03-10T08:00:00Z", + "labels": [ + { "name": "app", "value": "postgres" }, + { "name": "tier", "value": "database" } + ] + }, + "spec": { + "replicas": 3, + "serviceName": "postgres-headless", + "selector": [ + { "name": "app", "value": "postgres" } + ], + "strategyType": "RollingUpdate", + "podManagementPolicy": "OrderedReady", + "serviceAccountName": "postgres-sa", + "securityContext": { + "runAsUser": 999, + "runAsGroup": 999, + "fsGroup": 999, + "runAsNonRoot": true + }, + "volumes": [ + { "name": "config", "sourceType": "configMap", "source": "postgres-config" } + ], + "containers": [ + { + "name": "postgres", + "image": "postgres:15.4", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "postgres", "containerPort": 5432, "protocol": "TCP" } + ], + "env": [ + { "name": "POSTGRES_DB", "value": "appdb" } + ], + "envFrom": [ + { "secretRef": "postgres-credentials" } + ], + "resources": { + "requests": { "cpu": "500m", "memory": "1Gi" }, + "limits": { "cpu": "2", "memory": "4Gi" } + }, + "volumeMounts": [ + { "name": "data", "mountPath": "/var/lib/postgresql/data", "subPath": "postgres" }, + { "name": "config", "mountPath": "/etc/postgresql", "readOnly": true } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": false, + "privileged": false + } + } + ], + "volumeClaimTemplates": [ + { + "name": "data", + "accessModes": ["ReadWriteOnce"], + "storageClassName": "managed-premium", + "storageRequest": "20Gi", + "volumeMode": "Filesystem" + } + ] + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "currentReplicas": 3, + "updatedReplicas": 3, + "currentRevision": "postgres-7d4c9f6b8", + "updateRevision": "postgres-7d4c9f6b8", + "observedGeneration": 2, + "conditions": [ + { + "type": "Available", + "status": "True", + "reason": "MinimumReplicasAvailable", + "lastTransitionTime": "2026-03-10T08:05:00Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "SuccessfulCreate", + "age": "86d", + "from": "statefulset-controller", + "message": "create Pod postgres-0 in StatefulSet postgres successful" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json new file mode 100644 index 000000000000..911ebf69cbd1 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json @@ -0,0 +1,57 @@ +{ + "title": "Get KubeInventory - StorageClass", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "storageclass-managed-premium", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/storageclass-managed-premium", + "name": "storageclass-managed-premium", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "storage.k8s.io/v1", + "kind": "StorageClass", + "metadata": { + "name": "managed-premium", + "uid": "f2a3b4c5-d6e7-8901-fabc-123456789012", + "resourceVersion": "1023456", + "creationTimestamp": "2026-01-10T07:00:10Z", + "annotations": [ + { "name": "storageclass.kubernetes.io/is-default-class", "value": "false" } + ] + }, + "spec": { + "provisioner": "disk.csi.azure.com", + "reclaimPolicy": "Delete", + "volumeBindingMode": "WaitForFirstConsumer", + "allowVolumeExpansion": true, + "additionalFields": [ + { "name": "parameters.skuName", "value": "Premium_LRS" }, + { "name": "parameters.kind", "value": "Managed" }, + { "name": "parameters.cachingMode", "value": "ReadOnly" } + ] + }, + "status": {}, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json new file mode 100644 index 000000000000..01e8642160bd --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json @@ -0,0 +1,54 @@ +{ + "title": "Get KubeInventory - VolumeAttachment", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "name": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "storage.k8s.io/v1", + "kind": "VolumeAttachment", + "metadata": { + "name": "csi-azuredisk-pvc-d0e1f2a3-b4c5-6789-defa-901234567890", + "uid": "e1f2a3b4-c5d6-7890-efab-234567890123", + "resourceVersion": "9123456", + "creationTimestamp": "2026-03-01T10:00:10Z", + "labels": [ + { "name": "app.kubernetes.io/managed-by", "value": "disk.csi.azure.com" } + ] + }, + "spec": { + "attacherName": "disk.csi.azure.com", + "attachedVolumeName": "pvc-d0e1f2a3-b4c5-6789-defa-901234567890", + "nodeName": "aks-nodepool1-12345678-0" + }, + "status": { + "volumeAttached": true, + "conditions": [] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json index f1633a3e68b1..53623d74577f 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json @@ -67,11 +67,21 @@ "serviceAccountName": "nginx-sa", "dnsPolicy": "ClusterFirst", "terminationGracePeriodSeconds": 30, + "priorityClassName": "high-priority", + "nodeSelector": [ + { "name": "kubernetes.io/os", "value": "linux" }, + { "name": "agentpool", "value": "nodepool1" } + ], + "hostNetwork": false, + "hostPid": false, + "hostIpc": false, + "runtimeClassName": "containerd", "securityContext": { "runAsUser": 1000, "runAsGroup": 3000, "fsGroup": 2000, - "runAsNonRoot": true + "runAsNonRoot": true, + "seccompProfile": "RuntimeDefault" }, "tolerations": [ { @@ -107,6 +117,7 @@ { "name": "nginx", "image": "nginx:1.25.4", + "imagePullPolicy": "IfNotPresent", "ports": [ { "name": "http", @@ -129,6 +140,9 @@ "value": "2" } ], + "envFrom": [ + { "configMapRef": "nginx-common-config" } + ], "resources": { "requests": { "cpu": "100m", @@ -160,11 +174,23 @@ "readOnlyRootFilesystem": true, "runAsNonRoot": true, "runAsUser": 1000, + "privileged": false, + "seccompProfile": "RuntimeDefault", "capabilities": { "drop": [ "ALL" ] } + }, + "livenessProbe": { + "type": "HTTPGet", + "path": "/healthz", + "port": 8080 + }, + "readinessProbe": { + "type": "HTTPGet", + "path": "/readyz", + "port": 8080 } } ] @@ -172,9 +198,13 @@ "status": { "phase": "Running", "podIp": "10.244.1.42", + "podIps": ["10.244.1.42", "fd00::1:2a"], "hostIp": "10.240.0.4", + "hostIps": ["10.240.0.4"], "startTime": "2026-05-01T10:00:05Z", "qosClass": "Burstable", + "reason": "", + "initContainerStatuses": [], "conditions": [ { "type": "Initialized", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json index e2ca313a2a46..8f99ec417ffc 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json @@ -207,6 +207,84 @@ "attachedToExtension": "azure-kube-inventory" } } + , + { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", + "name": "deployment-nginx-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "nginx", + "namespaceName": "default", + "uid": "b1c2d3e4-f5a6-7890-bcde-f12345678901", + "resourceVersion": "2234567", + "generation": 3, + "creationTimestamp": "2026-04-15T09:00:00Z", + "labels": [ + { "name": "app", "value": "nginx" } + ] + }, + "spec": { + "replicas": 3, + "selector": [ + { "name": "app", "value": "nginx" } + ], + "strategyType": "RollingUpdate", + "maxUnavailable": "25%", + "maxSurge": "25%", + "containers": [ + { + "name": "nginx", + "image": "nginx:1.25.4", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "http", "containerPort": 80, "protocol": "TCP" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" }, + "limits": { "cpu": "500m", "memory": "512Mi" } + } + } + ] + }, + "status": { + "replicas": 3, + "readyReplicas": 3, + "availableReplicas": 3, + "updatedReplicas": 3, + "unavailableReplicas": 0, + "observedGeneration": 3, + "conditions": [ + { + "type": "Available", + "status": "True", + "reason": "MinimumReplicasAvailable", + "message": "Deployment has minimum availability.", + "lastTransitionTime": "2026-04-15T09:00:20Z" + }, + { + "type": "Progressing", + "status": "True", + "reason": "NewReplicaSetAvailable", + "message": "ReplicaSet has successfully progressed.", + "lastTransitionTime": "2026-04-15T09:00:20Z" + } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } ], "nextLink": null } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index ea6e8dcd5ceb..d4cb9387c47e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -177,12 +177,89 @@ "x-ms-examples": { "Get KubeInventory": { "$ref": "./examples/GetKubeInventory.json" + }, + "Get KubeInventory - CronJob": { + "$ref": "./examples/GetKubeInventory-CronJob.json" + }, + "Get KubeInventory - DaemonSet": { + "$ref": "./examples/GetKubeInventory-DaemonSet.json" + }, + "Get KubeInventory - Deployment": { + "$ref": "./examples/GetKubeInventory-Deployment.json" + }, + "Get KubeInventory - HorizontalPodAutoscaler": { + "$ref": "./examples/GetKubeInventory-HorizontalPodAutoscaler.json" + }, + "Get KubeInventory - Ingress": { + "$ref": "./examples/GetKubeInventory-Ingress.json" + }, + "Get KubeInventory - IngressClass": { + "$ref": "./examples/GetKubeInventory-IngressClass.json" + }, + "Get KubeInventory - Job": { + "$ref": "./examples/GetKubeInventory-Job.json" + }, + "Get KubeInventory - NetworkPolicy": { + "$ref": "./examples/GetKubeInventory-NetworkPolicy.json" + }, + "Get KubeInventory - Node": { + "$ref": "./examples/GetKubeInventory-Node.json" + }, + "Get KubeInventory - PersistentVolume": { + "$ref": "./examples/GetKubeInventory-PersistentVolume.json" + }, + "Get KubeInventory - PersistentVolumeClaim": { + "$ref": "./examples/GetKubeInventory-PersistentVolumeClaim.json" + }, + "Get KubeInventory - PodDisruptionBudget": { + "$ref": "./examples/GetKubeInventory-PodDisruptionBudget.json" + }, + "Get KubeInventory - ReplicaSet": { + "$ref": "./examples/GetKubeInventory-ReplicaSet.json" + }, + "Get KubeInventory - Role": { + "$ref": "./examples/GetKubeInventory-Role.json" + }, + "Get KubeInventory - RoleBinding": { + "$ref": "./examples/GetKubeInventory-RoleBinding.json" + }, + "Get KubeInventory - Service": { + "$ref": "./examples/GetKubeInventory-Service.json" + }, + "Get KubeInventory - ServiceAccount": { + "$ref": "./examples/GetKubeInventory-ServiceAccount.json" + }, + "Get KubeInventory - StatefulSet": { + "$ref": "./examples/GetKubeInventory-StatefulSet.json" + }, + "Get KubeInventory - StorageClass": { + "$ref": "./examples/GetKubeInventory-StorageClass.json" + }, + "Get KubeInventory - VolumeAttachment": { + "$ref": "./examples/GetKubeInventory-VolumeAttachment.json" } } } } }, "definitions": { + "AttachedVolume": { + "type": "object", + "description": "A volume attached to a Kubernetes Node by the attach/detach controller.", + "properties": { + "name": { + "type": "string", + "description": "Name of the attached volume (matches the PersistentVolume name)." + }, + "devicePath": { + "type": "string", + "description": "Device path on the node where the volume is attached (e.g., '/dev/sdc')." + } + }, + "required": [ + "name" + ] + }, "Capabilities": { "type": "object", "description": "Linux capability set to add to or drop from a container's default capabilities.", @@ -255,6 +332,25 @@ "containerPort" ] }, + "ContainerProbe": { + "type": "object", + "description": "Simplified health probe configuration for a container.\nCaptures the probe mechanism type and the primary target (path or port).\nDetailed timing parameters (initialDelaySeconds, periodSeconds, etc.) can be stored in additionalFields.", + "properties": { + "type": { + "type": "string", + "description": "Probe mechanism: 'HTTPGet', 'TCPSocket', 'Exec', or 'GRPC'." + }, + "path": { + "type": "string", + "description": "URL path for HTTPGet probes (e.g., '/healthz', '/readyz')." + }, + "port": { + "type": "integer", + "format": "int32", + "description": "Port number for HTTPGet or TCPSocket probes." + } + } + }, "ContainerResourceQuantity": { "type": "object", "description": "CPU and memory resource quantities for a container.\nValues use Kubernetes resource notation: CPU as millicores (e.g., '500m', '2')\nand memory as byte-unit strings (e.g., '256Mi', '1Gi').\nSee: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", @@ -291,6 +387,10 @@ "$ref": "#/definitions/Capabilities", "description": "Linux capability adjustments for this container." }, + "privileged": { + "type": "boolean", + "description": "When true, the container runs with full host privileges (root + all Linux capabilities)." + }, "readOnlyRootFilesystem": { "type": "boolean", "description": "Mount the container's root filesystem as read-only when true." @@ -312,6 +412,10 @@ "type": "integer", "format": "int64", "description": "GID to run the container process as." + }, + "seccompProfile": { + "type": "string", + "description": "Seccomp profile type applied to this container ('RuntimeDefault', 'Unconfined', or 'Localhost')." } } }, @@ -327,6 +431,10 @@ "type": "string", "description": "Container image reference (e.g., 'nginx:1.25')." }, + "imagePullPolicy": { + "type": "string", + "description": "Image pull policy for this container ('Always', 'IfNotPresent', or 'Never')." + }, "ports": { "type": "array", "description": "Ports to expose from the container.", @@ -347,6 +455,14 @@ "name" ] }, + "envFrom": { + "type": "array", + "description": "Sources that populate environment variables in bulk from ConfigMaps or Secrets.", + "items": { + "$ref": "#/definitions/EnvFromSource" + }, + "x-ms-identifiers": [] + }, "resources": { "$ref": "#/definitions/ContainerResourceRequirements", "description": "Compute resource requests and limits." @@ -378,6 +494,14 @@ "securityContext": { "$ref": "#/definitions/ContainerSecurityContext", "description": "Security context applied to this container." + }, + "livenessProbe": { + "$ref": "#/definitions/ContainerProbe", + "description": "Liveness probe that determines when to restart the container." + }, + "readinessProbe": { + "$ref": "#/definitions/ContainerProbe", + "description": "Readiness probe that determines when the container is ready to accept traffic." } }, "required": [ @@ -509,6 +633,24 @@ "restartCount" ] }, + "EnvFromSource": { + "type": "object", + "description": "A source for bulk-importing environment variables into a container from a ConfigMap or Secret.", + "properties": { + "configMapRef": { + "type": "string", + "description": "Name of the ConfigMap whose keys are imported as environment variables." + }, + "secretRef": { + "type": "string", + "description": "Name of the Secret whose keys are imported as environment variables." + }, + "prefix": { + "type": "string", + "description": "Optional prefix prepended to each imported environment variable name." + } + } + }, "EnvVar": { "type": "object", "description": "An environment variable set in a container.", @@ -526,6 +668,67 @@ "name" ] }, + "IngressPath": { + "type": "object", + "description": "An HTTP path rule within an Ingress host entry, mapping a URL path to a backend Service.", + "properties": { + "path": { + "type": "string", + "description": "URL path to match (e.g., '/api', '/')." + }, + "pathType": { + "type": "string", + "description": "Path matching semantics ('Exact', 'Prefix', or 'ImplementationSpecific')." + }, + "serviceName": { + "type": "string", + "description": "Name of the backend Service receiving matched traffic." + }, + "servicePort": { + "type": "string", + "description": "Port of the backend Service (numeric string or named port)." + } + }, + "required": [ + "serviceName", + "servicePort" + ] + }, + "IngressRule": { + "type": "object", + "description": "A host-level routing rule in an Ingress resource.", + "properties": { + "host": { + "type": "string", + "description": "Fully qualified domain name or wildcard host (e.g., 'api.example.com', '*.example.com')." + }, + "paths": { + "type": "array", + "description": "HTTP path rules mapping URL paths to backend Services.", + "items": { + "$ref": "#/definitions/IngressPath" + }, + "x-ms-identifiers": [] + } + } + }, + "IngressTls": { + "type": "object", + "description": "TLS configuration entry for an Ingress resource.", + "properties": { + "hosts": { + "type": "array", + "description": "Hostnames covered by this TLS certificate.", + "items": { + "type": "string" + } + }, + "secretName": { + "type": "string", + "description": "Name of the Secret containing the TLS certificate and private key." + } + } + }, "KubeInventory": { "type": "object", "description": "Singleton container resource grouping cluster inventory reports.", @@ -835,6 +1038,47 @@ "format": "int64", "description": "Grace period in seconds before forcibly terminating the pod on deletion." }, + "nodeSelector": { + "type": "array", + "description": "Node label selector constraining which nodes this pod may be scheduled on.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources.", + "items": { + "$ref": "#/definitions/KubernetesLabel" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "priorityClassName": { + "type": "string", + "description": "Name of the PriorityClass governing scheduling priority and preemption for this pod.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources." + }, + "hostNetwork": { + "type": "boolean", + "description": "When true, the pod uses the host network namespace (disables pod network isolation).\nPopulated for Pod resources." + }, + "hostPid": { + "type": "boolean", + "description": "When true, the pod shares the host PID namespace. Populated for Pod resources." + }, + "hostIpc": { + "type": "boolean", + "description": "When true, the pod shares the host IPC namespace. Populated for Pod resources." + }, + "runtimeClassName": { + "type": "string", + "description": "Name of the RuntimeClass for sandbox or specialized container runtimes\n(e.g., 'gvisor', 'kata-containers'). Populated for Pod resources." + }, + "imagePullSecrets": { + "type": "array", + "description": "Names of Secrets used to authenticate image pulls from private registries.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources.", + "items": { + "type": "string" + } + }, + "podOs": { + "type": "string", + "description": "Operating system of the containers ('linux' or 'windows').\nPopulated for Pod resources." + }, "replicas": { "type": "integer", "format": "int32", @@ -844,6 +1088,46 @@ "type": "string", "description": "Headless service name governing StatefulSet pod network identity.\nPopulated for StatefulSet resources." }, + "selector": { + "type": "array", + "description": "Label selector identifying which pods are managed by this workload.\nPopulated for Deployment, StatefulSet, DaemonSet, and ReplicaSet resources.", + "items": { + "$ref": "#/definitions/KubernetesLabel" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "strategyType": { + "type": "string", + "description": "Rollout strategy type.\n'RollingUpdate' or 'Recreate' for Deployment;\n'RollingUpdate' or 'OnDelete' for StatefulSet and DaemonSet." + }, + "maxUnavailable": { + "type": "string", + "description": "Maximum number of pods that can be unavailable during a rolling update\n(absolute number or percentage string, e.g., '25%').\nPopulated for Deployment and DaemonSet resources." + }, + "maxSurge": { + "type": "string", + "description": "Maximum number of pods that can be created above the desired count during a rolling update\n(absolute number or percentage string, e.g., '25%').\nPopulated for Deployment resources." + }, + "paused": { + "type": "boolean", + "description": "When true, the Deployment rollout is paused. Populated for Deployment resources." + }, + "podManagementPolicy": { + "type": "string", + "description": "Pod creation and deletion ordering policy for a StatefulSet\n('OrderedReady' for sequential or 'Parallel' for simultaneous).\nPopulated for StatefulSet resources." + }, + "volumeClaimTemplates": { + "type": "array", + "description": "PVC templates stamped out per StatefulSet replica to provide stable per-pod storage.\nPopulated for StatefulSet resources.", + "items": { + "$ref": "#/definitions/VolumeClaimTemplate" + }, + "x-ms-identifiers": [ + "name" + ] + }, "serviceType": { "type": "string", "description": "How the service is exposed (e.g., 'ClusterIP', 'NodePort', 'LoadBalancer').\nPopulated for Service resources." @@ -852,6 +1136,49 @@ "type": "string", "description": "Cluster-internal IP assigned to the service. Populated for Service resources." }, + "servicePorts": { + "type": "array", + "description": "Ports exposed by the Service. Populated for Service resources.", + "items": { + "$ref": "#/definitions/ServicePort" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "serviceSelector": { + "type": "array", + "description": "Label selector routing traffic to pods backing this Service.\nPopulated for Service resources.", + "items": { + "$ref": "#/definitions/KubernetesLabel" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "externalIps": { + "type": "array", + "description": "External IP addresses accepted by cluster nodes for this Service. Populated for Service resources.", + "items": { + "type": "string" + } + }, + "externalName": { + "type": "string", + "description": "DNS CNAME alias target for ExternalName Services. Populated for Service resources." + }, + "externalTrafficPolicy": { + "type": "string", + "description": "Traffic routing policy for externally-facing addresses ('Cluster' or 'Local').\nPopulated for Service resources." + }, + "loadBalancerClass": { + "type": "string", + "description": "Load balancer implementation class identifier. Populated for LoadBalancer Service resources." + }, + "loadBalancerIp": { + "type": "string", + "description": "Static IP address requested from the cloud provider for a LoadBalancer Service.\nDeprecated in Kubernetes 1.24 in favor of spec.loadBalancerIP on the Service.\nPopulated for LoadBalancer Service resources." + }, "serviceAccountName": { "type": "string", "description": "Name of the ServiceAccount the pod runs as.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources." @@ -882,91 +1209,554 @@ "$ref": "#/definitions/PodSecurityContext", "description": "Security context applied at the pod level.\nPopulated for Pod, Deployment, StatefulSet, and DaemonSet resources." }, - "additionalFields": { - "type": "array", - "description": "Additional resource-specific fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", - "items": { - "$ref": "#/definitions/KubernetesGenericField" - }, - "x-ms-identifiers": [ - "name" - ] - } - } - }, - "KubernetesResourceStatus": { - "type": "object", - "description": "Observed state (status) of a Kubernetes resource, written by the controller.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. Fields not covered by any typed property can be placed in additionalFields.", - "properties": { - "conditions": { - "type": "array", - "description": "Conditions reported by the controller managing this resource.", - "items": { - "$ref": "#/definitions/KubernetesCondition" - }, - "x-ms-identifiers": [ - "type" - ] - }, - "phase": { - "type": "string", - "description": "High-level lifecycle phase of the resource.\nExamples: 'Running' / 'Pending' / 'Succeeded' / 'Failed' for Pod;\n'Bound' / 'Pending' / 'Lost' for PersistentVolumeClaim;\n'Active' / 'Terminating' for Namespace." - }, - "message": { - "type": "string", - "description": "Human-readable message summarizing the resource state." + "completions": { + "type": "integer", + "format": "int32", + "description": "Total successful pod completions required for the Job to succeed.\nPopulated for Job resources." }, - "readyReplicas": { + "parallelism": { "type": "integer", "format": "int32", - "description": "Number of pods ready to serve requests. Populated for Deployment, StatefulSet, DaemonSet." + "description": "Maximum number of pods running concurrently for a Job.\nPopulated for Job resources." }, - "availableReplicas": { + "backoffLimit": { "type": "integer", "format": "int32", - "description": "Number of pods available for at least minReadySeconds. Populated for Deployment, DaemonSet." + "description": "Number of retries before marking the Job as failed.\nPopulated for Job resources." }, - "podIp": { + "schedule": { "type": "string", - "description": "IP address allocated to the pod within the cluster. Populated for Pod resources." + "description": "Cron schedule expression.\nPopulated for CronJob resources." }, - "hostIp": { + "concurrencyPolicy": { "type": "string", - "description": "IP address of the node hosting the pod. Populated for Pod resources." + "description": "Concurrency policy for simultaneous CronJob runs ('Allow', 'Forbid', or 'Replace').\nPopulated for CronJob resources." }, - "startTime": { + "suspend": { + "type": "boolean", + "description": "When true, future executions are suspended.\nPopulated for CronJob and Job resources." + }, + "activeDeadlineSeconds": { + "type": "integer", + "format": "int32", + "description": "Maximum duration in seconds before the Job is terminated regardless of its success.\nPopulated for Job resources." + }, + "completionMode": { "type": "string", - "format": "date-time", - "description": "UTC timestamp when the pod was accepted by the scheduler. Populated for Pod resources." + "description": "Completion tracking mode for Job pods: 'NonIndexed' (default) or 'Indexed'.\nPopulated for Job resources." }, - "containerStatuses": { - "type": "array", - "description": "Runtime status of each container in the pod.\nPopulated for Pod resources.", - "items": { - "$ref": "#/definitions/ContainerStatus" - }, - "x-ms-identifiers": [ - "name" - ] + "ttlSecondsAfterFinished": { + "type": "integer", + "format": "int32", + "description": "Seconds after Job completion before the Job and its pods are deleted automatically.\nPopulated for Job resources." }, - "qosClass": { + "timeZone": { "type": "string", - "description": "QoS class assigned by Kubernetes based on resource requests and limits.\nOne of 'Guaranteed', 'Burstable', or 'BestEffort'. Populated for Pod resources." + "description": "IANA time zone name for CronJob scheduling (e.g., 'America/New_York', 'UTC').\nPopulated for CronJob resources." }, - "observedGeneration": { + "startingDeadlineSeconds": { "type": "integer", - "format": "int64", - "description": "Most recent generation observed by the controller.\nPopulated for Deployment, StatefulSet, DaemonSet, and Pod resources." + "format": "int32", + "description": "Deadline in seconds for a CronJob run to start if missed; missed runs are ignored beyond this window.\nPopulated for CronJob resources." }, - "additionalFields": { + "accessModes": { "type": "array", - "description": "Additional resource-specific status fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", + "description": "Storage access modes requested or granted\n(e.g., 'ReadWriteOnce', 'ReadOnlyMany', 'ReadWriteMany').\nPopulated for PersistentVolumeClaim and PersistentVolume resources.", "items": { - "$ref": "#/definitions/KubernetesGenericField" - }, - "x-ms-identifiers": [ - "name" - ] + "type": "string" + } + }, + "storageClassName": { + "type": "string", + "description": "Name of the StorageClass for dynamic provisioning or PVC-to-PV binding.\nPopulated for PVC, PV, and StorageClass resources." + }, + "storageRequest": { + "type": "string", + "description": "Storage quantity requested by a PVC (e.g., '10Gi').\nPopulated for PersistentVolumeClaim resources." + }, + "storageCapacity": { + "type": "string", + "description": "Total storage capacity of a PV (e.g., '100Gi').\nPopulated for PersistentVolume resources." + }, + "reclaimPolicy": { + "type": "string", + "description": "Reclaim policy for a PV after its claim is released ('Retain', 'Delete', or 'Recycle').\nPopulated for PersistentVolume and StorageClass resources." + }, + "volumeMode": { + "type": "string", + "description": "Volume mode describing how the volume is used ('Filesystem' or 'Block').\nPopulated for PVC and PV resources." + }, + "boundVolumeName": { + "type": "string", + "description": "For a PVC: the name of the PV it is bound to.\nFor a PV: the name of the PVC bound to it." + }, + "claimRefNamespace": { + "type": "string", + "description": "Namespace of the PVC bound to a PV (populated in PV claimRef).\nPopulated for PersistentVolume resources." + }, + "csiDriver": { + "type": "string", + "description": "CSI driver name managing this PersistentVolume (e.g., 'disk.csi.azure.com').\nPopulated for PersistentVolume resources backed by a CSI driver." + }, + "csiVolumeHandle": { + "type": "string", + "description": "Unique volume handle assigned by the CSI driver.\nPopulated for PersistentVolume resources backed by a CSI driver." + }, + "provisioner": { + "type": "string", + "description": "CSI driver (provisioner) name for a StorageClass (e.g., 'disk.csi.azure.com').\nPopulated for StorageClass resources." + }, + "volumeBindingMode": { + "type": "string", + "description": "When to bind a PV to a PVC: 'Immediate' binds on creation;\n'WaitForFirstConsumer' delays until a pod claims the PVC.\nPopulated for StorageClass resources." + }, + "allowVolumeExpansion": { + "type": "boolean", + "description": "When true, PVCs using this StorageClass may be expanded after provisioning.\nPopulated for StorageClass resources." + }, + "secretType": { + "type": "string", + "description": "Kubernetes Secret type (e.g., 'Opaque', 'kubernetes.io/tls', 'kubernetes.io/service-account-token').\nPopulated for Secret resources." + }, + "automountServiceAccountToken": { + "type": "boolean", + "description": "When false, prevents the default Kubernetes service account token from being\nauto-mounted into pods running as this ServiceAccount.\nPopulated for ServiceAccount resources." + }, + "attacherName": { + "type": "string", + "description": "Name of the CSI driver that should attach/detach the volume (e.g., 'disk.csi.azure.com').\nPopulated for VolumeAttachment resources." + }, + "attachedVolumeName": { + "type": "string", + "description": "Name of the PersistentVolume being attached.\nPopulated for VolumeAttachment resources." + }, + "ingressClassName": { + "type": "string", + "description": "Name of the IngressClass that governs this Ingress resource.\nPopulated for Ingress resources." + }, + "ingressRules": { + "type": "array", + "description": "Routing rules mapping hostnames and URL paths to backend Services.\nPopulated for Ingress resources.", + "items": { + "$ref": "#/definitions/IngressRule" + }, + "x-ms-identifiers": [] + }, + "ingressTls": { + "type": "array", + "description": "TLS termination configuration for Ingress resources.\nPopulated for Ingress resources.", + "items": { + "$ref": "#/definitions/IngressTls" + }, + "x-ms-identifiers": [] + }, + "defaultBackendServiceName": { + "type": "string", + "description": "Backend Service name to route traffic when no rule matches.\nPopulated for Ingress resources." + }, + "defaultBackendServicePort": { + "type": "string", + "description": "Backend Service port to route traffic when no rule matches (number or named port).\nPopulated for Ingress resources." + }, + "ingressController": { + "type": "string", + "description": "Controller class reference for an IngressClass (e.g., 'nginx.ingress.kubernetes.io/controller').\nPopulated for IngressClass resources." + }, + "podSelectorLabels": { + "type": "array", + "description": "Label selector identifying the pods this NetworkPolicy applies to.\nPopulated for NetworkPolicy resources.", + "items": { + "$ref": "#/definitions/KubernetesLabel" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "networkPolicyTypes": { + "type": "array", + "description": "Policy directions enforced ('Ingress', 'Egress', or both).\nPopulated for NetworkPolicy resources.", + "items": { + "type": "string" + } + }, + "rbacRules": { + "type": "array", + "description": "RBAC permission rules granting access to Kubernetes API resources.\nPopulated for Role and ClusterRole resources.", + "items": { + "$ref": "#/definitions/PolicyRule" + }, + "x-ms-identifiers": [] + }, + "rbacSubjects": { + "type": "array", + "description": "Subjects (users, groups, service accounts) granted permissions by this binding.\nPopulated for RoleBinding and ClusterRoleBinding resources.", + "items": { + "$ref": "#/definitions/RbacSubject" + }, + "x-ms-identifiers": [] + }, + "rbacRoleRefKind": { + "type": "string", + "description": "Kind of the role referenced by a binding ('Role' or 'ClusterRole').\nPopulated for RoleBinding and ClusterRoleBinding resources." + }, + "rbacRoleRefName": { + "type": "string", + "description": "Name of the role referenced by a binding.\nPopulated for RoleBinding and ClusterRoleBinding resources." + }, + "scaleTargetRefKind": { + "type": "string", + "description": "Kind of the resource being autoscaled (e.g., 'Deployment', 'StatefulSet').\nPopulated for HorizontalPodAutoscaler resources." + }, + "scaleTargetRefName": { + "type": "string", + "description": "Name of the resource being autoscaled.\nPopulated for HorizontalPodAutoscaler resources." + }, + "minReplicas": { + "type": "integer", + "format": "int32", + "description": "Minimum replica count for autoscaling.\nPopulated for HorizontalPodAutoscaler resources." + }, + "maxReplicas": { + "type": "integer", + "format": "int32", + "description": "Maximum replica count for autoscaling.\nPopulated for HorizontalPodAutoscaler resources." + }, + "minAvailable": { + "type": "string", + "description": "Minimum number of pods that must remain available during voluntary disruptions\n(absolute number or percentage string, e.g., '2', '50%').\nPopulated for PodDisruptionBudget resources." + }, + "maxUnavailablePods": { + "type": "string", + "description": "Maximum number of pods that may be simultaneously unavailable during voluntary disruptions.\nPopulated for PodDisruptionBudget resources." + }, + "priorityValue": { + "type": "integer", + "format": "int32", + "description": "Numeric scheduling priority value for a PriorityClass.\nPopulated for PriorityClass resources." + }, + "globalDefault": { + "type": "boolean", + "description": "When true, this PriorityClass is the cluster default for pods without an explicit priorityClassName.\nPopulated for PriorityClass resources." + }, + "preemptionPolicy": { + "type": "string", + "description": "Preemption policy for pods with this priority class when system resources are scarce\n('PreemptLowerPriority' or 'Never').\nPopulated for PriorityClass resources." + }, + "taints": { + "type": "array", + "description": "Taints applied to the node, repelling pods that lack a matching toleration.\nPopulated for Node resources.", + "items": { + "$ref": "#/definitions/NodeTaint" + }, + "x-ms-identifiers": [] + }, + "unschedulable": { + "type": "boolean", + "description": "When true, the node is cordoned and will not accept new pod scheduling.\nPopulated for Node resources." + }, + "providerId": { + "type": "string", + "description": "Cloud provider identifier for the node\n(e.g., 'azure:///subscriptions/.../virtualMachines/vm-0').\nPopulated for Node resources." + }, + "podCidr": { + "type": "string", + "description": "IP range assigned to pods running on this node.\nPopulated for Node resources." + }, + "additionalFields": { + "type": "array", + "description": "Additional resource-specific fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", + "items": { + "$ref": "#/definitions/KubernetesGenericField" + }, + "x-ms-identifiers": [ + "name" + ] + } + } + }, + "KubernetesResourceStatus": { + "type": "object", + "description": "Observed state (status) of a Kubernetes resource, written by the controller.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. Fields not covered by any typed property can be placed in additionalFields.", + "properties": { + "conditions": { + "type": "array", + "description": "Conditions reported by the controller managing this resource.", + "items": { + "$ref": "#/definitions/KubernetesCondition" + }, + "x-ms-identifiers": [ + "type" + ] + }, + "phase": { + "type": "string", + "description": "High-level lifecycle phase of the resource.\nExamples: 'Running' / 'Pending' / 'Succeeded' / 'Failed' for Pod;\n'Bound' / 'Pending' / 'Lost' for PersistentVolumeClaim;\n'Active' / 'Terminating' for Namespace." + }, + "message": { + "type": "string", + "description": "Human-readable message summarizing the resource state." + }, + "replicas": { + "type": "integer", + "format": "int32", + "description": "Total non-terminating pods targeted by this workload. Populated for Deployment, StatefulSet, ReplicaSet." + }, + "readyReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of pods ready to serve requests. Populated for Deployment, StatefulSet, DaemonSet." + }, + "availableReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of pods available for at least minReadySeconds. Populated for Deployment, DaemonSet, StatefulSet." + }, + "updatedReplicas": { + "type": "integer", + "format": "int32", + "description": "Pods running the current (desired) template spec. Populated for Deployment, StatefulSet, DaemonSet." + }, + "unavailableReplicas": { + "type": "integer", + "format": "int32", + "description": "Pods required but not yet available. Populated for Deployment resources." + }, + "currentReplicas": { + "type": "integer", + "format": "int32", + "description": "Pods running the previous revision (before update completes).\nPopulated for StatefulSet resources." + }, + "currentRevision": { + "type": "string", + "description": "Name of the StatefulSet revision corresponding to currentReplicas.\nPopulated for StatefulSet resources." + }, + "updateRevision": { + "type": "string", + "description": "Name of the StatefulSet revision applied to updatedReplicas.\nPopulated for StatefulSet resources." + }, + "desiredReplicas": { + "type": "integer", + "format": "int32", + "description": "Desired replica count calculated by the HorizontalPodAutoscaler.\nPopulated for HorizontalPodAutoscaler resources." + }, + "terminatingReplicas": { + "type": "integer", + "format": "int32", + "description": "Pods that are terminating but not yet removed from the endpoints.\nPopulated for Deployment and ReplicaSet resources." + }, + "desiredNumberScheduled": { + "type": "integer", + "format": "int32", + "description": "Total nodes that should run the daemon pod. Populated for DaemonSet resources." + }, + "currentNumberScheduled": { + "type": "integer", + "format": "int32", + "description": "Nodes running at least one daemon pod. Populated for DaemonSet resources." + }, + "numberReady": { + "type": "integer", + "format": "int32", + "description": "Nodes with a Ready daemon pod. Populated for DaemonSet resources." + }, + "numberMisscheduled": { + "type": "integer", + "format": "int32", + "description": "Nodes running the daemon pod that should not be running it.\nPopulated for DaemonSet resources." + }, + "numberUnavailable": { + "type": "integer", + "format": "int32", + "description": "Nodes missing an available daemon pod. Populated for DaemonSet resources." + }, + "podIp": { + "type": "string", + "description": "IP address allocated to the pod within the cluster. Populated for Pod resources." + }, + "podIps": { + "type": "array", + "description": "Additional pod IPs assigned in multi-network or dual-stack clusters. Populated for Pod resources.", + "items": { + "type": "string" + } + }, + "hostIp": { + "type": "string", + "description": "IP address of the node hosting the pod. Populated for Pod resources." + }, + "hostIps": { + "type": "array", + "description": "Additional host IPs for dual-stack nodes. Populated for Pod resources.", + "items": { + "type": "string" + } + }, + "startTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the pod was accepted by the scheduler. Populated for Pod resources." + }, + "containerStatuses": { + "type": "array", + "description": "Runtime status of each container in the pod.\nPopulated for Pod resources.", + "items": { + "$ref": "#/definitions/ContainerStatus" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "initContainerStatuses": { + "type": "array", + "description": "Runtime status of each init container in the pod.\nPopulated for Pod resources.", + "items": { + "$ref": "#/definitions/ContainerStatus" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "qosClass": { + "type": "string", + "description": "QoS class assigned by Kubernetes based on resource requests and limits.\nOne of 'Guaranteed', 'Burstable', or 'BestEffort'. Populated for Pod resources." + }, + "reason": { + "type": "string", + "description": "Brief CamelCase reason for the pod's current state (e.g., 'Evicted', 'OOMKilled').\nPopulated for Pod resources." + }, + "observedGeneration": { + "type": "integer", + "format": "int64", + "description": "Most recent generation observed by the controller.\nPopulated for Deployment, StatefulSet, DaemonSet, and Pod resources." + }, + "activeJobCount": { + "type": "integer", + "format": "int32", + "description": "Number of currently active (running or pending) pods. Populated for Job resources." + }, + "succeededJobCount": { + "type": "integer", + "format": "int32", + "description": "Number of pods that completed successfully. Populated for Job resources." + }, + "failedJobCount": { + "type": "integer", + "format": "int32", + "description": "Number of pods that failed. Populated for Job resources." + }, + "readyPods": { + "type": "integer", + "format": "int32", + "description": "Number of pods in ready state for a Job. Populated for Job resources." + }, + "jobStartTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the Job started executing. Populated for Job resources." + }, + "jobCompletionTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the Job completed successfully. Populated for Job resources." + }, + "lastScheduleTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the CronJob last successfully scheduled a Job." + }, + "lastSuccessfulTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp when the last Job triggered by this CronJob completed successfully." + }, + "loadBalancerIngress": { + "type": "array", + "description": "External IP addresses or hostnames assigned to LoadBalancer Services or Ingress resources.\nPopulated for Service (type LoadBalancer) and Ingress resources.", + "items": { + "type": "string" + } + }, + "lastScaleTime": { + "type": "string", + "format": "date-time", + "description": "UTC timestamp of the most recent scaling event triggered by the HPA.\nPopulated for HorizontalPodAutoscaler resources." + }, + "nodeAddresses": { + "type": "array", + "description": "Network addresses of the node (InternalIP, ExternalIP, Hostname).\nPopulated for Node resources.", + "items": { + "$ref": "#/definitions/NodeAddress" + }, + "x-ms-identifiers": [ + "address" + ] + }, + "nodeInfo": { + "$ref": "#/definitions/NodeSystemInfo", + "description": "Operating system and runtime information for the node.\nPopulated for Node resources." + }, + "nodeCapacity": { + "$ref": "#/definitions/NodeResourceMap", + "description": "Total hardware resources of the node (cpu, memory, pods, ephemeral-storage).\nPopulated for Node resources." + }, + "nodeAllocatable": { + "$ref": "#/definitions/NodeResourceMap", + "description": "Resources available for scheduling after system reservation.\nPopulated for Node resources." + }, + "volumesAttached": { + "type": "array", + "description": "Volumes that have been successfully attached to the node by the attach/detach controller.\nPopulated for Node resources.", + "items": { + "$ref": "#/definitions/AttachedVolume" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "currentHealthy": { + "type": "integer", + "format": "int32", + "description": "Currently healthy (Ready) pods counted by the PodDisruptionBudget." + }, + "desiredHealthy": { + "type": "integer", + "format": "int32", + "description": "Minimum healthy pods required by the PodDisruptionBudget." + }, + "disruptionsAllowed": { + "type": "integer", + "format": "int32", + "description": "Number of pod disruptions currently allowed by the PodDisruptionBudget." + }, + "expectedPods": { + "type": "integer", + "format": "int32", + "description": "Total number of pods counted by the PodDisruptionBudget (ready + not ready)." + }, + "pvcCapacity": { + "type": "string", + "description": "Actual provisioned storage capacity for the PVC after binding (e.g., '10Gi').\nPopulated for PersistentVolumeClaim resources." + }, + "pvcAccessModes": { + "type": "array", + "description": "Access modes granted to the PVC after it is bound to a PV.\nPopulated for PersistentVolumeClaim resources.", + "items": { + "type": "string" + } + }, + "volumeAttached": { + "type": "boolean", + "description": "When true, the volume is successfully attached to the target node.\nPopulated for VolumeAttachment resources." + }, + "additionalFields": { + "type": "array", + "description": "Additional resource-specific status fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", + "items": { + "$ref": "#/definitions/KubernetesGenericField" + }, + "x-ms-identifiers": [ + "name" + ] } } }, @@ -1000,6 +1790,132 @@ ] } }, + "NodeAddress": { + "type": "object", + "description": "A network address associated with a Kubernetes Node.", + "properties": { + "type": { + "type": "string", + "description": "Address type (e.g., 'InternalIP', 'ExternalIP', 'Hostname')." + }, + "address": { + "type": "string", + "description": "The address value (IP address or hostname)." + } + }, + "required": [ + "type", + "address" + ] + }, + "NodeResourceMap": { + "type": "object", + "description": "Resource quantities reported for a Kubernetes Node (capacity or allocatable).", + "properties": { + "cpu": { + "type": "string", + "description": "CPU quantity (e.g., '4', '3850m')." + }, + "memory": { + "type": "string", + "description": "Memory quantity (e.g., '16Gi', '14902Mi')." + }, + "pods": { + "type": "string", + "description": "Maximum number of pods the node supports." + }, + "ephemeralStorage": { + "type": "string", + "description": "Ephemeral storage quantity (e.g., '119Gi')." + } + } + }, + "NodeSystemInfo": { + "type": "object", + "description": "Operating system and runtime information reported by the kubelet for a Node.", + "properties": { + "kernelVersion": { + "type": "string", + "description": "Kernel version of the node OS (e.g., '5.15.0-1041-azure')." + }, + "osImage": { + "type": "string", + "description": "Human-readable OS image string (e.g., 'Ubuntu 22.04.3 LTS')." + }, + "containerRuntimeVersion": { + "type": "string", + "description": "Container runtime name and version (e.g., 'containerd://1.7.2')." + }, + "kubeletVersion": { + "type": "string", + "description": "Kubelet binary version running on the node (e.g., 'v1.29.2')." + }, + "kubeProxyVersion": { + "type": "string", + "description": "kube-proxy version running on the node." + }, + "architecture": { + "type": "string", + "description": "CPU architecture of the node (e.g., 'amd64', 'arm64')." + }, + "operatingSystem": { + "type": "string", + "description": "Operating system family ('linux' or 'windows')." + } + } + }, + "NodeTaint": { + "type": "object", + "description": "A taint applied to a Kubernetes Node that repels pods without a matching toleration.", + "properties": { + "key": { + "type": "string", + "description": "Taint key (e.g., 'node.kubernetes.io/not-ready')." + }, + "value": { + "type": "string", + "description": "Taint value matched by tolerations using the 'Equal' operator." + }, + "effect": { + "$ref": "#/definitions/NodeTaintEffect", + "description": "Effect applied to non-tolerating pods." + } + }, + "required": [ + "key", + "effect" + ] + }, + "NodeTaintEffect": { + "type": "string", + "description": "Effect applied to pods that do not tolerate a node taint.", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ], + "x-ms-enum": { + "name": "NodeTaintEffect", + "modelAsString": true, + "values": [ + { + "name": "NoSchedule", + "value": "NoSchedule", + "description": "New pods will not be scheduled on the tainted node." + }, + { + "name": "PreferNoSchedule", + "value": "PreferNoSchedule", + "description": "The scheduler tries to avoid placing new pods on the tainted node." + }, + { + "name": "NoExecute", + "value": "NoExecute", + "description": "Existing pods without a matching toleration are evicted from the tainted node." + } + ] + } + }, "OwnerReference": { "type": "object", "description": "A reference from a Kubernetes object to its owner (e.g., a ReplicaSet owning a Pod).", @@ -1066,9 +1982,107 @@ "type": "integer", "format": "int64" } + }, + "seccompProfile": { + "type": "string", + "description": "Seccomp profile type applied to all containers ('RuntimeDefault', 'Unconfined', or 'Localhost')." } } }, + "PolicyRule": { + "type": "object", + "description": "A single RBAC permission rule granting verbs on Kubernetes API resources.", + "properties": { + "apiGroups": { + "type": "array", + "description": "API groups the rule applies to (use '' for the core group).", + "items": { + "type": "string" + } + }, + "resources": { + "type": "array", + "description": "Resource types the rule applies to (e.g., 'pods', 'deployments', 'secrets').", + "items": { + "type": "string" + } + }, + "verbs": { + "type": "array", + "description": "Actions permitted (e.g., 'get', 'list', 'watch', 'create', 'update', 'patch', 'delete').", + "items": { + "type": "string" + } + }, + "resourceNames": { + "type": "array", + "description": "Specific resource names this rule applies to. Empty means all instances.", + "items": { + "type": "string" + } + } + }, + "required": [ + "verbs" + ] + }, + "RbacSubject": { + "type": "object", + "description": "A subject (user, group, or service account) in a RoleBinding or ClusterRoleBinding.", + "properties": { + "kind": { + "type": "string", + "description": "Kind of the subject: 'User', 'Group', or 'ServiceAccount'." + }, + "name": { + "type": "string", + "description": "Name of the subject." + }, + "namespaceName": { + "type": "string", + "description": "Namespace of the ServiceAccount. Required when kind is ServiceAccount." + } + }, + "required": [ + "kind", + "name" + ] + }, + "ServicePort": { + "type": "object", + "description": "A port exposed by a Kubernetes Service.", + "properties": { + "port": { + "type": "integer", + "format": "int32", + "description": "Port number the Service listens on (cluster-internal)." + }, + "targetPort": { + "type": "string", + "description": "Port or named port on the target pod the traffic is forwarded to." + }, + "nodePort": { + "type": "integer", + "format": "int32", + "description": "NodePort allocated for NodePort and LoadBalancer Services." + }, + "protocol": { + "$ref": "#/definitions/NetworkProtocol", + "description": "Network protocol for this port." + }, + "name": { + "type": "string", + "description": "Optional name for this port, unique within the Service." + }, + "appProtocol": { + "type": "string", + "description": "Application-level protocol hint (e.g., 'http', 'https', 'grpc')." + } + }, + "required": [ + "port" + ] + }, "Toleration": { "type": "object", "description": "A toleration allows a pod to be scheduled on a node with a matching taint.", @@ -1125,6 +2139,38 @@ "name" ] }, + "VolumeClaimTemplate": { + "type": "object", + "description": "A PersistentVolumeClaim template in a StatefulSet that provisions stable storage per replica.", + "properties": { + "name": { + "type": "string", + "description": "Name of the volume claim template, referenced by container volumeMounts." + }, + "accessModes": { + "type": "array", + "description": "Requested storage access modes (e.g., 'ReadWriteOnce').", + "items": { + "type": "string" + } + }, + "storageClassName": { + "type": "string", + "description": "StorageClass used for dynamic provisioning." + }, + "storageRequest": { + "type": "string", + "description": "Storage quantity requested per replica (e.g., '10Gi')." + }, + "volumeMode": { + "type": "string", + "description": "Volume mode ('Filesystem' or 'Block')." + } + }, + "required": [ + "name" + ] + }, "VolumeMount": { "type": "object", "description": "A volume mount inside a container.", From 85e88d5fa7a7075ec6f9742f47090858147fcf7a Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 4 Jun 2026 16:29:03 -0700 Subject: [PATCH 21/39] Add new words to cspell --- specification/kubernetesconfiguration/cspell.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/specification/kubernetesconfiguration/cspell.yaml b/specification/kubernetesconfiguration/cspell.yaml index c46f67ca382f..d9293c97efe1 100644 --- a/specification/kubernetesconfiguration/cspell.yaml +++ b/specification/kubernetesconfiguration/cspell.yaml @@ -9,6 +9,9 @@ import: - ../../cspell.yaml words: - armkubeinventory + - gvisor + - healthz + - kata - kubeinventory - kubernetesconfiguration - kubelet @@ -16,6 +19,8 @@ words: - kustomizations - kustomize - millicores + - Misscheduled - oidc + - readyz - rpns From d5a8bcb1e763b601213adc75f9ab0ac6c69224d7 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Fri, 5 Jun 2026 16:19:12 -0700 Subject: [PATCH 22/39] Add more resource type fields --- .../GetKubeInventory-CSIStorageCapacity.json | 55 +++++ ...beInventory-CertificateSigningRequest.json | 75 ++++++ .../GetKubeInventory-ConfigMap.json | 63 +++++ .../GetKubeInventory-Deployment.json | 3 +- .../GetKubeInventory-EndpointSlice.json | 96 ++++++++ .../GetKubeInventory-StatefulSet.json | 1 + ...beInventory-ValidatingAdmissionPolicy.json | 67 ++++++ ...tory-ValidatingAdmissionPolicyBinding.json | 63 +++++ .../kubeInventory/models.tsp | 198 ++++++++++++++-- .../GetKubeInventory-CSIStorageCapacity.json | 55 +++++ ...beInventory-CertificateSigningRequest.json | 75 ++++++ .../examples/GetKubeInventory-ConfigMap.json | 63 +++++ .../examples/GetKubeInventory-Deployment.json | 3 +- .../GetKubeInventory-EndpointSlice.json | 96 ++++++++ .../GetKubeInventory-StatefulSet.json | 1 + ...beInventory-ValidatingAdmissionPolicy.json | 67 ++++++ ...tory-ValidatingAdmissionPolicyBinding.json | 63 +++++ .../2026-06-15-preview/kubeInventory.json | 216 +++++++++++++++--- 18 files changed, 1210 insertions(+), 50 deletions(-) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json new file mode 100644 index 000000000000..5454be07f545 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json @@ -0,0 +1,55 @@ +{ + "title": "Get KubeInventory - CSIStorageCapacity", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "csistoragecapacity-managed-premium-pool1-kube-system", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/csistoragecapacity-managed-premium-pool1-kube-system", + "name": "csistoragecapacity-managed-premium-pool1-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "storage.k8s.io/v1", + "kind": "CSIStorageCapacity", + "metadata": { + "name": "managed-premium-pool1", + "namespaceName": "kube-system", + "uid": "a7b8c9d0-e1f2-3456-abcd-789012345678", + "resourceVersion": "4567890", + "generation": 1, + "creationTimestamp": "2026-04-01T06:00:00Z", + "labels": [ + { "name": "csi.storage.k8s.io/storageclass", "value": "managed-premium" } + ] + }, + "spec": { + "storageClassName": "managed-premium", + "nodeTopology": [ + { "name": "topology.kubernetes.io/zone", "value": "eastus-1" }, + { "name": "kubernetes.io/hostname", "value": "aks-nodepool1-12345678-vmss000000" } + ], + "storageCapacityAvailable": "512Gi", + "maximumVolumeSize": "4Ti" + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json new file mode 100644 index 000000000000..e230b867fc51 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json @@ -0,0 +1,75 @@ +{ + "title": "Get KubeInventory - CertificateSigningRequest", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "certificatesigningrequest-myapp-node-client", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/certificatesigningrequest-myapp-node-client", + "name": "certificatesigningrequest-myapp-node-client", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "certificates.k8s.io/v1", + "kind": "CertificateSigningRequest", + "metadata": { + "name": "myapp-node-client", + "uid": "f6a7b8c9-d0e1-2345-fabc-678901234567", + "resourceVersion": "3456789", + "generation": 1, + "creationTimestamp": "2026-05-20T09:30:00Z", + "labels": [ + { "name": "app", "value": "myapp" } + ] + }, + "spec": { + "csrSignerName": "kubernetes.io/kube-apiserver-client", + "csrUsername": "system:serviceaccount:default:myapp-sa", + "csrUsages": [ + "client auth", + "digital signature", + "key encipherment" + ], + "csrExpirationSeconds": 86400 + }, + "status": { + "conditions": [ + { + "type": "Approved", + "status": "True", + "reason": "KubectlApprove", + "message": "This CSR was approved by kubectl certificate approve.", + "lastTransitionTime": "2026-05-20T09:31:00Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "CertificateIssued", + "age": "16d", + "from": "certificatesigningrequest-controller", + "message": "Signed certificate from signer kubernetes.io/kube-apiserver-client" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json new file mode 100644 index 000000000000..e7ec5b77997d --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json @@ -0,0 +1,63 @@ +{ + "title": "Get KubeInventory - ConfigMap", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "configmap-app-config-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/configmap-app-config-default", + "name": "configmap-app-config-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "app-config", + "namespaceName": "default", + "uid": "d4e5f6a7-b8c9-0123-defa-456789012345", + "resourceVersion": "1234567", + "generation": 1, + "creationTimestamp": "2026-05-01T12:00:00Z", + "labels": [ + { "name": "app", "value": "myapp" }, + { "name": "environment", "value": "production" } + ], + "annotations": [ + { "name": "kubectl.kubernetes.io/last-applied-configuration", "value": "{}" } + ] + }, + "spec": { + "configMapData": [ + { "name": "DATABASE_HOST", "value": "postgres.default.svc.cluster.local" }, + { "name": "DATABASE_PORT", "value": "5432" }, + { "name": "LOG_LEVEL", "value": "info" }, + { "name": "FEATURE_FLAGS", "value": "feature-a=true,feature-b=false" } + ], + "configMapBinaryDataKeys": [ + "tls.crt", + "tls.key" + ], + "configMapImmutable": false + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json index d45851e10560..4608e4d52ed6 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json @@ -59,7 +59,8 @@ "runAsNonRoot": true, "runAsUser": 1000, "fsGroup": 2000, - "seccompProfile": "RuntimeDefault" + "seccompProfile": "RuntimeDefault", + "appArmorProfile": "RuntimeDefault" }, "tolerations": [ { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json new file mode 100644 index 000000000000..0e8b46e714a5 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json @@ -0,0 +1,96 @@ +{ + "title": "Get KubeInventory - EndpointSlice", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "endpointslice-myapp-abc12-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/endpointslice-myapp-abc12-default", + "name": "endpointslice-myapp-abc12-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "discovery.k8s.io/v1", + "kind": "EndpointSlice", + "metadata": { + "name": "myapp-abc12", + "namespaceName": "default", + "uid": "e5f6a7b8-c9d0-1234-efab-567890123456", + "resourceVersion": "2345678", + "generation": 1, + "creationTimestamp": "2026-05-10T14:00:00Z", + "labels": [ + { "name": "kubernetes.io/service-name", "value": "myapp" }, + { "name": "endpointslice.kubernetes.io/managed-by", "value": "endpointslice-controller.k8s.io" } + ], + "ownerReferences": [ + { + "apiVersion": "v1", + "kind": "Service", + "name": "myapp", + "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + } + ] + }, + "spec": { + "endpointSliceAddressType": "IPv4", + "endpointSliceEndpoints": [ + { + "addresses": ["10.244.1.5"], + "ready": true, + "nodeName": "aks-nodepool1-12345678-vmss000000", + "targetRefKind": "Pod", + "targetRefName": "myapp-6d8f9c-xk2pv", + "targetRefNamespace": "default" + }, + { + "addresses": ["10.244.2.8"], + "ready": true, + "nodeName": "aks-nodepool1-12345678-vmss000001", + "targetRefKind": "Pod", + "targetRefName": "myapp-6d8f9c-mn7qr", + "targetRefNamespace": "default" + }, + { + "addresses": ["10.244.3.12"], + "ready": false, + "nodeName": "aks-nodepool1-12345678-vmss000002", + "targetRefKind": "Pod", + "targetRefName": "myapp-6d8f9c-pz4st", + "targetRefNamespace": "default" + } + ], + "endpointSlicePorts": [ + { + "port": 8080, + "protocol": "TCP", + "name": "http" + }, + { + "port": 8443, + "protocol": "TCP", + "name": "https" + } + ] + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json index 472100a470fb..c10f061435e4 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json @@ -46,6 +46,7 @@ { "name": "app", "value": "postgres" } ], "strategyType": "RollingUpdate", + "maxUnavailableReplicas": "1", "podManagementPolicy": "OrderedReady", "serviceAccountName": "postgres-sa", "securityContext": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json new file mode 100644 index 000000000000..e8db6cc17321 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json @@ -0,0 +1,67 @@ +{ + "title": "Get KubeInventory - ValidatingAdmissionPolicy", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "validatingadmissionpolicy-deny-privileged-containers", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/validatingadmissionpolicy-deny-privileged-containers", + "name": "validatingadmissionpolicy-deny-privileged-containers", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "admissionregistration.k8s.io/v1", + "kind": "ValidatingAdmissionPolicy", + "metadata": { + "name": "deny-privileged-containers", + "uid": "b8c9d0e1-f2a3-4567-bcde-890123456789", + "resourceVersion": "5678901", + "generation": 1, + "creationTimestamp": "2026-03-15T11:00:00Z", + "labels": [ + { "name": "policy.security.io/category", "value": "pod-security" } + ], + "annotations": [ + { "name": "policy.security.io/severity", "value": "critical" } + ] + }, + "spec": { + "admissionPolicyFailurePolicy": "Fail", + "admissionPolicyMatchConstraints": [ + "Group=* Resource=pods Operations=[CREATE UPDATE]", + "Group=apps Resource=deployments Operations=[CREATE UPDATE]", + "Group=apps Resource=statefulsets Operations=[CREATE UPDATE]" + ] + }, + "status": { + "conditions": [ + { + "type": "Ready", + "status": "True", + "reason": "ValidationApplied", + "message": "Policy is active and enforcing.", + "lastTransitionTime": "2026-03-15T11:01:00Z" + } + ] + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json new file mode 100644 index 000000000000..65cf27b91007 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json @@ -0,0 +1,63 @@ +{ + "title": "Get KubeInventory - ValidatingAdmissionPolicyBinding", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "validatingadmissionpolicybinding-deny-privileged-binding", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/validatingadmissionpolicybinding-deny-privileged-binding", + "name": "validatingadmissionpolicybinding-deny-privileged-binding", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "admissionregistration.k8s.io/v1", + "kind": "ValidatingAdmissionPolicyBinding", + "metadata": { + "name": "deny-privileged-binding", + "uid": "c9d0e1f2-a3b4-5678-cdef-901234567890", + "resourceVersion": "6789012", + "generation": 1, + "creationTimestamp": "2026-03-15T11:05:00Z", + "labels": [ + { "name": "policy.security.io/category", "value": "pod-security" } + ] + }, + "spec": { + "admissionPolicyBindingPolicyName": "deny-privileged-containers", + "admissionPolicyValidationActions": [ + "Deny", + "Audit" + ] + }, + "status": { + "conditions": [ + { + "type": "Ready", + "status": "True", + "reason": "BindingApplied", + "message": "PolicyBinding is active.", + "lastTransitionTime": "2026-03-15T11:06:00Z" + } + ] + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index a9d987f33bd3..543856e9058c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -23,7 +23,7 @@ model KubernetesLabel { name: string; /** Label value. */ - value: string; + value?: string; } /** A single Kubernetes annotation (key/value pair for non-identifying auxiliary metadata). */ @@ -34,7 +34,7 @@ model KubernetesAnnotation { name: string; /** Annotation value. */ - value: string; + value?: string; } // ─── Common Kubernetes types ────────────────────────────────────────────────── @@ -42,13 +42,13 @@ model KubernetesAnnotation { /** A reference from a Kubernetes object to its owner (e.g., a ReplicaSet owning a Pod). */ model OwnerReference { /** API version of the owner (e.g., 'apps/v1'). */ - apiVersion: string; + apiVersion?: string; /** Kind of the owner (e.g., 'ReplicaSet'). */ - kind: string; + kind?: string; /** Name of the owner object. */ - name: string; + name?: string; /** UID of the owner object. */ uid: string; @@ -128,7 +128,7 @@ model KubernetesCondition { type: string; /** Whether the condition is currently active. */ - status: ConditionStatus; + status?: ConditionStatus; /** Machine-readable reason code for the current status. */ reason?: string; @@ -154,7 +154,7 @@ model KubernetesGenericField { name: string; /** The string value of the field. */ - value: string; + value?: string; } // ─── Container support models ───────────────────────────────────────────────── @@ -165,7 +165,7 @@ model VolumeMount { name: string; /** Absolute path inside the container where the volume is mounted. */ - mountPath: string; + mountPath?: string; /** Mount the volume as read-only when true. */ readOnly?: boolean; @@ -304,7 +304,7 @@ model ContainerSpec { name: string; /** Container image reference (e.g., 'nginx:1.25'). */ - image: string; + image?: string; /** Image pull policy for this container ('Always', 'IfNotPresent', or 'Never'). */ imagePullPolicy?: string; @@ -414,6 +414,9 @@ model PodSecurityContext { /** Seccomp profile type applied to all containers ('RuntimeDefault', 'Unconfined', or 'Localhost'). */ seccompProfile?: string; + + /** AppArmor profile type applied to all containers ('RuntimeDefault', 'Unconfined', or 'Localhost'). */ + appArmorProfile?: string; } /** State of a currently running container. */ @@ -470,10 +473,10 @@ model ContainerStatus { name: string; /** True when the container has passed its readiness probe. */ - ready: boolean; + ready?: boolean; /** Number of times the container has restarted since the pod was started. */ - restartCount: int32; + restartCount?: int32; /** Container image including digest as resolved by the runtime. */ image?: string; @@ -540,13 +543,13 @@ model NodeTaint { value?: string; /** Effect applied to non-tolerating pods. */ - effect: NodeTaintEffect; + effect?: NodeTaintEffect; } /** A network address associated with a Kubernetes Node. */ model NodeAddress { /** Address type (e.g., 'InternalIP', 'ExternalIP', 'Hostname'). */ - type: string; + type?: string; /** The address value (IP address or hostname). */ address: string; @@ -620,6 +623,41 @@ model VolumeClaimTemplate { volumeMode?: string; } +// ─── EndpointSlice models ───────────────────────────────────────────────────── + +/** A single endpoint within an EndpointSlice (address + readiness + scheduling hints). */ +model EndpointSliceEndpoint { + /** IP addresses (IPv4/IPv6) or FQDNs serving this endpoint. */ + addresses: string[]; + + /** True when the endpoint is ready to receive traffic. */ + ready?: boolean; + + /** Name of the node hosting this endpoint. */ + nodeName?: string; + + /** Kind of the backing object (typically 'Pod'). */ + targetRefKind?: string; + + /** Name of the backing object. */ + targetRefName?: string; + + /** Namespace of the backing object. */ + targetRefNamespace?: string; +} + +/** A port entry in an EndpointSlice. */ +model EndpointSlicePort { + /** Port number. */ + port: int32; + + /** Network protocol ('TCP', 'UDP', or 'SCTP'). */ + protocol?: NetworkProtocol; + + /** Optional name for this port. */ + name?: string; +} + // ─── RBAC models ───────────────────────────────────────────────────────────── /** A single RBAC permission rule granting verbs on Kubernetes API resources. */ @@ -640,7 +678,7 @@ model PolicyRule { /** A subject (user, group, or service account) in a RoleBinding or ClusterRoleBinding. */ model RbacSubject { /** Kind of the subject: 'User', 'Group', or 'ServiceAccount'. */ - kind: string; + kind?: string; /** Name of the subject. */ name: string; @@ -663,7 +701,7 @@ model IngressPath { serviceName: string; /** Port of the backend Service (numeric string or named port). */ - servicePort: string; + servicePort?: string; } /** A host-level routing rule in an Ingress resource. */ @@ -818,6 +856,13 @@ model KubernetesResourceSpec { @identifiers(#["name"]) volumeClaimTemplates?: VolumeClaimTemplate[]; + /** + * Maximum number of pods that can be unavailable during a StatefulSet rolling update + * (absolute number or percentage string, e.g., '1', '25%'). Beta as of Kubernetes 1.24. + * Populated for StatefulSet resources. + */ + maxUnavailableReplicas?: string; + // ── Service ───────────────────────────────────────────────────────────────── /** @@ -1052,6 +1097,29 @@ model KubernetesResourceSpec { */ secretType?: string; + // ── ConfigMap ────────────────────────────────────────────────────────────── + + /** + * Key-value pairs stored in the ConfigMap (e.g., configuration files, environment values). + * Each entry maps a string key to a string value. + * Populated for ConfigMap resources. + */ + @identifiers(#["name"]) + configMapData?: KubernetesLabel[]; + + /** + * Keys present in the ConfigMap binaryData field. + * Binary values are not captured; only key names are stored for reference. + * Populated for ConfigMap resources. + */ + configMapBinaryDataKeys?: string[]; + + /** + * When true, the ConfigMap is immutable and cannot be updated after creation. + * Populated for ConfigMap resources. + */ + configMapImmutable?: boolean; + // ── ServiceAccount ───────────────────────────────────────────────────────── /** @@ -1242,6 +1310,98 @@ model KubernetesResourceSpec { */ podCidr?: string; + // ── EndpointSlice ────────────────────────────────────────────────────────── + + /** + * Address family for all endpoints in this EndpointSlice ('IPv4', 'IPv6', or 'FQDN'). + * Populated for EndpointSlice resources. + */ + endpointSliceAddressType?: string; + + /** + * Endpoints contained in this EndpointSlice. + * Populated for EndpointSlice resources. + */ + @identifiers(#[]) + endpointSliceEndpoints?: EndpointSliceEndpoint[]; + + /** + * Ports exposed by the endpoints in this EndpointSlice. + * Populated for EndpointSlice resources. + */ + @identifiers(#["name"]) + endpointSlicePorts?: EndpointSlicePort[]; + + // ── CertificateSigningRequest ────────────────────────────────────────────── + + /** + * Name of the signer that will sign the certificate (e.g., 'kubernetes.io/kube-apiserver-client'). + * Populated for CertificateSigningRequest resources. + */ + csrSignerName?: string; + + /** + * Name of the user that created the CertificateSigningRequest. + * Populated for CertificateSigningRequest resources. + */ + csrUsername?: string; + + /** + * Key usages requested for the certificate (e.g., 'client auth', 'server auth', 'digital signature'). + * Populated for CertificateSigningRequest resources. + */ + csrUsages?: string[]; + + /** + * Requested duration in seconds for the issued certificate. + * Populated for CertificateSigningRequest resources. + */ + csrExpirationSeconds?: int32; + + // ── CSIStorageCapacity ──────────────────────────────────────────────────── + + /** + * Available storage capacity for the StorageClass in this topology segment (e.g., '500Gi'). + * Populated for CSIStorageCapacity resources. + */ + storageCapacityAvailable?: string; + + /** + * Maximum size of a single volume that can be created in this topology segment. + * Populated for CSIStorageCapacity resources. + */ + maximumVolumeSize?: string; + + // ── ValidatingAdmissionPolicy ───────────────────────────────────────────── + + /** + * What happens when a policy evaluation fails: 'Fail' rejects the request; 'Ignore' allows it. + * Populated for ValidatingAdmissionPolicy resources. + */ + admissionPolicyFailurePolicy?: string; + + /** + * API resource rules that trigger this ValidatingAdmissionPolicy + * (e.g., 'CREATE pods', 'UPDATE deployments'). + * Each entry is a human-readable summary of a resource rule. + * Populated for ValidatingAdmissionPolicy resources. + */ + admissionPolicyMatchConstraints?: string[]; + + // ── ValidatingAdmissionPolicyBinding ───────────────────────────────────── + + /** + * Name of the ValidatingAdmissionPolicy this binding applies. + * Populated for ValidatingAdmissionPolicyBinding resources. + */ + admissionPolicyBindingPolicyName?: string; + + /** + * How validation failures are enforced: 'Deny', 'Warn', or 'Audit'. + * Populated for ValidatingAdmissionPolicyBinding resources. + */ + admissionPolicyValidationActions?: string[]; + // ── Generic overflow ──────────────────────────────────────────────────────── /** @@ -1517,7 +1677,7 @@ model KubernetesResourceStatus { /** A Kubernetes event recorded against a resource (equivalent to `kubectl describe` Events). */ model KubernetesEvent { /** Event type: 'Normal' or 'Warning'. */ - type: string; + type?: string; /** Short machine-readable reason for the event (e.g., 'Scheduled', 'Pulled', 'Failed'). */ reason: string; @@ -1526,16 +1686,16 @@ model KubernetesEvent { * Human-readable elapsed time since the event last occurred * as reported by the Kubernetes API (e.g., '2m28s', '5h'). */ - age: string; + age?: string; /** * Component that emitted the event * (e.g., 'default-scheduler', 'kubelet'). */ - from: string; + from?: string; /** Human-readable description of the event. */ - message: string; + message?: string; } // ─── ARM resource properties ────────────────────────────────────────────────── diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json new file mode 100644 index 000000000000..5454be07f545 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json @@ -0,0 +1,55 @@ +{ + "title": "Get KubeInventory - CSIStorageCapacity", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "csistoragecapacity-managed-premium-pool1-kube-system", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/csistoragecapacity-managed-premium-pool1-kube-system", + "name": "csistoragecapacity-managed-premium-pool1-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "storage.k8s.io/v1", + "kind": "CSIStorageCapacity", + "metadata": { + "name": "managed-premium-pool1", + "namespaceName": "kube-system", + "uid": "a7b8c9d0-e1f2-3456-abcd-789012345678", + "resourceVersion": "4567890", + "generation": 1, + "creationTimestamp": "2026-04-01T06:00:00Z", + "labels": [ + { "name": "csi.storage.k8s.io/storageclass", "value": "managed-premium" } + ] + }, + "spec": { + "storageClassName": "managed-premium", + "nodeTopology": [ + { "name": "topology.kubernetes.io/zone", "value": "eastus-1" }, + { "name": "kubernetes.io/hostname", "value": "aks-nodepool1-12345678-vmss000000" } + ], + "storageCapacityAvailable": "512Gi", + "maximumVolumeSize": "4Ti" + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json new file mode 100644 index 000000000000..e230b867fc51 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json @@ -0,0 +1,75 @@ +{ + "title": "Get KubeInventory - CertificateSigningRequest", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "certificatesigningrequest-myapp-node-client", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/certificatesigningrequest-myapp-node-client", + "name": "certificatesigningrequest-myapp-node-client", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "certificates.k8s.io/v1", + "kind": "CertificateSigningRequest", + "metadata": { + "name": "myapp-node-client", + "uid": "f6a7b8c9-d0e1-2345-fabc-678901234567", + "resourceVersion": "3456789", + "generation": 1, + "creationTimestamp": "2026-05-20T09:30:00Z", + "labels": [ + { "name": "app", "value": "myapp" } + ] + }, + "spec": { + "csrSignerName": "kubernetes.io/kube-apiserver-client", + "csrUsername": "system:serviceaccount:default:myapp-sa", + "csrUsages": [ + "client auth", + "digital signature", + "key encipherment" + ], + "csrExpirationSeconds": 86400 + }, + "status": { + "conditions": [ + { + "type": "Approved", + "status": "True", + "reason": "KubectlApprove", + "message": "This CSR was approved by kubectl certificate approve.", + "lastTransitionTime": "2026-05-20T09:31:00Z" + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "CertificateIssued", + "age": "16d", + "from": "certificatesigningrequest-controller", + "message": "Signed certificate from signer kubernetes.io/kube-apiserver-client" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json new file mode 100644 index 000000000000..e7ec5b77997d --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json @@ -0,0 +1,63 @@ +{ + "title": "Get KubeInventory - ConfigMap", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "configmap-app-config-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/configmap-app-config-default", + "name": "configmap-app-config-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "app-config", + "namespaceName": "default", + "uid": "d4e5f6a7-b8c9-0123-defa-456789012345", + "resourceVersion": "1234567", + "generation": 1, + "creationTimestamp": "2026-05-01T12:00:00Z", + "labels": [ + { "name": "app", "value": "myapp" }, + { "name": "environment", "value": "production" } + ], + "annotations": [ + { "name": "kubectl.kubernetes.io/last-applied-configuration", "value": "{}" } + ] + }, + "spec": { + "configMapData": [ + { "name": "DATABASE_HOST", "value": "postgres.default.svc.cluster.local" }, + { "name": "DATABASE_PORT", "value": "5432" }, + { "name": "LOG_LEVEL", "value": "info" }, + { "name": "FEATURE_FLAGS", "value": "feature-a=true,feature-b=false" } + ], + "configMapBinaryDataKeys": [ + "tls.crt", + "tls.key" + ], + "configMapImmutable": false + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json index d45851e10560..4608e4d52ed6 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json @@ -59,7 +59,8 @@ "runAsNonRoot": true, "runAsUser": 1000, "fsGroup": 2000, - "seccompProfile": "RuntimeDefault" + "seccompProfile": "RuntimeDefault", + "appArmorProfile": "RuntimeDefault" }, "tolerations": [ { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json new file mode 100644 index 000000000000..0e8b46e714a5 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json @@ -0,0 +1,96 @@ +{ + "title": "Get KubeInventory - EndpointSlice", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "endpointslice-myapp-abc12-default", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/endpointslice-myapp-abc12-default", + "name": "endpointslice-myapp-abc12-default", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "discovery.k8s.io/v1", + "kind": "EndpointSlice", + "metadata": { + "name": "myapp-abc12", + "namespaceName": "default", + "uid": "e5f6a7b8-c9d0-1234-efab-567890123456", + "resourceVersion": "2345678", + "generation": 1, + "creationTimestamp": "2026-05-10T14:00:00Z", + "labels": [ + { "name": "kubernetes.io/service-name", "value": "myapp" }, + { "name": "endpointslice.kubernetes.io/managed-by", "value": "endpointslice-controller.k8s.io" } + ], + "ownerReferences": [ + { + "apiVersion": "v1", + "kind": "Service", + "name": "myapp", + "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + } + ] + }, + "spec": { + "endpointSliceAddressType": "IPv4", + "endpointSliceEndpoints": [ + { + "addresses": ["10.244.1.5"], + "ready": true, + "nodeName": "aks-nodepool1-12345678-vmss000000", + "targetRefKind": "Pod", + "targetRefName": "myapp-6d8f9c-xk2pv", + "targetRefNamespace": "default" + }, + { + "addresses": ["10.244.2.8"], + "ready": true, + "nodeName": "aks-nodepool1-12345678-vmss000001", + "targetRefKind": "Pod", + "targetRefName": "myapp-6d8f9c-mn7qr", + "targetRefNamespace": "default" + }, + { + "addresses": ["10.244.3.12"], + "ready": false, + "nodeName": "aks-nodepool1-12345678-vmss000002", + "targetRefKind": "Pod", + "targetRefName": "myapp-6d8f9c-pz4st", + "targetRefNamespace": "default" + } + ], + "endpointSlicePorts": [ + { + "port": 8080, + "protocol": "TCP", + "name": "http" + }, + { + "port": 8443, + "protocol": "TCP", + "name": "https" + } + ] + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json index 472100a470fb..c10f061435e4 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json @@ -46,6 +46,7 @@ { "name": "app", "value": "postgres" } ], "strategyType": "RollingUpdate", + "maxUnavailableReplicas": "1", "podManagementPolicy": "OrderedReady", "serviceAccountName": "postgres-sa", "securityContext": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json new file mode 100644 index 000000000000..e8db6cc17321 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json @@ -0,0 +1,67 @@ +{ + "title": "Get KubeInventory - ValidatingAdmissionPolicy", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "validatingadmissionpolicy-deny-privileged-containers", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/validatingadmissionpolicy-deny-privileged-containers", + "name": "validatingadmissionpolicy-deny-privileged-containers", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "admissionregistration.k8s.io/v1", + "kind": "ValidatingAdmissionPolicy", + "metadata": { + "name": "deny-privileged-containers", + "uid": "b8c9d0e1-f2a3-4567-bcde-890123456789", + "resourceVersion": "5678901", + "generation": 1, + "creationTimestamp": "2026-03-15T11:00:00Z", + "labels": [ + { "name": "policy.security.io/category", "value": "pod-security" } + ], + "annotations": [ + { "name": "policy.security.io/severity", "value": "critical" } + ] + }, + "spec": { + "admissionPolicyFailurePolicy": "Fail", + "admissionPolicyMatchConstraints": [ + "Group=* Resource=pods Operations=[CREATE UPDATE]", + "Group=apps Resource=deployments Operations=[CREATE UPDATE]", + "Group=apps Resource=statefulsets Operations=[CREATE UPDATE]" + ] + }, + "status": { + "conditions": [ + { + "type": "Ready", + "status": "True", + "reason": "ValidationApplied", + "message": "Policy is active and enforcing.", + "lastTransitionTime": "2026-03-15T11:01:00Z" + } + ] + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json new file mode 100644 index 000000000000..65cf27b91007 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json @@ -0,0 +1,63 @@ +{ + "title": "Get KubeInventory - ValidatingAdmissionPolicyBinding", + "operationId": "KubeInventories_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubeInventoryName": "validatingadmissionpolicybinding-deny-privileged-binding", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/validatingadmissionpolicybinding-deny-privileged-binding", + "name": "validatingadmissionpolicybinding-deny-privileged-binding", + "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "admissionregistration.k8s.io/v1", + "kind": "ValidatingAdmissionPolicyBinding", + "metadata": { + "name": "deny-privileged-binding", + "uid": "c9d0e1f2-a3b4-5678-cdef-901234567890", + "resourceVersion": "6789012", + "generation": 1, + "creationTimestamp": "2026-03-15T11:05:00Z", + "labels": [ + { "name": "policy.security.io/category", "value": "pod-security" } + ] + }, + "spec": { + "admissionPolicyBindingPolicyName": "deny-privileged-containers", + "admissionPolicyValidationActions": [ + "Deny", + "Audit" + ] + }, + "status": { + "conditions": [ + { + "type": "Ready", + "status": "True", + "reason": "BindingApplied", + "message": "PolicyBinding is active.", + "lastTransitionTime": "2026-03-15T11:06:00Z" + } + ] + }, + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index d4cb9387c47e..b0365ad037d9 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -178,6 +178,15 @@ "Get KubeInventory": { "$ref": "./examples/GetKubeInventory.json" }, + "Get KubeInventory - CSIStorageCapacity": { + "$ref": "./examples/GetKubeInventory-CSIStorageCapacity.json" + }, + "Get KubeInventory - CertificateSigningRequest": { + "$ref": "./examples/GetKubeInventory-CertificateSigningRequest.json" + }, + "Get KubeInventory - ConfigMap": { + "$ref": "./examples/GetKubeInventory-ConfigMap.json" + }, "Get KubeInventory - CronJob": { "$ref": "./examples/GetKubeInventory-CronJob.json" }, @@ -187,6 +196,9 @@ "Get KubeInventory - Deployment": { "$ref": "./examples/GetKubeInventory-Deployment.json" }, + "Get KubeInventory - EndpointSlice": { + "$ref": "./examples/GetKubeInventory-EndpointSlice.json" + }, "Get KubeInventory - HorizontalPodAutoscaler": { "$ref": "./examples/GetKubeInventory-HorizontalPodAutoscaler.json" }, @@ -235,6 +247,12 @@ "Get KubeInventory - StorageClass": { "$ref": "./examples/GetKubeInventory-StorageClass.json" }, + "Get KubeInventory - ValidatingAdmissionPolicy": { + "$ref": "./examples/GetKubeInventory-ValidatingAdmissionPolicy.json" + }, + "Get KubeInventory - ValidatingAdmissionPolicyBinding": { + "$ref": "./examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json" + }, "Get KubeInventory - VolumeAttachment": { "$ref": "./examples/GetKubeInventory-VolumeAttachment.json" } @@ -505,8 +523,7 @@ } }, "required": [ - "name", - "image" + "name" ] }, "ContainerState": { @@ -628,9 +645,65 @@ } }, "required": [ - "name", - "ready", - "restartCount" + "name" + ] + }, + "EndpointSliceEndpoint": { + "type": "object", + "description": "A single endpoint within an EndpointSlice (address + readiness + scheduling hints).", + "properties": { + "addresses": { + "type": "array", + "description": "IP addresses (IPv4/IPv6) or FQDNs serving this endpoint.", + "items": { + "type": "string" + } + }, + "ready": { + "type": "boolean", + "description": "True when the endpoint is ready to receive traffic." + }, + "nodeName": { + "type": "string", + "description": "Name of the node hosting this endpoint." + }, + "targetRefKind": { + "type": "string", + "description": "Kind of the backing object (typically 'Pod')." + }, + "targetRefName": { + "type": "string", + "description": "Name of the backing object." + }, + "targetRefNamespace": { + "type": "string", + "description": "Namespace of the backing object." + } + }, + "required": [ + "addresses" + ] + }, + "EndpointSlicePort": { + "type": "object", + "description": "A port entry in an EndpointSlice.", + "properties": { + "port": { + "type": "integer", + "format": "int32", + "description": "Port number." + }, + "protocol": { + "$ref": "#/definitions/NetworkProtocol", + "description": "Network protocol ('TCP', 'UDP', or 'SCTP')." + }, + "name": { + "type": "string", + "description": "Optional name for this port." + } + }, + "required": [ + "port" ] }, "EnvFromSource": { @@ -690,8 +763,7 @@ } }, "required": [ - "serviceName", - "servicePort" + "serviceName" ] }, "IngressRule": { @@ -818,8 +890,7 @@ } }, "required": [ - "name", - "value" + "name" ] }, "KubernetesCondition": { @@ -849,8 +920,7 @@ } }, "required": [ - "type", - "status" + "type" ] }, "KubernetesEvent": { @@ -879,11 +949,7 @@ } }, "required": [ - "type", - "reason", - "age", - "from", - "message" + "reason" ] }, "KubernetesGenericField": { @@ -901,8 +967,7 @@ } }, "required": [ - "name", - "value" + "name" ] }, "KubernetesLabel": { @@ -920,8 +985,7 @@ } }, "required": [ - "name", - "value" + "name" ] }, "KubernetesObjectMeta": { @@ -1128,6 +1192,10 @@ "name" ] }, + "maxUnavailableReplicas": { + "type": "string", + "description": "Maximum number of pods that can be unavailable during a StatefulSet rolling update\n(absolute number or percentage string, e.g., '1', '25%'). Beta as of Kubernetes 1.24.\nPopulated for StatefulSet resources." + }, "serviceType": { "type": "string", "description": "How the service is exposed (e.g., 'ClusterIP', 'NodePort', 'LoadBalancer').\nPopulated for Service resources." @@ -1318,6 +1386,27 @@ "type": "string", "description": "Kubernetes Secret type (e.g., 'Opaque', 'kubernetes.io/tls', 'kubernetes.io/service-account-token').\nPopulated for Secret resources." }, + "configMapData": { + "type": "array", + "description": "Key-value pairs stored in the ConfigMap (e.g., configuration files, environment values).\nEach entry maps a string key to a string value.\nPopulated for ConfigMap resources.", + "items": { + "$ref": "#/definitions/KubernetesLabel" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "configMapBinaryDataKeys": { + "type": "array", + "description": "Keys present in the ConfigMap binaryData field.\nBinary values are not captured; only key names are stored for reference.\nPopulated for ConfigMap resources.", + "items": { + "type": "string" + } + }, + "configMapImmutable": { + "type": "boolean", + "description": "When true, the ConfigMap is immutable and cannot be updated after creation.\nPopulated for ConfigMap resources." + }, "automountServiceAccountToken": { "type": "boolean", "description": "When false, prevents the default Kubernetes service account token from being\nauto-mounted into pods running as this ServiceAccount.\nPopulated for ServiceAccount resources." @@ -1462,6 +1551,78 @@ "type": "string", "description": "IP range assigned to pods running on this node.\nPopulated for Node resources." }, + "endpointSliceAddressType": { + "type": "string", + "description": "Address family for all endpoints in this EndpointSlice ('IPv4', 'IPv6', or 'FQDN').\nPopulated for EndpointSlice resources." + }, + "endpointSliceEndpoints": { + "type": "array", + "description": "Endpoints contained in this EndpointSlice.\nPopulated for EndpointSlice resources.", + "items": { + "$ref": "#/definitions/EndpointSliceEndpoint" + }, + "x-ms-identifiers": [] + }, + "endpointSlicePorts": { + "type": "array", + "description": "Ports exposed by the endpoints in this EndpointSlice.\nPopulated for EndpointSlice resources.", + "items": { + "$ref": "#/definitions/EndpointSlicePort" + }, + "x-ms-identifiers": [ + "name" + ] + }, + "csrSignerName": { + "type": "string", + "description": "Name of the signer that will sign the certificate (e.g., 'kubernetes.io/kube-apiserver-client').\nPopulated for CertificateSigningRequest resources." + }, + "csrUsername": { + "type": "string", + "description": "Name of the user that created the CertificateSigningRequest.\nPopulated for CertificateSigningRequest resources." + }, + "csrUsages": { + "type": "array", + "description": "Key usages requested for the certificate (e.g., 'client auth', 'server auth', 'digital signature').\nPopulated for CertificateSigningRequest resources.", + "items": { + "type": "string" + } + }, + "csrExpirationSeconds": { + "type": "integer", + "format": "int32", + "description": "Requested duration in seconds for the issued certificate.\nPopulated for CertificateSigningRequest resources." + }, + "storageCapacityAvailable": { + "type": "string", + "description": "Available storage capacity for the StorageClass in this topology segment (e.g., '500Gi').\nPopulated for CSIStorageCapacity resources." + }, + "maximumVolumeSize": { + "type": "string", + "description": "Maximum size of a single volume that can be created in this topology segment.\nPopulated for CSIStorageCapacity resources." + }, + "admissionPolicyFailurePolicy": { + "type": "string", + "description": "What happens when a policy evaluation fails: 'Fail' rejects the request; 'Ignore' allows it.\nPopulated for ValidatingAdmissionPolicy resources." + }, + "admissionPolicyMatchConstraints": { + "type": "array", + "description": "API resource rules that trigger this ValidatingAdmissionPolicy\n(e.g., 'CREATE pods', 'UPDATE deployments').\nEach entry is a human-readable summary of a resource rule.\nPopulated for ValidatingAdmissionPolicy resources.", + "items": { + "type": "string" + } + }, + "admissionPolicyBindingPolicyName": { + "type": "string", + "description": "Name of the ValidatingAdmissionPolicy this binding applies.\nPopulated for ValidatingAdmissionPolicyBinding resources." + }, + "admissionPolicyValidationActions": { + "type": "array", + "description": "How validation failures are enforced: 'Deny', 'Warn', or 'Audit'.\nPopulated for ValidatingAdmissionPolicyBinding resources.", + "items": { + "type": "string" + } + }, "additionalFields": { "type": "array", "description": "Additional resource-specific fields not represented by the typed properties above.\nUsed for uncommon fields and custom resource definition instances.", @@ -1804,7 +1965,6 @@ } }, "required": [ - "type", "address" ] }, @@ -1882,8 +2042,7 @@ } }, "required": [ - "key", - "effect" + "key" ] }, "NodeTaintEffect": { @@ -1946,9 +2105,6 @@ } }, "required": [ - "apiVersion", - "kind", - "name", "uid" ] }, @@ -1986,6 +2142,10 @@ "seccompProfile": { "type": "string", "description": "Seccomp profile type applied to all containers ('RuntimeDefault', 'Unconfined', or 'Localhost')." + }, + "appArmorProfile": { + "type": "string", + "description": "AppArmor profile type applied to all containers ('RuntimeDefault', 'Unconfined', or 'Localhost')." } } }, @@ -2044,7 +2204,6 @@ } }, "required": [ - "kind", "name" ] }, @@ -2193,8 +2352,7 @@ } }, "required": [ - "name", - "mountPath" + "name" ] } }, From 85fd2dc609362abab61b3fc270c59dda125178d0 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 8 Jun 2026 11:44:03 -0700 Subject: [PATCH 23/39] Pretty Fixes --- .../GetKubeInventory-CSIStorageCapacity.json | 15 ++++++-- ...beInventory-CertificateSigningRequest.json | 5 ++- .../GetKubeInventory-ConfigMap.json | 35 +++++++++++++++---- .../GetKubeInventory-CSIStorageCapacity.json | 15 ++++++-- ...beInventory-CertificateSigningRequest.json | 5 ++- .../examples/GetKubeInventory-ConfigMap.json | 35 +++++++++++++++---- 6 files changed, 88 insertions(+), 22 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json index 5454be07f545..62b9c97f6f9d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json @@ -35,14 +35,23 @@ "generation": 1, "creationTimestamp": "2026-04-01T06:00:00Z", "labels": [ - { "name": "csi.storage.k8s.io/storageclass", "value": "managed-premium" } + { + "name": "csi.storage.k8s.io/storageclass", + "value": "managed-premium" + } ] }, "spec": { "storageClassName": "managed-premium", "nodeTopology": [ - { "name": "topology.kubernetes.io/zone", "value": "eastus-1" }, - { "name": "kubernetes.io/hostname", "value": "aks-nodepool1-12345678-vmss000000" } + { + "name": "topology.kubernetes.io/zone", + "value": "eastus-1" + }, + { + "name": "kubernetes.io/hostname", + "value": "aks-nodepool1-12345678-vmss000000" + } ], "storageCapacityAvailable": "512Gi", "maximumVolumeSize": "4Ti" diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json index e230b867fc51..f8e6a255e772 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json @@ -34,7 +34,10 @@ "generation": 1, "creationTimestamp": "2026-05-20T09:30:00Z", "labels": [ - { "name": "app", "value": "myapp" } + { + "name": "app", + "value": "myapp" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json index e7ec5b77997d..08eaa5d09146 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json @@ -35,19 +35,40 @@ "generation": 1, "creationTimestamp": "2026-05-01T12:00:00Z", "labels": [ - { "name": "app", "value": "myapp" }, - { "name": "environment", "value": "production" } + { + "name": "app", + "value": "myapp" + }, + { + "name": "environment", + "value": "production" + } ], "annotations": [ - { "name": "kubectl.kubernetes.io/last-applied-configuration", "value": "{}" } + { + "name": "kubectl.kubernetes.io/last-applied-configuration", + "value": "{}" + } ] }, "spec": { "configMapData": [ - { "name": "DATABASE_HOST", "value": "postgres.default.svc.cluster.local" }, - { "name": "DATABASE_PORT", "value": "5432" }, - { "name": "LOG_LEVEL", "value": "info" }, - { "name": "FEATURE_FLAGS", "value": "feature-a=true,feature-b=false" } + { + "name": "DATABASE_HOST", + "value": "postgres.default.svc.cluster.local" + }, + { + "name": "DATABASE_PORT", + "value": "5432" + }, + { + "name": "LOG_LEVEL", + "value": "info" + }, + { + "name": "FEATURE_FLAGS", + "value": "feature-a=true,feature-b=false" + } ], "configMapBinaryDataKeys": [ "tls.crt", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json index 5454be07f545..62b9c97f6f9d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json @@ -35,14 +35,23 @@ "generation": 1, "creationTimestamp": "2026-04-01T06:00:00Z", "labels": [ - { "name": "csi.storage.k8s.io/storageclass", "value": "managed-premium" } + { + "name": "csi.storage.k8s.io/storageclass", + "value": "managed-premium" + } ] }, "spec": { "storageClassName": "managed-premium", "nodeTopology": [ - { "name": "topology.kubernetes.io/zone", "value": "eastus-1" }, - { "name": "kubernetes.io/hostname", "value": "aks-nodepool1-12345678-vmss000000" } + { + "name": "topology.kubernetes.io/zone", + "value": "eastus-1" + }, + { + "name": "kubernetes.io/hostname", + "value": "aks-nodepool1-12345678-vmss000000" + } ], "storageCapacityAvailable": "512Gi", "maximumVolumeSize": "4Ti" diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json index e230b867fc51..f8e6a255e772 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json @@ -34,7 +34,10 @@ "generation": 1, "creationTimestamp": "2026-05-20T09:30:00Z", "labels": [ - { "name": "app", "value": "myapp" } + { + "name": "app", + "value": "myapp" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json index e7ec5b77997d..08eaa5d09146 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json @@ -35,19 +35,40 @@ "generation": 1, "creationTimestamp": "2026-05-01T12:00:00Z", "labels": [ - { "name": "app", "value": "myapp" }, - { "name": "environment", "value": "production" } + { + "name": "app", + "value": "myapp" + }, + { + "name": "environment", + "value": "production" + } ], "annotations": [ - { "name": "kubectl.kubernetes.io/last-applied-configuration", "value": "{}" } + { + "name": "kubectl.kubernetes.io/last-applied-configuration", + "value": "{}" + } ] }, "spec": { "configMapData": [ - { "name": "DATABASE_HOST", "value": "postgres.default.svc.cluster.local" }, - { "name": "DATABASE_PORT", "value": "5432" }, - { "name": "LOG_LEVEL", "value": "info" }, - { "name": "FEATURE_FLAGS", "value": "feature-a=true,feature-b=false" } + { + "name": "DATABASE_HOST", + "value": "postgres.default.svc.cluster.local" + }, + { + "name": "DATABASE_PORT", + "value": "5432" + }, + { + "name": "LOG_LEVEL", + "value": "info" + }, + { + "name": "FEATURE_FLAGS", + "value": "feature-a=true,feature-b=false" + } ], "configMapBinaryDataKeys": [ "tls.crt", From 822274ea2ddc554225e9de2c7187f807b9210a4e Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 8 Jun 2026 11:55:41 -0700 Subject: [PATCH 24/39] Pretty Fixes --- .../GetKubeInventory-CronJob.json | 23 ++++-- .../GetKubeInventory-DaemonSet.json | 53 +++++++++++--- .../GetKubeInventory-Deployment.json | 73 +++++++++++++++---- .../GetKubeInventory-EndpointSlice.json | 22 ++++-- ...KubeInventory-HorizontalPodAutoscaler.json | 45 +++++++++--- .../GetKubeInventory-Ingress.json | 23 ++++-- .../GetKubeInventory-IngressClass.json | 20 ++++- .../GetKubeInventory-Job.json | 28 +++++-- .../GetKubeInventory-NetworkPolicy.json | 45 +++++++++--- .../GetKubeInventory-Node.json | 55 +++++++++++--- .../GetKubeInventory-PersistentVolume.json | 9 ++- ...etKubeInventory-PersistentVolumeClaim.json | 18 ++++- .../GetKubeInventory-PodDisruptionBudget.json | 10 ++- .../GetKubeInventory-ReplicaSet.json | 36 +++++++-- .../GetKubeInventory-Role.json | 29 ++++++-- .../GetKubeInventory-Service.json | 14 +++- .../GetKubeInventory-ServiceAccount.json | 20 ++++- .../GetKubeInventory-StatefulSet.json | 62 +++++++++++++--- .../GetKubeInventory-StorageClass.json | 20 ++++- ...beInventory-ValidatingAdmissionPolicy.json | 10 ++- ...tory-ValidatingAdmissionPolicyBinding.json | 5 +- .../GetKubeInventory-VolumeAttachment.json | 5 +- .../2026-06-15-preview/GetKubeInventory.json | 23 ++++-- .../2026-06-15-preview/ListKubeInventory.json | 29 ++++++-- .../examples/GetKubeInventory-CronJob.json | 23 ++++-- .../examples/GetKubeInventory-DaemonSet.json | 53 +++++++++++--- .../examples/GetKubeInventory-Deployment.json | 73 +++++++++++++++---- .../GetKubeInventory-EndpointSlice.json | 22 ++++-- ...KubeInventory-HorizontalPodAutoscaler.json | 45 +++++++++--- .../examples/GetKubeInventory-Ingress.json | 23 ++++-- .../GetKubeInventory-IngressClass.json | 20 ++++- .../examples/GetKubeInventory-Job.json | 28 +++++-- .../GetKubeInventory-NetworkPolicy.json | 45 +++++++++--- .../examples/GetKubeInventory-Node.json | 55 +++++++++++--- .../GetKubeInventory-PersistentVolume.json | 9 ++- ...etKubeInventory-PersistentVolumeClaim.json | 18 ++++- .../GetKubeInventory-PodDisruptionBudget.json | 10 ++- .../examples/GetKubeInventory-ReplicaSet.json | 36 +++++++-- .../examples/GetKubeInventory-Role.json | 29 ++++++-- .../examples/GetKubeInventory-Service.json | 14 +++- .../GetKubeInventory-ServiceAccount.json | 20 ++++- .../GetKubeInventory-StatefulSet.json | 62 +++++++++++++--- .../GetKubeInventory-StorageClass.json | 20 ++++- ...beInventory-ValidatingAdmissionPolicy.json | 10 ++- ...tory-ValidatingAdmissionPolicyBinding.json | 5 +- .../GetKubeInventory-VolumeAttachment.json | 5 +- .../examples/GetKubeInventory.json | 23 ++++-- .../examples/ListKubeInventory.json | 29 ++++++-- 48 files changed, 1078 insertions(+), 276 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json index 54d5db53e780..0bb7bfbf50ac 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json @@ -35,7 +35,10 @@ "generation": 3, "creationTimestamp": "2026-01-05T00:00:00Z", "labels": [ - { "name": "app", "value": "report-generator" } + { + "name": "app", + "value": "report-generator" + } ] }, "spec": { @@ -53,12 +56,22 @@ "image": "myapp/reporter:latest", "imagePullPolicy": "Always", "envFrom": [ - { "configMapRef": "report-config" }, - { "secretRef": "report-credentials" } + { + "configMapRef": "report-config" + }, + { + "secretRef": "report-credentials" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "1000m", "memory": "1Gi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "1000m", + "memory": "1Gi" + } } } ] diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json index 09d6a902e439..94e3a78b13fe 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json @@ -35,13 +35,22 @@ "generation": 1, "creationTimestamp": "2026-02-01T12:00:00Z", "labels": [ - { "name": "app", "value": "fluent-bit" }, - { "name": "k8s-app", "value": "fluent-bit" } + { + "name": "app", + "value": "fluent-bit" + }, + { + "name": "k8s-app", + "value": "fluent-bit" + } ] }, "spec": { "selector": [ - { "name": "app", "value": "fluent-bit" } + { + "name": "app", + "value": "fluent-bit" + } ], "strategyType": "RollingUpdate", "maxUnavailable": "1", @@ -58,8 +67,16 @@ } ], "volumes": [ - { "name": "varlog", "sourceType": "hostPath", "source": "/var/log" }, - { "name": "varlibdockercontainers", "sourceType": "hostPath", "source": "/var/lib/docker/containers" } + { + "name": "varlog", + "sourceType": "hostPath", + "source": "/var/log" + }, + { + "name": "varlibdockercontainers", + "sourceType": "hostPath", + "source": "/var/lib/docker/containers" + } ], "containers": [ { @@ -67,15 +84,31 @@ "image": "fluent/fluent-bit:2.2.0", "imagePullPolicy": "IfNotPresent", "envFrom": [ - { "configMapRef": "fluent-bit-config" } + { + "configMapRef": "fluent-bit-config" + } ], "resources": { - "requests": { "cpu": "50m", "memory": "50Mi" }, - "limits": { "cpu": "200m", "memory": "200Mi" } + "requests": { + "cpu": "50m", + "memory": "50Mi" + }, + "limits": { + "cpu": "200m", + "memory": "200Mi" + } }, "volumeMounts": [ - { "name": "varlog", "mountPath": "/var/log", "readOnly": true }, - { "name": "varlibdockercontainers", "mountPath": "/var/lib/docker/containers", "readOnly": true } + { + "name": "varlog", + "mountPath": "/var/log", + "readOnly": true + }, + { + "name": "varlibdockercontainers", + "mountPath": "/var/lib/docker/containers", + "readOnly": true + } ], "securityContext": { "readOnlyRootFilesystem": false, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json index 4608e4d52ed6..2f8c402e7de4 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json @@ -35,17 +35,29 @@ "generation": 3, "creationTimestamp": "2026-04-15T09:00:00Z", "labels": [ - { "name": "app", "value": "nginx" }, - { "name": "version", "value": "1.25" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "version", + "value": "1.25" + } ], "annotations": [ - { "name": "deployment.kubernetes.io/revision", "value": "3" } + { + "name": "deployment.kubernetes.io/revision", + "value": "3" + } ] }, "spec": { "replicas": 3, "selector": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ], "strategyType": "RollingUpdate", "maxUnavailable": "25%", @@ -53,7 +65,10 @@ "serviceAccountName": "nginx-sa", "priorityClassName": "high-priority", "nodeSelector": [ - { "name": "kubernetes.io/os", "value": "linux" } + { + "name": "kubernetes.io/os", + "value": "linux" + } ], "securityContext": { "runAsNonRoot": true, @@ -71,7 +86,11 @@ } ], "volumes": [ - { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config" } + { + "name": "nginx-config", + "sourceType": "configMap", + "source": "nginx-config" + } ], "containers": [ { @@ -79,27 +98,53 @@ "image": "nginx:1.25.4", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" } + { + "name": "http", + "containerPort": 80, + "protocol": "TCP" + } ], "env": [ - { "name": "ENV", "value": "production" } + { + "name": "ENV", + "value": "production" + } ], "envFrom": [ - { "configMapRef": "app-config" }, - { "secretRef": "app-secrets", "prefix": "SECRET_" } + { + "configMapRef": "app-config" + }, + { + "secretRef": "app-secrets", + "prefix": "SECRET_" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "500m", "memory": "512Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "500m", + "memory": "512Mi" + } }, "volumeMounts": [ - { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true } + { + "name": "nginx-config", + "mountPath": "/etc/nginx/conf.d", + "readOnly": true + } ], "securityContext": { "allowPrivilegeEscalation": false, "readOnlyRootFilesystem": true, "privileged": false, - "capabilities": { "drop": ["ALL"] } + "capabilities": { + "drop": [ + "ALL" + ] + } } } ] diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json index 0e8b46e714a5..7682d821e7f2 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json @@ -35,8 +35,14 @@ "generation": 1, "creationTimestamp": "2026-05-10T14:00:00Z", "labels": [ - { "name": "kubernetes.io/service-name", "value": "myapp" }, - { "name": "endpointslice.kubernetes.io/managed-by", "value": "endpointslice-controller.k8s.io" } + { + "name": "kubernetes.io/service-name", + "value": "myapp" + }, + { + "name": "endpointslice.kubernetes.io/managed-by", + "value": "endpointslice-controller.k8s.io" + } ], "ownerReferences": [ { @@ -51,7 +57,9 @@ "endpointSliceAddressType": "IPv4", "endpointSliceEndpoints": [ { - "addresses": ["10.244.1.5"], + "addresses": [ + "10.244.1.5" + ], "ready": true, "nodeName": "aks-nodepool1-12345678-vmss000000", "targetRefKind": "Pod", @@ -59,7 +67,9 @@ "targetRefNamespace": "default" }, { - "addresses": ["10.244.2.8"], + "addresses": [ + "10.244.2.8" + ], "ready": true, "nodeName": "aks-nodepool1-12345678-vmss000001", "targetRefKind": "Pod", @@ -67,7 +77,9 @@ "targetRefNamespace": "default" }, { - "addresses": ["10.244.3.12"], + "addresses": [ + "10.244.3.12" + ], "ready": false, "nodeName": "aks-nodepool1-12345678-vmss000002", "targetRefKind": "Pod", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json index 3af9b66034d2..fb9a16ac2e7e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json @@ -34,7 +34,10 @@ "resourceVersion": "1578901", "creationTimestamp": "2026-04-20T10:00:00Z", "labels": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "spec": { @@ -43,14 +46,38 @@ "minReplicas": 2, "maxReplicas": 10, "additionalFields": [ - { "name": "metrics[0].type", "value": "Resource" }, - { "name": "metrics[0].resource.name", "value": "cpu" }, - { "name": "metrics[0].resource.target.type", "value": "Utilization" }, - { "name": "metrics[0].resource.target.averageUtilization", "value": "70" }, - { "name": "metrics[1].type", "value": "Resource" }, - { "name": "metrics[1].resource.name", "value": "memory" }, - { "name": "metrics[1].resource.target.type", "value": "Utilization" }, - { "name": "metrics[1].resource.target.averageUtilization", "value": "80" } + { + "name": "metrics[0].type", + "value": "Resource" + }, + { + "name": "metrics[0].resource.name", + "value": "cpu" + }, + { + "name": "metrics[0].resource.target.type", + "value": "Utilization" + }, + { + "name": "metrics[0].resource.target.averageUtilization", + "value": "70" + }, + { + "name": "metrics[1].type", + "value": "Resource" + }, + { + "name": "metrics[1].resource.name", + "value": "memory" + }, + { + "name": "metrics[1].resource.target.type", + "value": "Utilization" + }, + { + "name": "metrics[1].resource.target.averageUtilization", + "value": "80" + } ] }, "status": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json index 964a1080d912..59b2376bbebd 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json @@ -34,11 +34,20 @@ "resourceVersion": "1134567", "creationTimestamp": "2026-04-01T08:00:00Z", "labels": [ - { "name": "app", "value": "myapp" } + { + "name": "app", + "value": "myapp" + } ], "annotations": [ - { "name": "nginx.ingress.kubernetes.io/rewrite-target", "value": "/" }, - { "name": "nginx.ingress.kubernetes.io/ssl-redirect", "value": "true" } + { + "name": "nginx.ingress.kubernetes.io/rewrite-target", + "value": "/" + }, + { + "name": "nginx.ingress.kubernetes.io/ssl-redirect", + "value": "true" + } ] }, "spec": { @@ -66,13 +75,17 @@ ], "ingressTls": [ { - "hosts": ["myapp.example.com"], + "hosts": [ + "myapp.example.com" + ], "secretName": "myapp-tls-cert" } ] }, "status": { - "loadBalancerIngress": ["203.0.113.10"], + "loadBalancerIngress": [ + "203.0.113.10" + ], "conditions": [] }, "events": [ diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json index c4c228758d9c..de97c71b00d0 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json @@ -33,12 +33,24 @@ "resourceVersion": "9345678", "creationTimestamp": "2026-01-10T07:30:00Z", "labels": [ - { "name": "app.kubernetes.io/component", "value": "controller" }, - { "name": "app.kubernetes.io/instance", "value": "ingress-nginx" }, - { "name": "app.kubernetes.io/name", "value": "ingress-nginx" } + { + "name": "app.kubernetes.io/component", + "value": "controller" + }, + { + "name": "app.kubernetes.io/instance", + "value": "ingress-nginx" + }, + { + "name": "app.kubernetes.io/name", + "value": "ingress-nginx" + } ], "annotations": [ - { "name": "ingressclass.kubernetes.io/is-default-class", "value": "true" } + { + "name": "ingressclass.kubernetes.io/is-default-class", + "value": "true" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json index eeaa27378fb6..8c3b926b9e10 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json @@ -35,8 +35,14 @@ "generation": 1, "creationTimestamp": "2026-06-01T06:00:00Z", "labels": [ - { "name": "app", "value": "db-migration" }, - { "name": "batch.kubernetes.io/job-name", "value": "db-migration" } + { + "name": "app", + "value": "db-migration" + }, + { + "name": "batch.kubernetes.io/job-name", + "value": "db-migration" + } ] }, "spec": { @@ -54,12 +60,22 @@ "image": "myapp/migration:v2.3.0", "imagePullPolicy": "Always", "envFrom": [ - { "secretRef": "db-credentials" }, - { "configMapRef": "migration-config" } + { + "secretRef": "db-credentials" + }, + { + "configMapRef": "migration-config" + } ], "resources": { - "requests": { "cpu": "200m", "memory": "256Mi" }, - "limits": { "cpu": "500m", "memory": "512Mi" } + "requests": { + "cpu": "200m", + "memory": "256Mi" + }, + "limits": { + "cpu": "500m", + "memory": "512Mi" + } }, "securityContext": { "allowPrivilegeEscalation": false, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json index 01af9d6154f4..b51e889ab50e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json @@ -34,21 +34,48 @@ "resourceVersion": "1245678", "creationTimestamp": "2026-02-15T12:00:00Z", "labels": [ - { "name": "policy-type", "value": "isolation" } + { + "name": "policy-type", + "value": "isolation" + } ] }, "spec": { "podSelectorLabels": [ - { "name": "app", "value": "myapp" } + { + "name": "app", + "value": "myapp" + } + ], + "networkPolicyTypes": [ + "Ingress", + "Egress" ], - "networkPolicyTypes": ["Ingress", "Egress"], "additionalFields": [ - { "name": "ingress[0].from[0].podSelector.matchLabels.app", "value": "frontend" }, - { "name": "ingress[0].ports[0].port", "value": "8080" }, - { "name": "ingress[0].ports[0].protocol", "value": "TCP" }, - { "name": "egress[0].to[0].namespaceSelector.matchLabels.name", "value": "kube-system" }, - { "name": "egress[0].ports[0].port", "value": "53" }, - { "name": "egress[0].ports[0].protocol", "value": "UDP" } + { + "name": "ingress[0].from[0].podSelector.matchLabels.app", + "value": "frontend" + }, + { + "name": "ingress[0].ports[0].port", + "value": "8080" + }, + { + "name": "ingress[0].ports[0].protocol", + "value": "TCP" + }, + { + "name": "egress[0].to[0].namespaceSelector.matchLabels.name", + "value": "kube-system" + }, + { + "name": "egress[0].ports[0].port", + "value": "53" + }, + { + "name": "egress[0].ports[0].protocol", + "value": "UDP" + } ] }, "status": {}, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json index f2695b0848b4..e562f65ec839 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json @@ -33,15 +33,36 @@ "resourceVersion": "6789012", "creationTimestamp": "2026-01-10T07:00:00Z", "labels": [ - { "name": "kubernetes.io/os", "value": "linux" }, - { "name": "kubernetes.io/arch", "value": "amd64" }, - { "name": "node.kubernetes.io/instance-type", "value": "Standard_D4s_v3" }, - { "name": "topology.kubernetes.io/zone", "value": "eastus-1" }, - { "name": "agentpool", "value": "nodepool1" } + { + "name": "kubernetes.io/os", + "value": "linux" + }, + { + "name": "kubernetes.io/arch", + "value": "amd64" + }, + { + "name": "node.kubernetes.io/instance-type", + "value": "Standard_D4s_v3" + }, + { + "name": "topology.kubernetes.io/zone", + "value": "eastus-1" + }, + { + "name": "agentpool", + "value": "nodepool1" + } ], "annotations": [ - { "name": "node.alpha.kubernetes.io/ttl", "value": "0" }, - { "name": "volumes.kubernetes.io/controller-managed-attach-detach", "value": "true" } + { + "name": "node.alpha.kubernetes.io/ttl", + "value": "0" + }, + { + "name": "volumes.kubernetes.io/controller-managed-attach-detach", + "value": "true" + } ] }, "spec": { @@ -57,8 +78,14 @@ }, "status": { "nodeAddresses": [ - { "type": "InternalIP", "address": "10.240.0.4" }, - { "type": "Hostname", "address": "aks-nodepool1-12345678-0" } + { + "type": "InternalIP", + "address": "10.240.0.4" + }, + { + "type": "Hostname", + "address": "aks-nodepool1-12345678-0" + } ], "nodeInfo": { "kernelVersion": "5.15.0-1057-azure", @@ -82,8 +109,14 @@ "ephemeralStorage": "109Gi" }, "volumesAttached": [ - { "name": "kubernetes-dynamic-pvc-a1b2c3d4", "devicePath": "/dev/sdc" }, - { "name": "kubernetes-dynamic-pvc-e5f6a7b8", "devicePath": "/dev/sdd" } + { + "name": "kubernetes-dynamic-pvc-a1b2c3d4", + "devicePath": "/dev/sdc" + }, + { + "name": "kubernetes-dynamic-pvc-e5f6a7b8", + "devicePath": "/dev/sdd" + } ], "conditions": [ { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json index 06018502eada..a3e32d85ef73 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json @@ -33,12 +33,17 @@ "resourceVersion": "9123456", "creationTimestamp": "2026-03-01T10:00:05Z", "labels": [ - { "name": "failure-domain.beta.kubernetes.io/zone", "value": "eastus-1" } + { + "name": "failure-domain.beta.kubernetes.io/zone", + "value": "eastus-1" + } ] }, "spec": { "storageCapacity": "50Gi", - "accessModes": ["ReadWriteOnce"], + "accessModes": [ + "ReadWriteOnce" + ], "reclaimPolicy": "Delete", "storageClassName": "managed-premium", "volumeMode": "Filesystem", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json index c702bbecc94a..4c7e00308615 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json @@ -34,12 +34,20 @@ "resourceVersion": "9012345", "creationTimestamp": "2026-03-01T10:00:05Z", "labels": [ - { "name": "app", "value": "postgres" }, - { "name": "statefulset.kubernetes.io/pod-name", "value": "postgres-0" } + { + "name": "app", + "value": "postgres" + }, + { + "name": "statefulset.kubernetes.io/pod-name", + "value": "postgres-0" + } ] }, "spec": { - "accessModes": ["ReadWriteOnce"], + "accessModes": [ + "ReadWriteOnce" + ], "storageClassName": "managed-premium", "storageRequest": "50Gi", "volumeMode": "Filesystem", @@ -48,7 +56,9 @@ "status": { "phase": "Bound", "pvcCapacity": "50Gi", - "pvcAccessModes": ["ReadWriteOnce"], + "pvcAccessModes": [ + "ReadWriteOnce" + ], "conditions": [] }, "events": [], diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json index fc8b83064431..2d5800591be5 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json @@ -34,13 +34,19 @@ "resourceVersion": "1689012", "creationTimestamp": "2026-04-21T09:00:00Z", "labels": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "spec": { "minAvailable": "2", "serviceSelector": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "status": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json index 470196b5af13..ee6e2fe05e41 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json @@ -35,8 +35,14 @@ "generation": 1, "creationTimestamp": "2026-04-15T09:00:10Z", "labels": [ - { "name": "app", "value": "nginx" }, - { "name": "pod-template-hash", "value": "7d9f8c" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "pod-template-hash", + "value": "7d9f8c" + } ], "ownerReferences": [ { @@ -52,8 +58,14 @@ "spec": { "replicas": 3, "selector": [ - { "name": "app", "value": "nginx" }, - { "name": "pod-template-hash", "value": "7d9f8c" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "pod-template-hash", + "value": "7d9f8c" + } ], "containers": [ { @@ -61,11 +73,21 @@ "image": "nginx:1.25.4", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" } + { + "name": "http", + "containerPort": 80, + "protocol": "TCP" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "500m", "memory": "512Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "500m", + "memory": "512Mi" + } } } ] diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json index d2d308f4332a..bb535f360b73 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json @@ -37,14 +37,31 @@ "spec": { "rbacRules": [ { - "apiGroups": [""], - "resources": ["pods", "pods/log"], - "verbs": ["get", "list", "watch"] + "apiGroups": [ + "" + ], + "resources": [ + "pods", + "pods/log" + ], + "verbs": [ + "get", + "list", + "watch" + ] }, { - "apiGroups": ["apps"], - "resources": ["deployments", "replicasets"], - "verbs": ["get", "list"] + "apiGroups": [ + "apps" + ], + "resources": [ + "deployments", + "replicasets" + ], + "verbs": [ + "get", + "list" + ] } ] }, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json index 3864418947aa..116723321d28 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json @@ -34,7 +34,10 @@ "resourceVersion": "5678901", "creationTimestamp": "2026-04-15T09:00:00Z", "labels": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "spec": { @@ -55,14 +58,19 @@ } ], "serviceSelector": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ], "externalTrafficPolicy": "Local", "loadBalancerClass": "service.beta.kubernetes.io/azure-load-balancer-internal", "loadBalancerIp": "52.183.12.45" }, "status": { - "loadBalancerIngress": ["52.183.12.45"], + "loadBalancerIngress": [ + "52.183.12.45" + ], "conditions": [ { "type": "Available", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json index c4905fdf2d40..f1e2029d1508 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json @@ -34,12 +34,24 @@ "resourceVersion": "9234567", "creationTimestamp": "2026-01-15T08:00:00Z", "labels": [ - { "name": "app", "value": "nginx" }, - { "name": "app.kubernetes.io/managed-by", "value": "Helm" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "app.kubernetes.io/managed-by", + "value": "Helm" + } ], "annotations": [ - { "name": "eks.amazonaws.com/role-arn", "value": "" }, - { "name": "meta.helm.sh/release-name", "value": "nginx" } + { + "name": "eks.amazonaws.com/role-arn", + "value": "" + }, + { + "name": "meta.helm.sh/release-name", + "value": "nginx" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json index c10f061435e4..dab86948c263 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json @@ -35,15 +35,24 @@ "generation": 2, "creationTimestamp": "2026-03-10T08:00:00Z", "labels": [ - { "name": "app", "value": "postgres" }, - { "name": "tier", "value": "database" } + { + "name": "app", + "value": "postgres" + }, + { + "name": "tier", + "value": "database" + } ] }, "spec": { "replicas": 3, "serviceName": "postgres-headless", "selector": [ - { "name": "app", "value": "postgres" } + { + "name": "app", + "value": "postgres" + } ], "strategyType": "RollingUpdate", "maxUnavailableReplicas": "1", @@ -56,7 +65,11 @@ "runAsNonRoot": true }, "volumes": [ - { "name": "config", "sourceType": "configMap", "source": "postgres-config" } + { + "name": "config", + "sourceType": "configMap", + "source": "postgres-config" + } ], "containers": [ { @@ -64,21 +77,44 @@ "image": "postgres:15.4", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "postgres", "containerPort": 5432, "protocol": "TCP" } + { + "name": "postgres", + "containerPort": 5432, + "protocol": "TCP" + } ], "env": [ - { "name": "POSTGRES_DB", "value": "appdb" } + { + "name": "POSTGRES_DB", + "value": "appdb" + } ], "envFrom": [ - { "secretRef": "postgres-credentials" } + { + "secretRef": "postgres-credentials" + } ], "resources": { - "requests": { "cpu": "500m", "memory": "1Gi" }, - "limits": { "cpu": "2", "memory": "4Gi" } + "requests": { + "cpu": "500m", + "memory": "1Gi" + }, + "limits": { + "cpu": "2", + "memory": "4Gi" + } }, "volumeMounts": [ - { "name": "data", "mountPath": "/var/lib/postgresql/data", "subPath": "postgres" }, - { "name": "config", "mountPath": "/etc/postgresql", "readOnly": true } + { + "name": "data", + "mountPath": "/var/lib/postgresql/data", + "subPath": "postgres" + }, + { + "name": "config", + "mountPath": "/etc/postgresql", + "readOnly": true + } ], "securityContext": { "allowPrivilegeEscalation": false, @@ -90,7 +126,9 @@ "volumeClaimTemplates": [ { "name": "data", - "accessModes": ["ReadWriteOnce"], + "accessModes": [ + "ReadWriteOnce" + ], "storageClassName": "managed-premium", "storageRequest": "20Gi", "volumeMode": "Filesystem" diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json index 911ebf69cbd1..e67351e40dd3 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json @@ -33,7 +33,10 @@ "resourceVersion": "1023456", "creationTimestamp": "2026-01-10T07:00:10Z", "annotations": [ - { "name": "storageclass.kubernetes.io/is-default-class", "value": "false" } + { + "name": "storageclass.kubernetes.io/is-default-class", + "value": "false" + } ] }, "spec": { @@ -42,9 +45,18 @@ "volumeBindingMode": "WaitForFirstConsumer", "allowVolumeExpansion": true, "additionalFields": [ - { "name": "parameters.skuName", "value": "Premium_LRS" }, - { "name": "parameters.kind", "value": "Managed" }, - { "name": "parameters.cachingMode", "value": "ReadOnly" } + { + "name": "parameters.skuName", + "value": "Premium_LRS" + }, + { + "name": "parameters.kind", + "value": "Managed" + }, + { + "name": "parameters.cachingMode", + "value": "ReadOnly" + } ] }, "status": {}, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json index e8db6cc17321..e88eae6ee55c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json @@ -34,10 +34,16 @@ "generation": 1, "creationTimestamp": "2026-03-15T11:00:00Z", "labels": [ - { "name": "policy.security.io/category", "value": "pod-security" } + { + "name": "policy.security.io/category", + "value": "pod-security" + } ], "annotations": [ - { "name": "policy.security.io/severity", "value": "critical" } + { + "name": "policy.security.io/severity", + "value": "critical" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json index 65cf27b91007..5641c4cad758 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json @@ -34,7 +34,10 @@ "generation": 1, "creationTimestamp": "2026-03-15T11:05:00Z", "labels": [ - { "name": "policy.security.io/category", "value": "pod-security" } + { + "name": "policy.security.io/category", + "value": "pod-security" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json index 01e8642160bd..69296b683075 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json @@ -33,7 +33,10 @@ "resourceVersion": "9123456", "creationTimestamp": "2026-03-01T10:00:10Z", "labels": [ - { "name": "app.kubernetes.io/managed-by", "value": "disk.csi.azure.com" } + { + "name": "app.kubernetes.io/managed-by", + "value": "disk.csi.azure.com" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json index 53623d74577f..3072c74d2b4b 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json @@ -69,8 +69,14 @@ "terminationGracePeriodSeconds": 30, "priorityClassName": "high-priority", "nodeSelector": [ - { "name": "kubernetes.io/os", "value": "linux" }, - { "name": "agentpool", "value": "nodepool1" } + { + "name": "kubernetes.io/os", + "value": "linux" + }, + { + "name": "agentpool", + "value": "nodepool1" + } ], "hostNetwork": false, "hostPid": false, @@ -141,7 +147,9 @@ } ], "envFrom": [ - { "configMapRef": "nginx-common-config" } + { + "configMapRef": "nginx-common-config" + } ], "resources": { "requests": { @@ -198,9 +206,14 @@ "status": { "phase": "Running", "podIp": "10.244.1.42", - "podIps": ["10.244.1.42", "fd00::1:2a"], + "podIps": [ + "10.244.1.42", + "fd00::1:2a" + ], "hostIp": "10.240.0.4", - "hostIps": ["10.240.0.4"], + "hostIps": [ + "10.240.0.4" + ], "startTime": "2026-05-01T10:00:05Z", "qosClass": "Burstable", "reason": "", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json index 8f99ec417ffc..9480d93a946a 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json @@ -206,8 +206,7 @@ ], "attachedToExtension": "azure-kube-inventory" } - } - , + }, { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", "name": "deployment-nginx-default", @@ -231,13 +230,19 @@ "generation": 3, "creationTimestamp": "2026-04-15T09:00:00Z", "labels": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "spec": { "replicas": 3, "selector": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ], "strategyType": "RollingUpdate", "maxUnavailable": "25%", @@ -248,11 +253,21 @@ "image": "nginx:1.25.4", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" } + { + "name": "http", + "containerPort": 80, + "protocol": "TCP" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "500m", "memory": "512Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "500m", + "memory": "512Mi" + } } } ] diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json index 54d5db53e780..0bb7bfbf50ac 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json @@ -35,7 +35,10 @@ "generation": 3, "creationTimestamp": "2026-01-05T00:00:00Z", "labels": [ - { "name": "app", "value": "report-generator" } + { + "name": "app", + "value": "report-generator" + } ] }, "spec": { @@ -53,12 +56,22 @@ "image": "myapp/reporter:latest", "imagePullPolicy": "Always", "envFrom": [ - { "configMapRef": "report-config" }, - { "secretRef": "report-credentials" } + { + "configMapRef": "report-config" + }, + { + "secretRef": "report-credentials" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "1000m", "memory": "1Gi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "1000m", + "memory": "1Gi" + } } } ] diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json index 09d6a902e439..94e3a78b13fe 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json @@ -35,13 +35,22 @@ "generation": 1, "creationTimestamp": "2026-02-01T12:00:00Z", "labels": [ - { "name": "app", "value": "fluent-bit" }, - { "name": "k8s-app", "value": "fluent-bit" } + { + "name": "app", + "value": "fluent-bit" + }, + { + "name": "k8s-app", + "value": "fluent-bit" + } ] }, "spec": { "selector": [ - { "name": "app", "value": "fluent-bit" } + { + "name": "app", + "value": "fluent-bit" + } ], "strategyType": "RollingUpdate", "maxUnavailable": "1", @@ -58,8 +67,16 @@ } ], "volumes": [ - { "name": "varlog", "sourceType": "hostPath", "source": "/var/log" }, - { "name": "varlibdockercontainers", "sourceType": "hostPath", "source": "/var/lib/docker/containers" } + { + "name": "varlog", + "sourceType": "hostPath", + "source": "/var/log" + }, + { + "name": "varlibdockercontainers", + "sourceType": "hostPath", + "source": "/var/lib/docker/containers" + } ], "containers": [ { @@ -67,15 +84,31 @@ "image": "fluent/fluent-bit:2.2.0", "imagePullPolicy": "IfNotPresent", "envFrom": [ - { "configMapRef": "fluent-bit-config" } + { + "configMapRef": "fluent-bit-config" + } ], "resources": { - "requests": { "cpu": "50m", "memory": "50Mi" }, - "limits": { "cpu": "200m", "memory": "200Mi" } + "requests": { + "cpu": "50m", + "memory": "50Mi" + }, + "limits": { + "cpu": "200m", + "memory": "200Mi" + } }, "volumeMounts": [ - { "name": "varlog", "mountPath": "/var/log", "readOnly": true }, - { "name": "varlibdockercontainers", "mountPath": "/var/lib/docker/containers", "readOnly": true } + { + "name": "varlog", + "mountPath": "/var/log", + "readOnly": true + }, + { + "name": "varlibdockercontainers", + "mountPath": "/var/lib/docker/containers", + "readOnly": true + } ], "securityContext": { "readOnlyRootFilesystem": false, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json index 4608e4d52ed6..2f8c402e7de4 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json @@ -35,17 +35,29 @@ "generation": 3, "creationTimestamp": "2026-04-15T09:00:00Z", "labels": [ - { "name": "app", "value": "nginx" }, - { "name": "version", "value": "1.25" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "version", + "value": "1.25" + } ], "annotations": [ - { "name": "deployment.kubernetes.io/revision", "value": "3" } + { + "name": "deployment.kubernetes.io/revision", + "value": "3" + } ] }, "spec": { "replicas": 3, "selector": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ], "strategyType": "RollingUpdate", "maxUnavailable": "25%", @@ -53,7 +65,10 @@ "serviceAccountName": "nginx-sa", "priorityClassName": "high-priority", "nodeSelector": [ - { "name": "kubernetes.io/os", "value": "linux" } + { + "name": "kubernetes.io/os", + "value": "linux" + } ], "securityContext": { "runAsNonRoot": true, @@ -71,7 +86,11 @@ } ], "volumes": [ - { "name": "nginx-config", "sourceType": "configMap", "source": "nginx-config" } + { + "name": "nginx-config", + "sourceType": "configMap", + "source": "nginx-config" + } ], "containers": [ { @@ -79,27 +98,53 @@ "image": "nginx:1.25.4", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" } + { + "name": "http", + "containerPort": 80, + "protocol": "TCP" + } ], "env": [ - { "name": "ENV", "value": "production" } + { + "name": "ENV", + "value": "production" + } ], "envFrom": [ - { "configMapRef": "app-config" }, - { "secretRef": "app-secrets", "prefix": "SECRET_" } + { + "configMapRef": "app-config" + }, + { + "secretRef": "app-secrets", + "prefix": "SECRET_" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "500m", "memory": "512Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "500m", + "memory": "512Mi" + } }, "volumeMounts": [ - { "name": "nginx-config", "mountPath": "/etc/nginx/conf.d", "readOnly": true } + { + "name": "nginx-config", + "mountPath": "/etc/nginx/conf.d", + "readOnly": true + } ], "securityContext": { "allowPrivilegeEscalation": false, "readOnlyRootFilesystem": true, "privileged": false, - "capabilities": { "drop": ["ALL"] } + "capabilities": { + "drop": [ + "ALL" + ] + } } } ] diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json index 0e8b46e714a5..7682d821e7f2 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json @@ -35,8 +35,14 @@ "generation": 1, "creationTimestamp": "2026-05-10T14:00:00Z", "labels": [ - { "name": "kubernetes.io/service-name", "value": "myapp" }, - { "name": "endpointslice.kubernetes.io/managed-by", "value": "endpointslice-controller.k8s.io" } + { + "name": "kubernetes.io/service-name", + "value": "myapp" + }, + { + "name": "endpointslice.kubernetes.io/managed-by", + "value": "endpointslice-controller.k8s.io" + } ], "ownerReferences": [ { @@ -51,7 +57,9 @@ "endpointSliceAddressType": "IPv4", "endpointSliceEndpoints": [ { - "addresses": ["10.244.1.5"], + "addresses": [ + "10.244.1.5" + ], "ready": true, "nodeName": "aks-nodepool1-12345678-vmss000000", "targetRefKind": "Pod", @@ -59,7 +67,9 @@ "targetRefNamespace": "default" }, { - "addresses": ["10.244.2.8"], + "addresses": [ + "10.244.2.8" + ], "ready": true, "nodeName": "aks-nodepool1-12345678-vmss000001", "targetRefKind": "Pod", @@ -67,7 +77,9 @@ "targetRefNamespace": "default" }, { - "addresses": ["10.244.3.12"], + "addresses": [ + "10.244.3.12" + ], "ready": false, "nodeName": "aks-nodepool1-12345678-vmss000002", "targetRefKind": "Pod", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json index 3af9b66034d2..fb9a16ac2e7e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json @@ -34,7 +34,10 @@ "resourceVersion": "1578901", "creationTimestamp": "2026-04-20T10:00:00Z", "labels": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "spec": { @@ -43,14 +46,38 @@ "minReplicas": 2, "maxReplicas": 10, "additionalFields": [ - { "name": "metrics[0].type", "value": "Resource" }, - { "name": "metrics[0].resource.name", "value": "cpu" }, - { "name": "metrics[0].resource.target.type", "value": "Utilization" }, - { "name": "metrics[0].resource.target.averageUtilization", "value": "70" }, - { "name": "metrics[1].type", "value": "Resource" }, - { "name": "metrics[1].resource.name", "value": "memory" }, - { "name": "metrics[1].resource.target.type", "value": "Utilization" }, - { "name": "metrics[1].resource.target.averageUtilization", "value": "80" } + { + "name": "metrics[0].type", + "value": "Resource" + }, + { + "name": "metrics[0].resource.name", + "value": "cpu" + }, + { + "name": "metrics[0].resource.target.type", + "value": "Utilization" + }, + { + "name": "metrics[0].resource.target.averageUtilization", + "value": "70" + }, + { + "name": "metrics[1].type", + "value": "Resource" + }, + { + "name": "metrics[1].resource.name", + "value": "memory" + }, + { + "name": "metrics[1].resource.target.type", + "value": "Utilization" + }, + { + "name": "metrics[1].resource.target.averageUtilization", + "value": "80" + } ] }, "status": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json index 964a1080d912..59b2376bbebd 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json @@ -34,11 +34,20 @@ "resourceVersion": "1134567", "creationTimestamp": "2026-04-01T08:00:00Z", "labels": [ - { "name": "app", "value": "myapp" } + { + "name": "app", + "value": "myapp" + } ], "annotations": [ - { "name": "nginx.ingress.kubernetes.io/rewrite-target", "value": "/" }, - { "name": "nginx.ingress.kubernetes.io/ssl-redirect", "value": "true" } + { + "name": "nginx.ingress.kubernetes.io/rewrite-target", + "value": "/" + }, + { + "name": "nginx.ingress.kubernetes.io/ssl-redirect", + "value": "true" + } ] }, "spec": { @@ -66,13 +75,17 @@ ], "ingressTls": [ { - "hosts": ["myapp.example.com"], + "hosts": [ + "myapp.example.com" + ], "secretName": "myapp-tls-cert" } ] }, "status": { - "loadBalancerIngress": ["203.0.113.10"], + "loadBalancerIngress": [ + "203.0.113.10" + ], "conditions": [] }, "events": [ diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json index c4c228758d9c..de97c71b00d0 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json @@ -33,12 +33,24 @@ "resourceVersion": "9345678", "creationTimestamp": "2026-01-10T07:30:00Z", "labels": [ - { "name": "app.kubernetes.io/component", "value": "controller" }, - { "name": "app.kubernetes.io/instance", "value": "ingress-nginx" }, - { "name": "app.kubernetes.io/name", "value": "ingress-nginx" } + { + "name": "app.kubernetes.io/component", + "value": "controller" + }, + { + "name": "app.kubernetes.io/instance", + "value": "ingress-nginx" + }, + { + "name": "app.kubernetes.io/name", + "value": "ingress-nginx" + } ], "annotations": [ - { "name": "ingressclass.kubernetes.io/is-default-class", "value": "true" } + { + "name": "ingressclass.kubernetes.io/is-default-class", + "value": "true" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json index eeaa27378fb6..8c3b926b9e10 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json @@ -35,8 +35,14 @@ "generation": 1, "creationTimestamp": "2026-06-01T06:00:00Z", "labels": [ - { "name": "app", "value": "db-migration" }, - { "name": "batch.kubernetes.io/job-name", "value": "db-migration" } + { + "name": "app", + "value": "db-migration" + }, + { + "name": "batch.kubernetes.io/job-name", + "value": "db-migration" + } ] }, "spec": { @@ -54,12 +60,22 @@ "image": "myapp/migration:v2.3.0", "imagePullPolicy": "Always", "envFrom": [ - { "secretRef": "db-credentials" }, - { "configMapRef": "migration-config" } + { + "secretRef": "db-credentials" + }, + { + "configMapRef": "migration-config" + } ], "resources": { - "requests": { "cpu": "200m", "memory": "256Mi" }, - "limits": { "cpu": "500m", "memory": "512Mi" } + "requests": { + "cpu": "200m", + "memory": "256Mi" + }, + "limits": { + "cpu": "500m", + "memory": "512Mi" + } }, "securityContext": { "allowPrivilegeEscalation": false, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json index 01af9d6154f4..b51e889ab50e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json @@ -34,21 +34,48 @@ "resourceVersion": "1245678", "creationTimestamp": "2026-02-15T12:00:00Z", "labels": [ - { "name": "policy-type", "value": "isolation" } + { + "name": "policy-type", + "value": "isolation" + } ] }, "spec": { "podSelectorLabels": [ - { "name": "app", "value": "myapp" } + { + "name": "app", + "value": "myapp" + } + ], + "networkPolicyTypes": [ + "Ingress", + "Egress" ], - "networkPolicyTypes": ["Ingress", "Egress"], "additionalFields": [ - { "name": "ingress[0].from[0].podSelector.matchLabels.app", "value": "frontend" }, - { "name": "ingress[0].ports[0].port", "value": "8080" }, - { "name": "ingress[0].ports[0].protocol", "value": "TCP" }, - { "name": "egress[0].to[0].namespaceSelector.matchLabels.name", "value": "kube-system" }, - { "name": "egress[0].ports[0].port", "value": "53" }, - { "name": "egress[0].ports[0].protocol", "value": "UDP" } + { + "name": "ingress[0].from[0].podSelector.matchLabels.app", + "value": "frontend" + }, + { + "name": "ingress[0].ports[0].port", + "value": "8080" + }, + { + "name": "ingress[0].ports[0].protocol", + "value": "TCP" + }, + { + "name": "egress[0].to[0].namespaceSelector.matchLabels.name", + "value": "kube-system" + }, + { + "name": "egress[0].ports[0].port", + "value": "53" + }, + { + "name": "egress[0].ports[0].protocol", + "value": "UDP" + } ] }, "status": {}, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json index f2695b0848b4..e562f65ec839 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json @@ -33,15 +33,36 @@ "resourceVersion": "6789012", "creationTimestamp": "2026-01-10T07:00:00Z", "labels": [ - { "name": "kubernetes.io/os", "value": "linux" }, - { "name": "kubernetes.io/arch", "value": "amd64" }, - { "name": "node.kubernetes.io/instance-type", "value": "Standard_D4s_v3" }, - { "name": "topology.kubernetes.io/zone", "value": "eastus-1" }, - { "name": "agentpool", "value": "nodepool1" } + { + "name": "kubernetes.io/os", + "value": "linux" + }, + { + "name": "kubernetes.io/arch", + "value": "amd64" + }, + { + "name": "node.kubernetes.io/instance-type", + "value": "Standard_D4s_v3" + }, + { + "name": "topology.kubernetes.io/zone", + "value": "eastus-1" + }, + { + "name": "agentpool", + "value": "nodepool1" + } ], "annotations": [ - { "name": "node.alpha.kubernetes.io/ttl", "value": "0" }, - { "name": "volumes.kubernetes.io/controller-managed-attach-detach", "value": "true" } + { + "name": "node.alpha.kubernetes.io/ttl", + "value": "0" + }, + { + "name": "volumes.kubernetes.io/controller-managed-attach-detach", + "value": "true" + } ] }, "spec": { @@ -57,8 +78,14 @@ }, "status": { "nodeAddresses": [ - { "type": "InternalIP", "address": "10.240.0.4" }, - { "type": "Hostname", "address": "aks-nodepool1-12345678-0" } + { + "type": "InternalIP", + "address": "10.240.0.4" + }, + { + "type": "Hostname", + "address": "aks-nodepool1-12345678-0" + } ], "nodeInfo": { "kernelVersion": "5.15.0-1057-azure", @@ -82,8 +109,14 @@ "ephemeralStorage": "109Gi" }, "volumesAttached": [ - { "name": "kubernetes-dynamic-pvc-a1b2c3d4", "devicePath": "/dev/sdc" }, - { "name": "kubernetes-dynamic-pvc-e5f6a7b8", "devicePath": "/dev/sdd" } + { + "name": "kubernetes-dynamic-pvc-a1b2c3d4", + "devicePath": "/dev/sdc" + }, + { + "name": "kubernetes-dynamic-pvc-e5f6a7b8", + "devicePath": "/dev/sdd" + } ], "conditions": [ { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json index 06018502eada..a3e32d85ef73 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json @@ -33,12 +33,17 @@ "resourceVersion": "9123456", "creationTimestamp": "2026-03-01T10:00:05Z", "labels": [ - { "name": "failure-domain.beta.kubernetes.io/zone", "value": "eastus-1" } + { + "name": "failure-domain.beta.kubernetes.io/zone", + "value": "eastus-1" + } ] }, "spec": { "storageCapacity": "50Gi", - "accessModes": ["ReadWriteOnce"], + "accessModes": [ + "ReadWriteOnce" + ], "reclaimPolicy": "Delete", "storageClassName": "managed-premium", "volumeMode": "Filesystem", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json index c702bbecc94a..4c7e00308615 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json @@ -34,12 +34,20 @@ "resourceVersion": "9012345", "creationTimestamp": "2026-03-01T10:00:05Z", "labels": [ - { "name": "app", "value": "postgres" }, - { "name": "statefulset.kubernetes.io/pod-name", "value": "postgres-0" } + { + "name": "app", + "value": "postgres" + }, + { + "name": "statefulset.kubernetes.io/pod-name", + "value": "postgres-0" + } ] }, "spec": { - "accessModes": ["ReadWriteOnce"], + "accessModes": [ + "ReadWriteOnce" + ], "storageClassName": "managed-premium", "storageRequest": "50Gi", "volumeMode": "Filesystem", @@ -48,7 +56,9 @@ "status": { "phase": "Bound", "pvcCapacity": "50Gi", - "pvcAccessModes": ["ReadWriteOnce"], + "pvcAccessModes": [ + "ReadWriteOnce" + ], "conditions": [] }, "events": [], diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json index fc8b83064431..2d5800591be5 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json @@ -34,13 +34,19 @@ "resourceVersion": "1689012", "creationTimestamp": "2026-04-21T09:00:00Z", "labels": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "spec": { "minAvailable": "2", "serviceSelector": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "status": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json index 470196b5af13..ee6e2fe05e41 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json @@ -35,8 +35,14 @@ "generation": 1, "creationTimestamp": "2026-04-15T09:00:10Z", "labels": [ - { "name": "app", "value": "nginx" }, - { "name": "pod-template-hash", "value": "7d9f8c" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "pod-template-hash", + "value": "7d9f8c" + } ], "ownerReferences": [ { @@ -52,8 +58,14 @@ "spec": { "replicas": 3, "selector": [ - { "name": "app", "value": "nginx" }, - { "name": "pod-template-hash", "value": "7d9f8c" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "pod-template-hash", + "value": "7d9f8c" + } ], "containers": [ { @@ -61,11 +73,21 @@ "image": "nginx:1.25.4", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" } + { + "name": "http", + "containerPort": 80, + "protocol": "TCP" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "500m", "memory": "512Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "500m", + "memory": "512Mi" + } } } ] diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json index d2d308f4332a..bb535f360b73 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json @@ -37,14 +37,31 @@ "spec": { "rbacRules": [ { - "apiGroups": [""], - "resources": ["pods", "pods/log"], - "verbs": ["get", "list", "watch"] + "apiGroups": [ + "" + ], + "resources": [ + "pods", + "pods/log" + ], + "verbs": [ + "get", + "list", + "watch" + ] }, { - "apiGroups": ["apps"], - "resources": ["deployments", "replicasets"], - "verbs": ["get", "list"] + "apiGroups": [ + "apps" + ], + "resources": [ + "deployments", + "replicasets" + ], + "verbs": [ + "get", + "list" + ] } ] }, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json index 3864418947aa..116723321d28 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json @@ -34,7 +34,10 @@ "resourceVersion": "5678901", "creationTimestamp": "2026-04-15T09:00:00Z", "labels": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "spec": { @@ -55,14 +58,19 @@ } ], "serviceSelector": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ], "externalTrafficPolicy": "Local", "loadBalancerClass": "service.beta.kubernetes.io/azure-load-balancer-internal", "loadBalancerIp": "52.183.12.45" }, "status": { - "loadBalancerIngress": ["52.183.12.45"], + "loadBalancerIngress": [ + "52.183.12.45" + ], "conditions": [ { "type": "Available", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json index c4905fdf2d40..f1e2029d1508 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json @@ -34,12 +34,24 @@ "resourceVersion": "9234567", "creationTimestamp": "2026-01-15T08:00:00Z", "labels": [ - { "name": "app", "value": "nginx" }, - { "name": "app.kubernetes.io/managed-by", "value": "Helm" } + { + "name": "app", + "value": "nginx" + }, + { + "name": "app.kubernetes.io/managed-by", + "value": "Helm" + } ], "annotations": [ - { "name": "eks.amazonaws.com/role-arn", "value": "" }, - { "name": "meta.helm.sh/release-name", "value": "nginx" } + { + "name": "eks.amazonaws.com/role-arn", + "value": "" + }, + { + "name": "meta.helm.sh/release-name", + "value": "nginx" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json index c10f061435e4..dab86948c263 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json @@ -35,15 +35,24 @@ "generation": 2, "creationTimestamp": "2026-03-10T08:00:00Z", "labels": [ - { "name": "app", "value": "postgres" }, - { "name": "tier", "value": "database" } + { + "name": "app", + "value": "postgres" + }, + { + "name": "tier", + "value": "database" + } ] }, "spec": { "replicas": 3, "serviceName": "postgres-headless", "selector": [ - { "name": "app", "value": "postgres" } + { + "name": "app", + "value": "postgres" + } ], "strategyType": "RollingUpdate", "maxUnavailableReplicas": "1", @@ -56,7 +65,11 @@ "runAsNonRoot": true }, "volumes": [ - { "name": "config", "sourceType": "configMap", "source": "postgres-config" } + { + "name": "config", + "sourceType": "configMap", + "source": "postgres-config" + } ], "containers": [ { @@ -64,21 +77,44 @@ "image": "postgres:15.4", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "postgres", "containerPort": 5432, "protocol": "TCP" } + { + "name": "postgres", + "containerPort": 5432, + "protocol": "TCP" + } ], "env": [ - { "name": "POSTGRES_DB", "value": "appdb" } + { + "name": "POSTGRES_DB", + "value": "appdb" + } ], "envFrom": [ - { "secretRef": "postgres-credentials" } + { + "secretRef": "postgres-credentials" + } ], "resources": { - "requests": { "cpu": "500m", "memory": "1Gi" }, - "limits": { "cpu": "2", "memory": "4Gi" } + "requests": { + "cpu": "500m", + "memory": "1Gi" + }, + "limits": { + "cpu": "2", + "memory": "4Gi" + } }, "volumeMounts": [ - { "name": "data", "mountPath": "/var/lib/postgresql/data", "subPath": "postgres" }, - { "name": "config", "mountPath": "/etc/postgresql", "readOnly": true } + { + "name": "data", + "mountPath": "/var/lib/postgresql/data", + "subPath": "postgres" + }, + { + "name": "config", + "mountPath": "/etc/postgresql", + "readOnly": true + } ], "securityContext": { "allowPrivilegeEscalation": false, @@ -90,7 +126,9 @@ "volumeClaimTemplates": [ { "name": "data", - "accessModes": ["ReadWriteOnce"], + "accessModes": [ + "ReadWriteOnce" + ], "storageClassName": "managed-premium", "storageRequest": "20Gi", "volumeMode": "Filesystem" diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json index 911ebf69cbd1..e67351e40dd3 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json @@ -33,7 +33,10 @@ "resourceVersion": "1023456", "creationTimestamp": "2026-01-10T07:00:10Z", "annotations": [ - { "name": "storageclass.kubernetes.io/is-default-class", "value": "false" } + { + "name": "storageclass.kubernetes.io/is-default-class", + "value": "false" + } ] }, "spec": { @@ -42,9 +45,18 @@ "volumeBindingMode": "WaitForFirstConsumer", "allowVolumeExpansion": true, "additionalFields": [ - { "name": "parameters.skuName", "value": "Premium_LRS" }, - { "name": "parameters.kind", "value": "Managed" }, - { "name": "parameters.cachingMode", "value": "ReadOnly" } + { + "name": "parameters.skuName", + "value": "Premium_LRS" + }, + { + "name": "parameters.kind", + "value": "Managed" + }, + { + "name": "parameters.cachingMode", + "value": "ReadOnly" + } ] }, "status": {}, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json index e8db6cc17321..e88eae6ee55c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json @@ -34,10 +34,16 @@ "generation": 1, "creationTimestamp": "2026-03-15T11:00:00Z", "labels": [ - { "name": "policy.security.io/category", "value": "pod-security" } + { + "name": "policy.security.io/category", + "value": "pod-security" + } ], "annotations": [ - { "name": "policy.security.io/severity", "value": "critical" } + { + "name": "policy.security.io/severity", + "value": "critical" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json index 65cf27b91007..5641c4cad758 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json @@ -34,7 +34,10 @@ "generation": 1, "creationTimestamp": "2026-03-15T11:05:00Z", "labels": [ - { "name": "policy.security.io/category", "value": "pod-security" } + { + "name": "policy.security.io/category", + "value": "pod-security" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json index 01e8642160bd..69296b683075 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json @@ -33,7 +33,10 @@ "resourceVersion": "9123456", "creationTimestamp": "2026-03-01T10:00:10Z", "labels": [ - { "name": "app.kubernetes.io/managed-by", "value": "disk.csi.azure.com" } + { + "name": "app.kubernetes.io/managed-by", + "value": "disk.csi.azure.com" + } ] }, "spec": { diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json index 53623d74577f..3072c74d2b4b 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json @@ -69,8 +69,14 @@ "terminationGracePeriodSeconds": 30, "priorityClassName": "high-priority", "nodeSelector": [ - { "name": "kubernetes.io/os", "value": "linux" }, - { "name": "agentpool", "value": "nodepool1" } + { + "name": "kubernetes.io/os", + "value": "linux" + }, + { + "name": "agentpool", + "value": "nodepool1" + } ], "hostNetwork": false, "hostPid": false, @@ -141,7 +147,9 @@ } ], "envFrom": [ - { "configMapRef": "nginx-common-config" } + { + "configMapRef": "nginx-common-config" + } ], "resources": { "requests": { @@ -198,9 +206,14 @@ "status": { "phase": "Running", "podIp": "10.244.1.42", - "podIps": ["10.244.1.42", "fd00::1:2a"], + "podIps": [ + "10.244.1.42", + "fd00::1:2a" + ], "hostIp": "10.240.0.4", - "hostIps": ["10.240.0.4"], + "hostIps": [ + "10.240.0.4" + ], "startTime": "2026-05-01T10:00:05Z", "qosClass": "Burstable", "reason": "", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json index 8f99ec417ffc..9480d93a946a 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json @@ -206,8 +206,7 @@ ], "attachedToExtension": "azure-kube-inventory" } - } - , + }, { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", "name": "deployment-nginx-default", @@ -231,13 +230,19 @@ "generation": 3, "creationTimestamp": "2026-04-15T09:00:00Z", "labels": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ] }, "spec": { "replicas": 3, "selector": [ - { "name": "app", "value": "nginx" } + { + "name": "app", + "value": "nginx" + } ], "strategyType": "RollingUpdate", "maxUnavailable": "25%", @@ -248,11 +253,21 @@ "image": "nginx:1.25.4", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "http", "containerPort": 80, "protocol": "TCP" } + { + "name": "http", + "containerPort": 80, + "protocol": "TCP" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" }, - "limits": { "cpu": "500m", "memory": "512Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + }, + "limits": { + "cpu": "500m", + "memory": "512Mi" + } } } ] From d93a2ebeadea2bc13b74387da99a422a5f3696ff Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 8 Jun 2026 12:47:44 -0700 Subject: [PATCH 25/39] Fix examples --- .../GetKubeInventory-CSIStorageCapacity.json | 12 ++++++------ .../GetKubeInventory-CSIStorageCapacity.json | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json index 62b9c97f6f9d..6edef9362d69 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json @@ -43,18 +43,18 @@ }, "spec": { "storageClassName": "managed-premium", - "nodeTopology": [ + "storageCapacityAvailable": "512Gi", + "maximumVolumeSize": "4Ti", + "additionalFields": [ { - "name": "topology.kubernetes.io/zone", + "name": "nodeTopology.matchLabels.topology.kubernetes.io/zone", "value": "eastus-1" }, { - "name": "kubernetes.io/hostname", + "name": "nodeTopology.matchLabels.kubernetes.io/hostname", "value": "aks-nodepool1-12345678-vmss000000" } - ], - "storageCapacityAvailable": "512Gi", - "maximumVolumeSize": "4Ti" + ] }, "attachedToExtension": "azure-kube-inventory" } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json index 62b9c97f6f9d..6edef9362d69 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json @@ -43,18 +43,18 @@ }, "spec": { "storageClassName": "managed-premium", - "nodeTopology": [ + "storageCapacityAvailable": "512Gi", + "maximumVolumeSize": "4Ti", + "additionalFields": [ { - "name": "topology.kubernetes.io/zone", + "name": "nodeTopology.matchLabels.topology.kubernetes.io/zone", "value": "eastus-1" }, { - "name": "kubernetes.io/hostname", + "name": "nodeTopology.matchLabels.kubernetes.io/hostname", "value": "aks-nodepool1-12345678-vmss000000" } - ], - "storageCapacityAvailable": "512Gi", - "maximumVolumeSize": "4Ti" + ] }, "attachedToExtension": "azure-kube-inventory" } From cc693851caaedc2dd3ec9afd35c102361e8ab0b0 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Mon, 8 Jun 2026 14:48:56 -0700 Subject: [PATCH 26/39] Update visibility property --- .../kubeInventory/models.tsp | 9 ++++++++ .../2026-06-15-preview/kubeInventory.json | 22 +++++++++++++------ .../upgradeAssessment/models.tsp | 5 +++++ .../2026-06-15-preview/upgradeAssessment.json | 9 ++++++-- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index 543856e9058c..01b4635df78c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -51,6 +51,8 @@ model OwnerReference { name?: string; /** UID of the owner object. */ + @key + @visibility(Lifecycle.Read) uid: string; /** True when this owner manages the lifecycle of the referencing object. */ @@ -1712,24 +1714,31 @@ model KubeInventoryProperties { * Kubernetes API version of the represented resource * (e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1'). */ + @visibility(Lifecycle.Read) apiVersion?: string; /** Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service'). */ + @visibility(Lifecycle.Read) kind?: string; /** Standard Kubernetes object metadata. */ + @visibility(Lifecycle.Read) metadata?: KubernetesObjectMeta; /** Desired state of the Kubernetes resource. */ + @visibility(Lifecycle.Read) spec?: KubernetesResourceSpec; /** Observed state of the Kubernetes resource, written by the controller. */ + @visibility(Lifecycle.Read) status?: KubernetesResourceStatus; /** Kubernetes events recorded against this resource. */ + @visibility(Lifecycle.Read) @identifiers(#[]) events?: KubernetesEvent[]; /** Name of the extension this inventory resource is attached to. */ + @visibility(Lifecycle.Read) attachedToExtension?: string; } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index b0365ad037d9..35bc5c769f22 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -843,23 +843,28 @@ "properties": { "apiVersion": { "type": "string", - "description": "Kubernetes API version of the represented resource\n(e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1')." + "description": "Kubernetes API version of the represented resource\n(e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1').", + "readOnly": true }, "kind": { "type": "string", - "description": "Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service')." + "description": "Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service').", + "readOnly": true }, "metadata": { "$ref": "#/definitions/KubernetesObjectMeta", - "description": "Standard Kubernetes object metadata." + "description": "Standard Kubernetes object metadata.", + "readOnly": true }, "spec": { "$ref": "#/definitions/KubernetesResourceSpec", - "description": "Desired state of the Kubernetes resource." + "description": "Desired state of the Kubernetes resource.", + "readOnly": true }, "status": { "$ref": "#/definitions/KubernetesResourceStatus", - "description": "Observed state of the Kubernetes resource, written by the controller." + "description": "Observed state of the Kubernetes resource, written by the controller.", + "readOnly": true }, "events": { "type": "array", @@ -867,11 +872,13 @@ "items": { "$ref": "#/definitions/KubernetesEvent" }, + "readOnly": true, "x-ms-identifiers": [] }, "attachedToExtension": { "type": "string", - "description": "Name of the extension this inventory resource is attached to." + "description": "Name of the extension this inventory resource is attached to.", + "readOnly": true } } }, @@ -2093,7 +2100,8 @@ }, "uid": { "type": "string", - "description": "UID of the owner object." + "description": "UID of the owner object.", + "readOnly": true }, "controller": { "type": "boolean", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp index 6f88253775de..871ce318174b 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp @@ -169,6 +169,7 @@ model ReadinessCheck { #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state" "This resource does not have a provisioning state per the original Swagger design" model UpgradeAssessmentProperties { /** Current Kubernetes version running on the cluster (e.g., '1.29'). */ + @visibility(Lifecycle.Read) currentKubernetesVersion?: string; /** Target Kubernetes version to evaluate for upgrade (e.g., '1.30'). */ @@ -183,23 +184,27 @@ model UpgradeAssessmentProperties { /** * Rolled-up severity across all checks; highest severity wins. */ + @visibility(Lifecycle.Read) overallSeverity?: Severity; /** * Per-component compatibility results with the target Kubernetes version. */ + @visibility(Lifecycle.Read) @identifiers(#[]) componentCompatibility?: ComponentCompatibility[]; /** * Deprecated Kubernetes APIs still in use in the cluster. */ + @visibility(Lifecycle.Read) @identifiers(#[]) deprecatedApis?: DeprecatedApiUsage[]; /** * Cluster readiness check results. */ + @visibility(Lifecycle.Read) @identifiers(#[]) readinessChecks?: ReadinessCheck[]; } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json index 68c5c52d8f25..2f53b895f476 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json @@ -489,7 +489,8 @@ "properties": { "currentKubernetesVersion": { "type": "string", - "description": "Current Kubernetes version running on the cluster (e.g., '1.29')." + "description": "Current Kubernetes version running on the cluster (e.g., '1.29').", + "readOnly": true }, "targetKubernetesVersion": { "type": "string", @@ -503,7 +504,8 @@ }, "overallSeverity": { "$ref": "#/definitions/Severity", - "description": "Rolled-up severity across all checks; highest severity wins." + "description": "Rolled-up severity across all checks; highest severity wins.", + "readOnly": true }, "componentCompatibility": { "type": "array", @@ -511,6 +513,7 @@ "items": { "$ref": "#/definitions/ComponentCompatibility" }, + "readOnly": true, "x-ms-identifiers": [] }, "deprecatedApis": { @@ -519,6 +522,7 @@ "items": { "$ref": "#/definitions/DeprecatedApiUsage" }, + "readOnly": true, "x-ms-identifiers": [] }, "readinessChecks": { @@ -527,6 +531,7 @@ "items": { "$ref": "#/definitions/ReadinessCheck" }, + "readOnly": true, "x-ms-identifiers": [] } } From 896b7dc375d3e6e1c407f4fc9039eef315a6b510 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Tue, 9 Jun 2026 14:29:46 -0700 Subject: [PATCH 27/39] Fix review comments --- .../kubeInventory/main.tsp | 2 +- .../kubeInventory/models.tsp | 13 ++++++++----- .../preview/2026-06-15-preview/kubeInventory.json | 15 ++++++++++++--- .../upgradeAssessment/models.tsp | 2 -- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp index da61b51316c5..0c766f3f8afd 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp @@ -13,7 +13,7 @@ using Azure.ResourceManager; using TypeSpec.Versioning; /** - * APIs for cluster upgrade assessment reports under Microsoft.KubernetesConfiguration. + * APIs for K8s inventory reports under Microsoft.KubernetesConfiguration. */ #suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "KubeInventory is a proxy resource provider under Microsoft.Kubernetes; no independent operations endpoint is registered." @armProviderNamespace diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp index 01b4635df78c..3ce28b50f2ac 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp @@ -3,7 +3,6 @@ import "@typespec/http"; import "@typespec/versioning"; import "@azure-tools/typespec-azure-resource-manager"; import "@azure-tools/typespec-azure-core"; -import "@azure-tools/typespec-client-generator-core"; using TypeSpec.Rest; using TypeSpec.Http; @@ -11,7 +10,6 @@ using TypeSpec.Versioning; using Azure.Core; using Azure.ResourceManager; using Azure.ResourceManager.Foundations; -using Azure.ClientGenerator.Core; namespace Microsoft.KubernetesConfiguration; @@ -227,9 +225,8 @@ union NetworkProtocol { } /** A port exposed by a container. */ -model ContainerPort { +model ContainerPortInfo { /** Port number exposed inside the container. */ - @clientName("portNumber", "csharp") containerPort: int32; /** Network protocol for this port. */ @@ -237,6 +234,12 @@ model ContainerPort { /** Optional name for this port. */ name?: string; + + /** Port number to expose on the host node. */ + hostPort?: int32; + + /** Host IP to bind the hostPort on. */ + hostIp?: string; } /** An environment variable set in a container. */ @@ -313,7 +316,7 @@ model ContainerSpec { /** Ports to expose from the container. */ @identifiers(#["name"]) - ports?: ContainerPort[]; + ports?: ContainerPortInfo[]; /** Environment variables to set in the container. */ @identifiers(#["name"]) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json index 35bc5c769f22..f3e8ce4358b0 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json @@ -3,7 +3,7 @@ "info": { "title": "KubeInventoryClient", "version": "2026-06-15-preview", - "description": "APIs for cluster upgrade assessment reports under Microsoft.KubernetesConfiguration.", + "description": "APIs for K8s inventory reports under Microsoft.KubernetesConfiguration.", "x-typespec-generated": [ { "emitter": "@azure-tools/typespec-autorest" @@ -328,7 +328,7 @@ ] } }, - "ContainerPort": { + "ContainerPortInfo": { "type": "object", "description": "A port exposed by a container.", "properties": { @@ -344,6 +344,15 @@ "name": { "type": "string", "description": "Optional name for this port." + }, + "hostPort": { + "type": "integer", + "format": "int32", + "description": "Port number to expose on the host node." + }, + "hostIp": { + "type": "string", + "description": "Host IP to bind the hostPort on." } }, "required": [ @@ -457,7 +466,7 @@ "type": "array", "description": "Ports to expose from the container.", "items": { - "$ref": "#/definitions/ContainerPort" + "$ref": "#/definitions/ContainerPortInfo" }, "x-ms-identifiers": [ "name" diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp index 871ce318174b..b53f1519386c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp @@ -3,7 +3,6 @@ import "@typespec/http"; import "@typespec/versioning"; import "@azure-tools/typespec-azure-resource-manager"; import "@azure-tools/typespec-azure-core"; -import "@azure-tools/typespec-client-generator-core"; using TypeSpec.Rest; using TypeSpec.Http; @@ -11,7 +10,6 @@ using TypeSpec.Versioning; using Azure.Core; using Azure.ResourceManager; using Azure.ResourceManager.Foundations; -using Azure.ClientGenerator.Core; namespace Microsoft.KubernetesConfiguration; From 9f5da37d457c5fbd39a1cfb04c9d5fef96cb5d58 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Wed, 10 Jun 2026 21:32:11 -0700 Subject: [PATCH 28/39] Rename to KubernetesResources and UpgradeAssessments --- .../KubernetesResource.tsp} | 45 +-- ...bernetesResources-CSIStorageCapacity.json} | 10 +- ...sResources-CertificateSigningRequest.json} | 10 +- .../GetKubernetesResources-ConfigMap.json} | 10 +- .../GetKubernetesResources-CronJob.json} | 10 +- .../GetKubernetesResources-DaemonSet.json | 93 ++++++ .../GetKubernetesResources-Deployment.json} | 10 +- ...GetKubernetesResources-EndpointSlice.json} | 10 +- ...tesResources-HorizontalPodAutoscaler.json} | 10 +- .../GetKubernetesResources-Ingress.json} | 10 +- .../GetKubernetesResources-IngressClass.json} | 10 +- .../GetKubernetesResources-Job.json} | 10 +- ...GetKubernetesResources-NetworkPolicy.json} | 10 +- .../GetKubernetesResources-Node.json} | 10 +- ...KubernetesResources-PersistentVolume.json} | 10 +- ...netesResources-PersistentVolumeClaim.json} | 10 +- .../GetKubernetesResources-Pod.json | 175 ++++++++++ ...ernetesResources-PodDisruptionBudget.json} | 10 +- .../GetKubernetesResources-ReplicaSet.json} | 10 +- .../GetKubernetesResources-Role.json} | 10 +- .../GetKubernetesResources-RoleBinding.json} | 10 +- .../GetKubernetesResources-Service.json} | 10 +- ...etKubernetesResources-ServiceAccount.json} | 42 +-- .../GetKubernetesResources-StatefulSet.json} | 10 +- .../GetKubernetesResources-StorageClass.json} | 10 +- ...sResources-ValidatingAdmissionPolicy.json} | 10 +- ...ces-ValidatingAdmissionPolicyBinding.json} | 10 +- ...KubernetesResources-VolumeAttachment.json} | 10 +- .../GetKubernetesResources.json} | 10 +- .../ListKubernetesResources.json} | 12 +- .../main.tsp | 6 +- .../models.tsp | 4 +- .../KubernetesResources.json} | 305 +++++++++--------- ...bernetesResources-CSIStorageCapacity.json} | 10 +- ...sResources-CertificateSigningRequest.json} | 10 +- .../GetKubernetesResources-ConfigMap.json} | 10 +- .../GetKubernetesResources-CronJob.json} | 10 +- .../GetKubernetesResources-DaemonSet.json | 93 ++++++ .../GetKubernetesResources-Deployment.json} | 10 +- ...GetKubernetesResources-EndpointSlice.json} | 10 +- ...tesResources-HorizontalPodAutoscaler.json} | 10 +- .../GetKubernetesResources-Ingress.json} | 10 +- .../GetKubernetesResources-IngressClass.json} | 10 +- .../examples/GetKubernetesResources-Job.json} | 10 +- ...GetKubernetesResources-NetworkPolicy.json} | 10 +- .../GetKubernetesResources-Node.json} | 10 +- ...KubernetesResources-PersistentVolume.json} | 10 +- ...netesResources-PersistentVolumeClaim.json} | 10 +- .../examples/GetKubernetesResources-Pod.json | 175 ++++++++++ ...ernetesResources-PodDisruptionBudget.json} | 10 +- .../GetKubernetesResources-ReplicaSet.json} | 10 +- .../GetKubernetesResources-Role.json} | 10 +- .../GetKubernetesResources-RoleBinding.json} | 10 +- .../GetKubernetesResources-Service.json} | 10 +- ...etKubernetesResources-ServiceAccount.json} | 42 +-- .../GetKubernetesResources-StatefulSet.json} | 10 +- .../GetKubernetesResources-StorageClass.json} | 10 +- ...sResources-ValidatingAdmissionPolicy.json} | 10 +- ...ces-ValidatingAdmissionPolicyBinding.json} | 10 +- ...KubernetesResources-VolumeAttachment.json} | 10 +- .../examples/GetKubernetesResources.json} | 10 +- .../examples/ListKubernetesResources.json} | 12 +- .../tspconfig.yaml | 24 +- .../GetKubeInventory-DaemonSet.json | 143 -------- .../examples/GetKubeInventory-DaemonSet.json | 143 -------- .../UpgradeAssessment.tsp | 14 +- .../GetUpgradeAssessments.json} | 8 +- .../ListUpgradeAssessments.json} | 6 +- .../main.tsp | 4 +- .../models.tsp | 0 .../examples/GetUpgradeAssessments.json} | 8 +- .../examples/ListUpgradeAssessments.json} | 6 +- .../upgradeAssessments.json} | 20 +- .../tspconfig.yaml | 24 +- 74 files changed, 1070 insertions(+), 834 deletions(-) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/KubeInventory.tsp => KubernetesResources/KubernetesResource.tsp} (60%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CSIStorageCapacity.json} (84%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CertificateSigningRequest.json} (87%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ConfigMap.json} (88%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CronJob.json} (90%) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-DaemonSet.json rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Deployment.json} (94%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-EndpointSlice.json} (91%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-HorizontalPodAutoscaler.json} (90%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Ingress.json} (91%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-IngressClass.json} (86%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Job.json} (92%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-NetworkPolicy.json} (88%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Node.json} (94%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PersistentVolume.json} (85%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PersistentVolumeClaim.json} (85%) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Pod.json rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PodDisruptionBudget.json} (86%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ReplicaSet.json} (91%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Role.json} (87%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-RoleBinding.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-RoleBinding.json} (84%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Service.json} (90%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ServiceAccount.json} (55%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-StatefulSet.json} (94%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-StorageClass.json} (86%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ValidatingAdmissionPolicy.json} (86%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json} (83%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-VolumeAttachment.json} (83%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json => KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources.json} (96%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json => KubernetesResources/examples/2026-06-15-preview/ListKubernetesResources.json} (96%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory => KubernetesResources}/main.tsp (77%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory => KubernetesResources}/models.tsp (99%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/kubeInventory.json => KubernetesResources/preview/2026-06-15-preview/KubernetesResources.json} (94%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CSIStorageCapacity.json} (84%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CertificateSigningRequest.json} (87%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ConfigMap.json} (88%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CronJob.json} (90%) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Deployment.json} (94%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-EndpointSlice.json} (91%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-HorizontalPodAutoscaler.json} (90%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Ingress.json} (91%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-IngressClass.json} (86%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Job.json} (92%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-NetworkPolicy.json} (88%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Node.json} (94%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PersistentVolume.json} (85%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PersistentVolumeClaim.json} (85%) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Pod.json rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PodDisruptionBudget.json} (86%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ReplicaSet.json} (91%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Role.json} (87%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-RoleBinding.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-RoleBinding.json} (84%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Service.json} (90%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ServiceAccount.json} (55%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-StatefulSet.json} (94%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-StorageClass.json} (86%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ValidatingAdmissionPolicy.json} (86%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json} (83%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-VolumeAttachment.json} (83%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json => KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources.json} (96%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json => KubernetesResources/preview/2026-06-15-preview/examples/ListKubernetesResources.json} (96%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{kubeInventory => KubernetesResources}/tspconfig.yaml (73%) delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json delete mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment => upgradeAssessments}/UpgradeAssessment.tsp (85%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json => upgradeAssessments/examples/2026-06-15-preview/GetUpgradeAssessments.json} (97%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json => upgradeAssessments/examples/2026-06-15-preview/ListUpgradeAssessments.json} (97%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment => upgradeAssessments}/main.tsp (81%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment => upgradeAssessments}/models.tsp (100%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json => upgradeAssessments/preview/2026-06-15-preview/examples/GetUpgradeAssessments.json} (97%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json => upgradeAssessments/preview/2026-06-15-preview/examples/ListUpgradeAssessments.json} (97%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json => upgradeAssessments/preview/2026-06-15-preview/upgradeAssessments.json} (96%) rename specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/{upgradeAssessment => upgradeAssessments}/tspconfig.yaml (83%) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/KubernetesResource.tsp similarity index 60% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/KubernetesResource.tsp index 9edd7d74dce1..a77e1c267d35 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/KubeInventory.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/KubernetesResource.tsp @@ -14,22 +14,22 @@ namespace Microsoft.KubernetesConfiguration; /** * Singleton container resource grouping cluster inventory reports. */ -model KubeInventory - is Azure.ResourceManager.ProxyResource { +model KubernetesResource + is Azure.ResourceManager.ProxyResource { ...ResourceNameParameter< - Resource = KubeInventory, - KeyName = "kubeInventoryName", - SegmentName = "kubeInventory", + Resource = KubernetesResource, + KeyName = "kubernetesResourceName", + SegmentName = "kubernetesResources", NamePattern = "^[a-z]([a-z0-9._-]{0,126}[a-z0-9])?$" >; } /** - * Operations alias for KubeInventory using the cluster extension routing pattern. + * Operations alias for KubernetesResources using the cluster extension routing pattern. * Generates URLs of the form: - * /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory[/{kubeInventoryName}] + * /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubernetesResources[/{kubernetesResourceName}] */ -alias KubeInventoryOps = Azure.ResourceManager.Legacy.ExtensionOperations< +alias KubernetesResourceOps = Azure.ResourceManager.Legacy.ExtensionOperations< { ...ApiVersionParameter; ...SubscriptionIdParameter; @@ -63,29 +63,32 @@ alias KubeInventoryOps = Azure.ResourceManager.Legacy.ExtensionOperations< clusterName: string; }, { - ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; - ...ParentKeysOf; + ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; + ...ParentKeysOf; }, { - ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; - ...KeysOf; + ...Azure.ResourceManager.Extension.ExtensionProviderNamespace; + ...KeysOf; } >; @armResourceOperations(#{ allowStaticRoutes: true, omitTags: true }) -interface KubeInventories { +interface KubernetesResources { /** - * Get the kubeInventory singleton for a cluster. + * Get the kubernetesResources singleton for a cluster. */ - @tag("KubeInventory") - get is KubeInventoryOps.Read; + @tag("KubernetesResources") + get is KubernetesResourceOps.Read; /** - * List kubeInventory containers for the cluster (currently always a single 'default'). + * List kubernetesResources containers for the cluster (currently always a single 'default'). */ - @tag("KubeInventory") - list is KubeInventoryOps.List; + @tag("KubernetesResources") + list is KubernetesResourceOps.List; } -@@doc(KubeInventory.name, "Name of the KubeInventory resource."); -@@doc(KubeInventory.properties, "Properties of the KubeInventory resource."); +@@doc(KubernetesResource.name, "Name of the KubernetesResources resource."); +@@doc( + KubernetesResource.properties, + "Properties of the KubernetesResources resource." +); diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CSIStorageCapacity.json similarity index 84% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CSIStorageCapacity.json index 6edef9362d69..b300a84a4d69 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CSIStorageCapacity.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CSIStorageCapacity.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - CSIStorageCapacity", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - CSIStorageCapacity", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "csistoragecapacity-managed-premium-pool1-kube-system", + "kubernetesResourceName": "csistoragecapacity-managed-premium-pool1-kube-system", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/csistoragecapacity-managed-premium-pool1-kube-system", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/csistoragecapacity-managed-premium-pool1-kube-system", "name": "csistoragecapacity-managed-premium-pool1-kube-system", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CertificateSigningRequest.json similarity index 87% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CertificateSigningRequest.json index f8e6a255e772..8d22cc009631 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CertificateSigningRequest.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CertificateSigningRequest.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - CertificateSigningRequest", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - CertificateSigningRequest", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "certificatesigningrequest-myapp-node-client", + "kubernetesResourceName": "certificatesigningrequest-myapp-node-client", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/certificatesigningrequest-myapp-node-client", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/certificatesigningrequest-myapp-node-client", "name": "certificatesigningrequest-myapp-node-client", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ConfigMap.json similarity index 88% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ConfigMap.json index 08eaa5d09146..654cb8053d11 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ConfigMap.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ConfigMap.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ConfigMap", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ConfigMap", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "configmap-app-config-default", + "kubernetesResourceName": "configmap-app-config-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/configmap-app-config-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/configmap-app-config-default", "name": "configmap-app-config-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CronJob.json similarity index 90% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CronJob.json index 0bb7bfbf50ac..ac9c83335905 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-CronJob.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-CronJob.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - CronJob", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - CronJob", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "cronjob-report-generator-default", + "kubernetesResourceName": "cronjob-report-generator-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/cronjob-report-generator-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/cronjob-report-generator-default", "name": "cronjob-report-generator-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-DaemonSet.json new file mode 100644 index 000000000000..384e2b0b1c53 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-DaemonSet.json @@ -0,0 +1,93 @@ +{ + "title": "Get KubernetesResources - DaemonSet", + "operationId": "KubernetesResources_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubernetesResourceName": "daemonset-kube-proxy-kube-system", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/daemonset-kube-proxy-kube-system", + "name": "daemonset-kube-proxy-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "DaemonSet", + "metadata": { + "name": "kube-proxy", + "namespaceName": "kube-system", + "uid": "a1b2c3d4-e5f6-7890-bcde-f01234567890", + "resourceVersion": "12345", + "generation": 1, + "creationTimestamp": "2026-01-01T00:00:00Z", + "labels": [ + { "name": "k8s-app", "value": "kube-proxy" }, + { "name": "component", "value": "kube-proxy" } + ] + }, + "spec": { + "selector": [ + { "name": "k8s-app", "value": "kube-proxy" } + ], + "strategyType": "RollingUpdate", + "maxUnavailable": "1", + "serviceAccountName": "kube-proxy", + "tolerations": [ + { "operator": "Exists" } + ], + "volumes": [ + { "name": "kube-proxy", "sourceType": "configMap", "source": "kube-proxy" }, + { "name": "xtables-lock", "sourceType": "hostPath", "source": "/run/xtables.lock" }, + { "name": "lib-modules", "sourceType": "hostPath", "source": "/lib/modules" } + ], + "containers": [ + { + "name": "kube-proxy", + "image": "registry.k8s.io/kube-proxy:v1.29.0", + "imagePullPolicy": "IfNotPresent", + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" } + }, + "volumeMounts": [ + { "name": "kube-proxy", "mountPath": "/var/lib/kube-proxy" }, + { "name": "xtables-lock", "mountPath": "/run/xtables.lock" }, + { "name": "lib-modules", "mountPath": "/lib/modules", "readOnly": true } + ], + "securityContext": { "privileged": true } + } + ] + }, + "status": { + "desiredNumberScheduled": 3, + "currentNumberScheduled": 3, + "numberReady": 3, + "numberMisscheduled": 0, + "numberUnavailable": 0, + "availableReplicas": 3, + "updatedReplicas": 3, + "observedGeneration": 1, + "conditions": [ + { "type": "Available", "status": "True", "lastTransitionTime": "2026-01-01T00:02:00Z" } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Deployment.json similarity index 94% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Deployment.json index 2f8c402e7de4..a5e4888279ac 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Deployment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Deployment.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Deployment", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Deployment", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "deployment-nginx-default", + "kubernetesResourceName": "deployment-nginx-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/deployment-nginx-default", "name": "deployment-nginx-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-EndpointSlice.json similarity index 91% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-EndpointSlice.json index 7682d821e7f2..99a44d336b00 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-EndpointSlice.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-EndpointSlice.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - EndpointSlice", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - EndpointSlice", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "endpointslice-myapp-abc12-default", + "kubernetesResourceName": "endpointslice-myapp-abc12-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/endpointslice-myapp-abc12-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/endpointslice-myapp-abc12-default", "name": "endpointslice-myapp-abc12-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-HorizontalPodAutoscaler.json similarity index 90% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-HorizontalPodAutoscaler.json index fb9a16ac2e7e..30ba9a88c27b 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-HorizontalPodAutoscaler.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-HorizontalPodAutoscaler.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - HorizontalPodAutoscaler", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - HorizontalPodAutoscaler", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "horizontalpodautoscaler-nginx-default", + "kubernetesResourceName": "horizontalpodautoscaler-nginx-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/horizontalpodautoscaler-nginx-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/horizontalpodautoscaler-nginx-default", "name": "horizontalpodautoscaler-nginx-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Ingress.json similarity index 91% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Ingress.json index 59b2376bbebd..8585220fe5f0 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Ingress.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Ingress.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Ingress", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Ingress", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "ingress-myapp-default", + "kubernetesResourceName": "ingress-myapp-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/ingress-myapp-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/ingress-myapp-default", "name": "ingress-myapp-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-IngressClass.json similarity index 86% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-IngressClass.json index de97c71b00d0..1ba627df1796 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-IngressClass.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-IngressClass.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - IngressClass", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - IngressClass", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "ingressclass-nginx", + "kubernetesResourceName": "ingressclass-nginx", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/ingressclass-nginx", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/ingressclass-nginx", "name": "ingressclass-nginx", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Job.json similarity index 92% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Job.json index 8c3b926b9e10..59c73ec2133e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Job.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Job.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Job", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Job", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "job-db-migration-default", + "kubernetesResourceName": "job-db-migration-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/job-db-migration-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/job-db-migration-default", "name": "job-db-migration-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-NetworkPolicy.json similarity index 88% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-NetworkPolicy.json index b51e889ab50e..12821dd35be1 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-NetworkPolicy.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-NetworkPolicy.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - NetworkPolicy", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - NetworkPolicy", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "networkpolicy-deny-external-default", + "kubernetesResourceName": "networkpolicy-deny-external-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/networkpolicy-deny-external-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/networkpolicy-deny-external-default", "name": "networkpolicy-deny-external-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Node.json similarity index 94% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Node.json index e562f65ec839..6a3d8f0d39fe 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Node.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Node.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Node", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Node", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "node-aks-nodepool1-12345678-0", + "kubernetesResourceName": "node-aks-nodepool1-12345678-0", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/node-aks-nodepool1-12345678-0", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/node-aks-nodepool1-12345678-0", "name": "node-aks-nodepool1-12345678-0", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PersistentVolume.json similarity index 85% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PersistentVolume.json index a3e32d85ef73..aa822cfed8ac 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolume.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PersistentVolume.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - PersistentVolume", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - PersistentVolume", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "kubernetesResourceName": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", "name": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PersistentVolumeClaim.json similarity index 85% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PersistentVolumeClaim.json index 4c7e00308615..85a8f4d7611e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PersistentVolumeClaim.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PersistentVolumeClaim.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - PersistentVolumeClaim", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - PersistentVolumeClaim", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "persistentvolumeclaim-data-postgres-0-default", + "kubernetesResourceName": "persistentvolumeclaim-data-postgres-0-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/persistentvolumeclaim-data-postgres-0-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/persistentvolumeclaim-data-postgres-0-default", "name": "persistentvolumeclaim-data-postgres-0-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Pod.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Pod.json new file mode 100644 index 000000000000..f44071397e6f --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Pod.json @@ -0,0 +1,175 @@ +{ + "title": "Get KubernetesResources - Pod", + "operationId": "KubernetesResources_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubernetesResourceName": "pod-coredns-5d78c9869d-r4pzt-kube-system", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/pod-coredns-5d78c9869d-r4pzt-kube-system", + "name": "pod-coredns-5d78c9869d-r4pzt-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "coredns-5d78c9869d-r4pzt", + "namespaceName": "kube-system", + "uid": "d4e5f6a7-b8c9-0123-defa-234567890123", + "resourceVersion": "7712091", + "generation": 1, + "creationTimestamp": "2026-04-01T08:05:00Z", + "labels": [ + { "name": "k8s-app", "value": "kube-dns" }, + { "name": "pod-template-hash", "value": "5d78c9869d" } + ], + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "name": "coredns-5d78c9869d", + "uid": "e5f6a7b8-c9d0-1234-efab-345678901234", + "controller": true, + "blockOwnerDeletion": true + } + ] + }, + "spec": { + "nodeName": "aks-nodepool1-12345678-1", + "restartPolicy": "Always", + "serviceAccountName": "coredns", + "dnsPolicy": "Default", + "terminationGracePeriodSeconds": 30, + "priorityClassName": "system-cluster-critical", + "securityContext": { + "runAsNonRoot": true + }, + "tolerations": [ + { "key": "CriticalAddonsOnly", "operator": "Exists" }, + { + "key": "node-role.kubernetes.io/control-plane", + "operator": "Exists", + "effect": "NoSchedule" + } + ], + "volumes": [ + { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, + { "name": "kube-api-access", "sourceType": "projected" } + ], + "containers": [ + { + "name": "coredns", + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "dns", "containerPort": 53, "protocol": "UDP" }, + { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, + { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "70Mi" }, + "limits": { "memory": "170Mi" } + }, + "volumeMounts": [ + { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, + { + "name": "kube-api-access", + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "readOnly": true + } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "capabilities": { + "add": ["NET_BIND_SERVICE"], + "drop": ["ALL"] + } + }, + "livenessProbe": { + "type": "HTTPGet", + "path": "/health", + "port": 8080 + }, + "readinessProbe": { + "type": "HTTPGet", + "path": "/ready", + "port": 8181 + } + } + ] + }, + "status": { + "phase": "Running", + "podIp": "10.244.0.3", + "podIps": ["10.244.0.3"], + "hostIp": "10.240.0.5", + "hostIps": ["10.240.0.5"], + "startTime": "2026-04-01T08:05:02Z", + "qosClass": "Burstable", + "reason": "", + "initContainerStatuses": [], + "conditions": [ + { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, + { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:00Z" } + ], + "containerStatuses": [ + { + "name": "coredns", + "ready": true, + "restartCount": 0, + "started": true, + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", + "state": { + "running": { "startedAt": "2026-04-01T08:05:13Z" } + } + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "Scheduled", + "age": "58d", + "from": "default-scheduler", + "message": "Successfully assigned kube-system/coredns-5d78c9869d-r4pzt to aks-nodepool1-12345678-1" + }, + { + "type": "Normal", + "reason": "Pulled", + "age": "58d", + "from": "kubelet", + "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" + }, + { + "type": "Normal", + "reason": "Started", + "age": "58d", + "from": "kubelet", + "message": "Started container coredns" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PodDisruptionBudget.json similarity index 86% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PodDisruptionBudget.json index 2d5800591be5..0830dd53428e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PodDisruptionBudget.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-PodDisruptionBudget.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - PodDisruptionBudget", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - PodDisruptionBudget", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "poddisruptionbudget-nginx-pdb-default", + "kubernetesResourceName": "poddisruptionbudget-nginx-pdb-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/poddisruptionbudget-nginx-pdb-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/poddisruptionbudget-nginx-pdb-default", "name": "poddisruptionbudget-nginx-pdb-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ReplicaSet.json similarity index 91% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ReplicaSet.json index ee6e2fe05e41..d7af1faa6cfc 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ReplicaSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ReplicaSet.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ReplicaSet", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ReplicaSet", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "replicaset-nginx-7d9f8c-default", + "kubernetesResourceName": "replicaset-nginx-7d9f8c-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/replicaset-nginx-7d9f8c-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/replicaset-nginx-7d9f8c-default", "name": "replicaset-nginx-7d9f8c-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Role.json similarity index 87% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Role.json index bb535f360b73..f0fe0aad8ef9 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Role.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Role.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Role", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Role", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "role-pod-reader-default", + "kubernetesResourceName": "role-pod-reader-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/role-pod-reader-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/role-pod-reader-default", "name": "role-pod-reader-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-RoleBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-RoleBinding.json similarity index 84% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-RoleBinding.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-RoleBinding.json index 01ac5def7af5..4989fe9bb673 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-RoleBinding.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-RoleBinding.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - RoleBinding", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - RoleBinding", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "rolebinding-read-pods-default", + "kubernetesResourceName": "rolebinding-read-pods-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/rolebinding-read-pods-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/rolebinding-read-pods-default", "name": "rolebinding-read-pods-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Service.json similarity index 90% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Service.json index 116723321d28..6de92eec1962 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-Service.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Service.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Service", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Service", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "service-nginx-default", + "kubernetesResourceName": "service-nginx-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/service-nginx-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/service-nginx-default", "name": "service-nginx-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ServiceAccount.json similarity index 55% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ServiceAccount.json index f1e2029d1508..0b52c834fa23 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ServiceAccount.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ServiceAccount.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ServiceAccount", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ServiceAccount", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "serviceaccount-nginx-sa-default", + "kubernetesResourceName": "serviceaccount-coredns-kube-system", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/serviceaccount-nginx-sa-default", - "name": "serviceaccount-nginx-sa-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/serviceaccount-coredns-kube-system", + "name": "serviceaccount-coredns-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", @@ -28,29 +28,19 @@ "apiVersion": "v1", "kind": "ServiceAccount", "metadata": { - "name": "nginx-sa", - "namespaceName": "default", - "uid": "f2a3b4c5-d6e7-8901-fabc-345678901234", - "resourceVersion": "9234567", - "creationTimestamp": "2026-01-15T08:00:00Z", + "name": "coredns", + "namespaceName": "kube-system", + "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901", + "resourceVersion": "890123", + "creationTimestamp": "2026-01-01T00:00:00Z", "labels": [ - { - "name": "app", - "value": "nginx" - }, - { - "name": "app.kubernetes.io/managed-by", - "value": "Helm" - } + { "name": "k8s-app", "value": "kube-dns" }, + { "name": "kubernetes.io/cluster-service", "value": "true" } ], "annotations": [ { - "name": "eks.amazonaws.com/role-arn", - "value": "" - }, - { - "name": "meta.helm.sh/release-name", - "value": "nginx" + "name": "kubectl.kubernetes.io/last-applied-configuration", + "value": "{}" } ] }, @@ -66,4 +56,4 @@ } } } -} +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-StatefulSet.json similarity index 94% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-StatefulSet.json index dab86948c263..8b299265f767 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StatefulSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-StatefulSet.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - StatefulSet", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - StatefulSet", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "statefulset-postgres-data", + "kubernetesResourceName": "statefulset-postgres-data", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/statefulset-postgres-data", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/statefulset-postgres-data", "name": "statefulset-postgres-data", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-StorageClass.json similarity index 86% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-StorageClass.json index e67351e40dd3..5c40ecda4f5c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StorageClass.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-StorageClass.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - StorageClass", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - StorageClass", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "storageclass-managed-premium", + "kubernetesResourceName": "storageclass-managed-premium", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/storageclass-managed-premium", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/storageclass-managed-premium", "name": "storageclass-managed-premium", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ValidatingAdmissionPolicy.json similarity index 86% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ValidatingAdmissionPolicy.json index e88eae6ee55c..24f337a7345d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicy.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ValidatingAdmissionPolicy.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ValidatingAdmissionPolicy", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ValidatingAdmissionPolicy", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "validatingadmissionpolicy-deny-privileged-containers", + "kubernetesResourceName": "validatingadmissionpolicy-deny-privileged-containers", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/validatingadmissionpolicy-deny-privileged-containers", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/validatingadmissionpolicy-deny-privileged-containers", "name": "validatingadmissionpolicy-deny-privileged-containers", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json similarity index 83% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json index 5641c4cad758..10b622a6f7aa 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ValidatingAdmissionPolicyBinding.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ValidatingAdmissionPolicyBinding", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ValidatingAdmissionPolicyBinding", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "validatingadmissionpolicybinding-deny-privileged-binding", + "kubernetesResourceName": "validatingadmissionpolicybinding-deny-privileged-binding", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/validatingadmissionpolicybinding-deny-privileged-binding", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/validatingadmissionpolicybinding-deny-privileged-binding", "name": "validatingadmissionpolicybinding-deny-privileged-binding", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-VolumeAttachment.json similarity index 83% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-VolumeAttachment.json index 69296b683075..f0e5993f0eb5 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-VolumeAttachment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-VolumeAttachment.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - VolumeAttachment", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - VolumeAttachment", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "kubernetesResourceName": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/volumeattachment-csi-azuredisk-pvc-d0e1f2a3", "name": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources.json similarity index 96% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources.json index 3072c74d2b4b..e4cbe5f019f7 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "pod-nginx-6d4cf56db6-x7q2p-default", + "kubernetesResourceName": "pod-nginx-6d4cf56db6-x7q2p-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/pod-nginx-6d4cf56db6-x7q2p-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/pod-nginx-6d4cf56db6-x7q2p-default", "name": "pod-nginx-6d4cf56db6-x7q2p-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/ListKubernetesResources.json similarity index 96% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/ListKubernetesResources.json index 9480d93a946a..fbcc5b17e76d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/ListKubernetesResources.json @@ -1,6 +1,6 @@ { - "title": "List KubeInventory", - "operationId": "KubeInventories_List", + "title": "List KubernetesResources", + "operationId": "KubernetesResources_List", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", @@ -14,9 +14,9 @@ "body": { "value": [ { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/pod-coredns-5d78c9869d-r4pzt-kube-system", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/pod-coredns-5d78c9869d-r4pzt-kube-system", "name": "pod-coredns-5d78c9869d-r4pzt-kube-system", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", @@ -208,9 +208,9 @@ } }, { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/deployment-nginx-default", "name": "deployment-nginx-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/main.tsp similarity index 77% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/main.tsp index 0c766f3f8afd..74a55f0248b3 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/main.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/main.tsp @@ -3,7 +3,7 @@ import "@typespec/versioning"; import "@azure-tools/typespec-azure-core"; import "@azure-tools/typespec-azure-resource-manager"; import "./models.tsp"; -import "./KubeInventory.tsp"; +import "./KubernetesResource.tsp"; using TypeSpec.Rest; using TypeSpec.Http; @@ -15,9 +15,9 @@ using TypeSpec.Versioning; /** * APIs for K8s inventory reports under Microsoft.KubernetesConfiguration. */ -#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "KubeInventory is a proxy resource provider under Microsoft.Kubernetes; no independent operations endpoint is registered." +#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "KubernetesResources is a proxy resource provider under Microsoft.Kubernetes; no independent operations endpoint is registered." @armProviderNamespace -@service(#{ title: "KubeInventoryClient" }) +@service(#{ title: "KubernetesResourcesClient" }) @versioned(Versions) @armCommonTypesVersion(Azure.ResourceManager.CommonTypes.Versions.v6) namespace Microsoft.KubernetesConfiguration; diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/models.tsp similarity index 99% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/models.tsp index 3ce28b50f2ac..04ab801e419b 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/models.tsp @@ -1706,13 +1706,13 @@ model KubernetesEvent { // ─── ARM resource properties ────────────────────────────────────────────────── /** - * Properties of a single KubeInventory ARM resource. + * Properties of a single KubernetesResources ARM resource. * Each ARM resource represents one Kubernetes object from the cluster inventory. * The ARM resource name encodes the kind, Kubernetes name, and namespace * (e.g., 'pod-nginx-6d4cf56db6-x7q2p-default', 'upgrade-assessment-current-kube-system'). */ #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state" "This resource does not have a provisioning state per the original Swagger design" -model KubeInventoryProperties { +model KubernetesResourceProperties { /** * Kubernetes API version of the represented resource * (e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1'). diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/KubernetesResources.json similarity index 94% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/KubernetesResources.json index f3e8ce4358b0..f6ed0044486c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/KubernetesResources.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "KubeInventoryClient", + "title": "KubernetesResourcesClient", "version": "2026-06-15-preview", "description": "APIs for K8s inventory reports under Microsoft.KubernetesConfiguration.", "x-typespec-generated": [ @@ -40,17 +40,17 @@ }, "tags": [ { - "name": "KubeInventory" + "name": "KubernetesResources" } ], "paths": { - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory": { + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubernetesResources": { "get": { - "operationId": "KubeInventories_List", + "operationId": "KubernetesResources_List", "tags": [ - "KubeInventory" + "KubernetesResources" ], - "description": "List kubeInventory containers for the cluster (currently always a single 'default').", + "description": "List kubernetesResources containers for the cluster (currently always a single 'default').", "parameters": [ { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" @@ -90,7 +90,7 @@ "200": { "description": "Azure operation completed successfully.", "schema": { - "$ref": "#/definitions/KubeInventoryListResult" + "$ref": "#/definitions/KubernetesResourceListResult" } }, "default": { @@ -101,8 +101,8 @@ } }, "x-ms-examples": { - "List KubeInventory": { - "$ref": "./examples/ListKubeInventory.json" + "List KubernetesResources": { + "$ref": "./examples/ListKubernetesResources.json" } }, "x-ms-pageable": { @@ -110,13 +110,13 @@ } } }, - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubeInventory/{kubeInventoryName}": { + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/kubernetesResources/{kubernetesResourceName}": { "get": { - "operationId": "KubeInventories_Get", + "operationId": "KubernetesResources_Get", "tags": [ - "KubeInventory" + "KubernetesResources" ], - "description": "Get the kubeInventory singleton for a cluster.", + "description": "Get the kubernetesResources singleton for a cluster.", "parameters": [ { "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" @@ -152,9 +152,9 @@ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-_.]{0,62}$" }, { - "name": "kubeInventoryName", + "name": "kubernetesResourceName", "in": "path", - "description": "Name of the KubeInventory resource.", + "description": "Name of the KubernetesResources resource.", "required": true, "type": "string", "pattern": "^[a-z]([a-z0-9._-]{0,126}[a-z0-9])?$" @@ -164,7 +164,7 @@ "200": { "description": "Azure operation completed successfully.", "schema": { - "$ref": "#/definitions/KubeInventory" + "$ref": "#/definitions/KubernetesResource" } }, "default": { @@ -175,86 +175,89 @@ } }, "x-ms-examples": { - "Get KubeInventory": { - "$ref": "./examples/GetKubeInventory.json" + "Get KubernetesResources": { + "$ref": "./examples/GetKubernetesResources.json" }, - "Get KubeInventory - CSIStorageCapacity": { - "$ref": "./examples/GetKubeInventory-CSIStorageCapacity.json" + "Get KubernetesResources - CSIStorageCapacity": { + "$ref": "./examples/GetKubernetesResources-CSIStorageCapacity.json" }, - "Get KubeInventory - CertificateSigningRequest": { - "$ref": "./examples/GetKubeInventory-CertificateSigningRequest.json" + "Get KubernetesResources - CertificateSigningRequest": { + "$ref": "./examples/GetKubernetesResources-CertificateSigningRequest.json" }, - "Get KubeInventory - ConfigMap": { - "$ref": "./examples/GetKubeInventory-ConfigMap.json" + "Get KubernetesResources - ConfigMap": { + "$ref": "./examples/GetKubernetesResources-ConfigMap.json" }, - "Get KubeInventory - CronJob": { - "$ref": "./examples/GetKubeInventory-CronJob.json" + "Get KubernetesResources - CronJob": { + "$ref": "./examples/GetKubernetesResources-CronJob.json" }, - "Get KubeInventory - DaemonSet": { - "$ref": "./examples/GetKubeInventory-DaemonSet.json" + "Get KubernetesResources - DaemonSet": { + "$ref": "./examples/GetKubernetesResources-DaemonSet.json" }, - "Get KubeInventory - Deployment": { - "$ref": "./examples/GetKubeInventory-Deployment.json" + "Get KubernetesResources - Deployment": { + "$ref": "./examples/GetKubernetesResources-Deployment.json" }, - "Get KubeInventory - EndpointSlice": { - "$ref": "./examples/GetKubeInventory-EndpointSlice.json" + "Get KubernetesResources - EndpointSlice": { + "$ref": "./examples/GetKubernetesResources-EndpointSlice.json" }, - "Get KubeInventory - HorizontalPodAutoscaler": { - "$ref": "./examples/GetKubeInventory-HorizontalPodAutoscaler.json" + "Get KubernetesResources - HorizontalPodAutoscaler": { + "$ref": "./examples/GetKubernetesResources-HorizontalPodAutoscaler.json" }, - "Get KubeInventory - Ingress": { - "$ref": "./examples/GetKubeInventory-Ingress.json" + "Get KubernetesResources - Ingress": { + "$ref": "./examples/GetKubernetesResources-Ingress.json" }, - "Get KubeInventory - IngressClass": { - "$ref": "./examples/GetKubeInventory-IngressClass.json" + "Get KubernetesResources - IngressClass": { + "$ref": "./examples/GetKubernetesResources-IngressClass.json" }, - "Get KubeInventory - Job": { - "$ref": "./examples/GetKubeInventory-Job.json" + "Get KubernetesResources - Job": { + "$ref": "./examples/GetKubernetesResources-Job.json" }, - "Get KubeInventory - NetworkPolicy": { - "$ref": "./examples/GetKubeInventory-NetworkPolicy.json" + "Get KubernetesResources - NetworkPolicy": { + "$ref": "./examples/GetKubernetesResources-NetworkPolicy.json" }, - "Get KubeInventory - Node": { - "$ref": "./examples/GetKubeInventory-Node.json" + "Get KubernetesResources - Node": { + "$ref": "./examples/GetKubernetesResources-Node.json" }, - "Get KubeInventory - PersistentVolume": { - "$ref": "./examples/GetKubeInventory-PersistentVolume.json" + "Get KubernetesResources - PersistentVolume": { + "$ref": "./examples/GetKubernetesResources-PersistentVolume.json" }, - "Get KubeInventory - PersistentVolumeClaim": { - "$ref": "./examples/GetKubeInventory-PersistentVolumeClaim.json" + "Get KubernetesResources - PersistentVolumeClaim": { + "$ref": "./examples/GetKubernetesResources-PersistentVolumeClaim.json" }, - "Get KubeInventory - PodDisruptionBudget": { - "$ref": "./examples/GetKubeInventory-PodDisruptionBudget.json" + "Get KubernetesResources - Pod": { + "$ref": "./examples/GetKubernetesResources-Pod.json" }, - "Get KubeInventory - ReplicaSet": { - "$ref": "./examples/GetKubeInventory-ReplicaSet.json" + "Get KubernetesResources - PodDisruptionBudget": { + "$ref": "./examples/GetKubernetesResources-PodDisruptionBudget.json" }, - "Get KubeInventory - Role": { - "$ref": "./examples/GetKubeInventory-Role.json" + "Get KubernetesResources - ReplicaSet": { + "$ref": "./examples/GetKubernetesResources-ReplicaSet.json" }, - "Get KubeInventory - RoleBinding": { - "$ref": "./examples/GetKubeInventory-RoleBinding.json" + "Get KubernetesResources - Role": { + "$ref": "./examples/GetKubernetesResources-Role.json" }, - "Get KubeInventory - Service": { - "$ref": "./examples/GetKubeInventory-Service.json" + "Get KubernetesResources - RoleBinding": { + "$ref": "./examples/GetKubernetesResources-RoleBinding.json" }, - "Get KubeInventory - ServiceAccount": { - "$ref": "./examples/GetKubeInventory-ServiceAccount.json" + "Get KubernetesResources - Service": { + "$ref": "./examples/GetKubernetesResources-Service.json" }, - "Get KubeInventory - StatefulSet": { - "$ref": "./examples/GetKubeInventory-StatefulSet.json" + "Get KubernetesResources - ServiceAccount": { + "$ref": "./examples/GetKubernetesResources-ServiceAccount.json" }, - "Get KubeInventory - StorageClass": { - "$ref": "./examples/GetKubeInventory-StorageClass.json" + "Get KubernetesResources - StatefulSet": { + "$ref": "./examples/GetKubernetesResources-StatefulSet.json" }, - "Get KubeInventory - ValidatingAdmissionPolicy": { - "$ref": "./examples/GetKubeInventory-ValidatingAdmissionPolicy.json" + "Get KubernetesResources - StorageClass": { + "$ref": "./examples/GetKubernetesResources-StorageClass.json" }, - "Get KubeInventory - ValidatingAdmissionPolicyBinding": { - "$ref": "./examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json" + "Get KubernetesResources - ValidatingAdmissionPolicy": { + "$ref": "./examples/GetKubernetesResources-ValidatingAdmissionPolicy.json" }, - "Get KubeInventory - VolumeAttachment": { - "$ref": "./examples/GetKubeInventory-VolumeAttachment.json" + "Get KubernetesResources - ValidatingAdmissionPolicyBinding": { + "$ref": "./examples/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json" + }, + "Get KubernetesResources - VolumeAttachment": { + "$ref": "./examples/GetKubernetesResources-VolumeAttachment.json" } } } @@ -810,87 +813,6 @@ } } }, - "KubeInventory": { - "type": "object", - "description": "Singleton container resource grouping cluster inventory reports.", - "properties": { - "properties": { - "$ref": "#/definitions/KubeInventoryProperties", - "description": "Properties of the KubeInventory resource." - } - }, - "allOf": [ - { - "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ProxyResource" - } - ] - }, - "KubeInventoryListResult": { - "type": "object", - "description": "The response of a KubeInventory list operation.", - "properties": { - "value": { - "type": "array", - "description": "The KubeInventory items on this page", - "items": { - "$ref": "#/definitions/KubeInventory" - } - }, - "nextLink": { - "type": "string", - "format": "uri", - "description": "The link to the next page of items" - } - }, - "required": [ - "value" - ] - }, - "KubeInventoryProperties": { - "type": "object", - "description": "Properties of a single KubeInventory ARM resource.\nEach ARM resource represents one Kubernetes object from the cluster inventory.\nThe ARM resource name encodes the kind, Kubernetes name, and namespace\n(e.g., 'pod-nginx-6d4cf56db6-x7q2p-default', 'upgrade-assessment-current-kube-system').", - "properties": { - "apiVersion": { - "type": "string", - "description": "Kubernetes API version of the represented resource\n(e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1').", - "readOnly": true - }, - "kind": { - "type": "string", - "description": "Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service').", - "readOnly": true - }, - "metadata": { - "$ref": "#/definitions/KubernetesObjectMeta", - "description": "Standard Kubernetes object metadata.", - "readOnly": true - }, - "spec": { - "$ref": "#/definitions/KubernetesResourceSpec", - "description": "Desired state of the Kubernetes resource.", - "readOnly": true - }, - "status": { - "$ref": "#/definitions/KubernetesResourceStatus", - "description": "Observed state of the Kubernetes resource, written by the controller.", - "readOnly": true - }, - "events": { - "type": "array", - "description": "Kubernetes events recorded against this resource.", - "items": { - "$ref": "#/definitions/KubernetesEvent" - }, - "readOnly": true, - "x-ms-identifiers": [] - }, - "attachedToExtension": { - "type": "string", - "description": "Name of the extension this inventory resource is attached to.", - "readOnly": true - } - } - }, "KubernetesAnnotation": { "type": "object", "description": "A single Kubernetes annotation (key/value pair for non-identifying auxiliary metadata).", @@ -1081,6 +1003,87 @@ "name" ] }, + "KubernetesResource": { + "type": "object", + "description": "Singleton container resource grouping cluster inventory reports.", + "properties": { + "properties": { + "$ref": "#/definitions/KubernetesResourceProperties", + "description": "Properties of the KubernetesResources resource." + } + }, + "allOf": [ + { + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ProxyResource" + } + ] + }, + "KubernetesResourceListResult": { + "type": "object", + "description": "The response of a KubernetesResource list operation.", + "properties": { + "value": { + "type": "array", + "description": "The KubernetesResource items on this page", + "items": { + "$ref": "#/definitions/KubernetesResource" + } + }, + "nextLink": { + "type": "string", + "format": "uri", + "description": "The link to the next page of items" + } + }, + "required": [ + "value" + ] + }, + "KubernetesResourceProperties": { + "type": "object", + "description": "Properties of a single KubernetesResources ARM resource.\nEach ARM resource represents one Kubernetes object from the cluster inventory.\nThe ARM resource name encodes the kind, Kubernetes name, and namespace\n(e.g., 'pod-nginx-6d4cf56db6-x7q2p-default', 'upgrade-assessment-current-kube-system').", + "properties": { + "apiVersion": { + "type": "string", + "description": "Kubernetes API version of the represented resource\n(e.g., 'v1', 'apps/v1', 'upgrade.config.io/v1alpha1').", + "readOnly": true + }, + "kind": { + "type": "string", + "description": "Kind of the Kubernetes resource (e.g., 'Pod', 'Deployment', 'Service').", + "readOnly": true + }, + "metadata": { + "$ref": "#/definitions/KubernetesObjectMeta", + "description": "Standard Kubernetes object metadata.", + "readOnly": true + }, + "spec": { + "$ref": "#/definitions/KubernetesResourceSpec", + "description": "Desired state of the Kubernetes resource.", + "readOnly": true + }, + "status": { + "$ref": "#/definitions/KubernetesResourceStatus", + "description": "Observed state of the Kubernetes resource, written by the controller.", + "readOnly": true + }, + "events": { + "type": "array", + "description": "Kubernetes events recorded against this resource.", + "items": { + "$ref": "#/definitions/KubernetesEvent" + }, + "readOnly": true, + "x-ms-identifiers": [] + }, + "attachedToExtension": { + "type": "string", + "description": "Name of the extension this inventory resource is attached to.", + "readOnly": true + } + } + }, "KubernetesResourceSpec": { "type": "object", "description": "Desired state (spec) of a Kubernetes resource.\n\nWell-known fields for native workloads (Pod, Deployment, Service, etc.) are typed\ndirectly. Fields not covered by any typed property can be placed in additionalFields.", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CSIStorageCapacity.json similarity index 84% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CSIStorageCapacity.json index 6edef9362d69..b300a84a4d69 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CSIStorageCapacity.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CSIStorageCapacity.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - CSIStorageCapacity", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - CSIStorageCapacity", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "csistoragecapacity-managed-premium-pool1-kube-system", + "kubernetesResourceName": "csistoragecapacity-managed-premium-pool1-kube-system", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/csistoragecapacity-managed-premium-pool1-kube-system", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/csistoragecapacity-managed-premium-pool1-kube-system", "name": "csistoragecapacity-managed-premium-pool1-kube-system", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CertificateSigningRequest.json similarity index 87% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CertificateSigningRequest.json index f8e6a255e772..8d22cc009631 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CertificateSigningRequest.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CertificateSigningRequest.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - CertificateSigningRequest", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - CertificateSigningRequest", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "certificatesigningrequest-myapp-node-client", + "kubernetesResourceName": "certificatesigningrequest-myapp-node-client", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/certificatesigningrequest-myapp-node-client", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/certificatesigningrequest-myapp-node-client", "name": "certificatesigningrequest-myapp-node-client", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ConfigMap.json similarity index 88% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ConfigMap.json index 08eaa5d09146..654cb8053d11 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ConfigMap.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ConfigMap.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ConfigMap", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ConfigMap", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "configmap-app-config-default", + "kubernetesResourceName": "configmap-app-config-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/configmap-app-config-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/configmap-app-config-default", "name": "configmap-app-config-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CronJob.json similarity index 90% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CronJob.json index 0bb7bfbf50ac..ac9c83335905 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-CronJob.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-CronJob.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - CronJob", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - CronJob", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "cronjob-report-generator-default", + "kubernetesResourceName": "cronjob-report-generator-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/cronjob-report-generator-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/cronjob-report-generator-default", "name": "cronjob-report-generator-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json new file mode 100644 index 000000000000..384e2b0b1c53 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json @@ -0,0 +1,93 @@ +{ + "title": "Get KubernetesResources - DaemonSet", + "operationId": "KubernetesResources_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubernetesResourceName": "daemonset-kube-proxy-kube-system", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/daemonset-kube-proxy-kube-system", + "name": "daemonset-kube-proxy-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "apps/v1", + "kind": "DaemonSet", + "metadata": { + "name": "kube-proxy", + "namespaceName": "kube-system", + "uid": "a1b2c3d4-e5f6-7890-bcde-f01234567890", + "resourceVersion": "12345", + "generation": 1, + "creationTimestamp": "2026-01-01T00:00:00Z", + "labels": [ + { "name": "k8s-app", "value": "kube-proxy" }, + { "name": "component", "value": "kube-proxy" } + ] + }, + "spec": { + "selector": [ + { "name": "k8s-app", "value": "kube-proxy" } + ], + "strategyType": "RollingUpdate", + "maxUnavailable": "1", + "serviceAccountName": "kube-proxy", + "tolerations": [ + { "operator": "Exists" } + ], + "volumes": [ + { "name": "kube-proxy", "sourceType": "configMap", "source": "kube-proxy" }, + { "name": "xtables-lock", "sourceType": "hostPath", "source": "/run/xtables.lock" }, + { "name": "lib-modules", "sourceType": "hostPath", "source": "/lib/modules" } + ], + "containers": [ + { + "name": "kube-proxy", + "image": "registry.k8s.io/kube-proxy:v1.29.0", + "imagePullPolicy": "IfNotPresent", + "resources": { + "requests": { "cpu": "100m", "memory": "128Mi" } + }, + "volumeMounts": [ + { "name": "kube-proxy", "mountPath": "/var/lib/kube-proxy" }, + { "name": "xtables-lock", "mountPath": "/run/xtables.lock" }, + { "name": "lib-modules", "mountPath": "/lib/modules", "readOnly": true } + ], + "securityContext": { "privileged": true } + } + ] + }, + "status": { + "desiredNumberScheduled": 3, + "currentNumberScheduled": 3, + "numberReady": 3, + "numberMisscheduled": 0, + "numberUnavailable": 0, + "availableReplicas": 3, + "updatedReplicas": 3, + "observedGeneration": 1, + "conditions": [ + { "type": "Available", "status": "True", "lastTransitionTime": "2026-01-01T00:02:00Z" } + ] + }, + "events": [], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Deployment.json similarity index 94% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Deployment.json index 2f8c402e7de4..a5e4888279ac 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Deployment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Deployment.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Deployment", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Deployment", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "deployment-nginx-default", + "kubernetesResourceName": "deployment-nginx-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/deployment-nginx-default", "name": "deployment-nginx-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-EndpointSlice.json similarity index 91% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-EndpointSlice.json index 7682d821e7f2..99a44d336b00 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-EndpointSlice.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-EndpointSlice.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - EndpointSlice", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - EndpointSlice", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "endpointslice-myapp-abc12-default", + "kubernetesResourceName": "endpointslice-myapp-abc12-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/endpointslice-myapp-abc12-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/endpointslice-myapp-abc12-default", "name": "endpointslice-myapp-abc12-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-HorizontalPodAutoscaler.json similarity index 90% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-HorizontalPodAutoscaler.json index fb9a16ac2e7e..30ba9a88c27b 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-HorizontalPodAutoscaler.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-HorizontalPodAutoscaler.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - HorizontalPodAutoscaler", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - HorizontalPodAutoscaler", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "horizontalpodautoscaler-nginx-default", + "kubernetesResourceName": "horizontalpodautoscaler-nginx-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/horizontalpodautoscaler-nginx-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/horizontalpodautoscaler-nginx-default", "name": "horizontalpodautoscaler-nginx-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Ingress.json similarity index 91% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Ingress.json index 59b2376bbebd..8585220fe5f0 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Ingress.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Ingress.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Ingress", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Ingress", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "ingress-myapp-default", + "kubernetesResourceName": "ingress-myapp-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/ingress-myapp-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/ingress-myapp-default", "name": "ingress-myapp-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-IngressClass.json similarity index 86% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-IngressClass.json index de97c71b00d0..1ba627df1796 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-IngressClass.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-IngressClass.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - IngressClass", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - IngressClass", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "ingressclass-nginx", + "kubernetesResourceName": "ingressclass-nginx", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/ingressclass-nginx", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/ingressclass-nginx", "name": "ingressclass-nginx", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Job.json similarity index 92% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Job.json index 8c3b926b9e10..59c73ec2133e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Job.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Job.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Job", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Job", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "job-db-migration-default", + "kubernetesResourceName": "job-db-migration-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/job-db-migration-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/job-db-migration-default", "name": "job-db-migration-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-NetworkPolicy.json similarity index 88% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-NetworkPolicy.json index b51e889ab50e..12821dd35be1 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-NetworkPolicy.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-NetworkPolicy.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - NetworkPolicy", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - NetworkPolicy", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "networkpolicy-deny-external-default", + "kubernetesResourceName": "networkpolicy-deny-external-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/networkpolicy-deny-external-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/networkpolicy-deny-external-default", "name": "networkpolicy-deny-external-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Node.json similarity index 94% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Node.json index e562f65ec839..6a3d8f0d39fe 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Node.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Node.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Node", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Node", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "node-aks-nodepool1-12345678-0", + "kubernetesResourceName": "node-aks-nodepool1-12345678-0", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/node-aks-nodepool1-12345678-0", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/node-aks-nodepool1-12345678-0", "name": "node-aks-nodepool1-12345678-0", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PersistentVolume.json similarity index 85% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PersistentVolume.json index a3e32d85ef73..aa822cfed8ac 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolume.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PersistentVolume.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - PersistentVolume", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - PersistentVolume", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "kubernetesResourceName": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", "name": "persistentvolume-pvc-d0e1f2a3-b4c5-6789-defa", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PersistentVolumeClaim.json similarity index 85% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PersistentVolumeClaim.json index 4c7e00308615..85a8f4d7611e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-PersistentVolumeClaim.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PersistentVolumeClaim.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - PersistentVolumeClaim", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - PersistentVolumeClaim", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "persistentvolumeclaim-data-postgres-0-default", + "kubernetesResourceName": "persistentvolumeclaim-data-postgres-0-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/persistentvolumeclaim-data-postgres-0-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/persistentvolumeclaim-data-postgres-0-default", "name": "persistentvolumeclaim-data-postgres-0-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Pod.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Pod.json new file mode 100644 index 000000000000..f44071397e6f --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Pod.json @@ -0,0 +1,175 @@ +{ + "title": "Get KubernetesResources - Pod", + "operationId": "KubernetesResources_Get", + "parameters": { + "subscriptionId": "00000000-0000-0000-0000-000000000001", + "resourceGroupName": "rg1", + "clusterRp": "Microsoft.Kubernetes", + "clusterResourceName": "connectedClusters", + "clusterName": "clusterName1", + "kubernetesResourceName": "pod-coredns-5d78c9869d-r4pzt-kube-system", + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/pod-coredns-5d78c9869d-r4pzt-kube-system", + "name": "pod-coredns-5d78c9869d-r4pzt-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", + "systemData": { + "createdBy": "string", + "createdByType": "Application", + "createdAt": "2026-06-01T10:00:00.000Z", + "lastModifiedBy": "string", + "lastModifiedByType": "Application", + "lastModifiedAt": "2026-06-01T10:00:00.000Z" + }, + "properties": { + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "coredns-5d78c9869d-r4pzt", + "namespaceName": "kube-system", + "uid": "d4e5f6a7-b8c9-0123-defa-234567890123", + "resourceVersion": "7712091", + "generation": 1, + "creationTimestamp": "2026-04-01T08:05:00Z", + "labels": [ + { "name": "k8s-app", "value": "kube-dns" }, + { "name": "pod-template-hash", "value": "5d78c9869d" } + ], + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "kind": "ReplicaSet", + "name": "coredns-5d78c9869d", + "uid": "e5f6a7b8-c9d0-1234-efab-345678901234", + "controller": true, + "blockOwnerDeletion": true + } + ] + }, + "spec": { + "nodeName": "aks-nodepool1-12345678-1", + "restartPolicy": "Always", + "serviceAccountName": "coredns", + "dnsPolicy": "Default", + "terminationGracePeriodSeconds": 30, + "priorityClassName": "system-cluster-critical", + "securityContext": { + "runAsNonRoot": true + }, + "tolerations": [ + { "key": "CriticalAddonsOnly", "operator": "Exists" }, + { + "key": "node-role.kubernetes.io/control-plane", + "operator": "Exists", + "effect": "NoSchedule" + } + ], + "volumes": [ + { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, + { "name": "kube-api-access", "sourceType": "projected" } + ], + "containers": [ + { + "name": "coredns", + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "imagePullPolicy": "IfNotPresent", + "ports": [ + { "name": "dns", "containerPort": 53, "protocol": "UDP" }, + { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, + { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } + ], + "resources": { + "requests": { "cpu": "100m", "memory": "70Mi" }, + "limits": { "memory": "170Mi" } + }, + "volumeMounts": [ + { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, + { + "name": "kube-api-access", + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "readOnly": true + } + ], + "securityContext": { + "allowPrivilegeEscalation": false, + "readOnlyRootFilesystem": true, + "capabilities": { + "add": ["NET_BIND_SERVICE"], + "drop": ["ALL"] + } + }, + "livenessProbe": { + "type": "HTTPGet", + "path": "/health", + "port": 8080 + }, + "readinessProbe": { + "type": "HTTPGet", + "path": "/ready", + "port": 8181 + } + } + ] + }, + "status": { + "phase": "Running", + "podIp": "10.244.0.3", + "podIps": ["10.244.0.3"], + "hostIp": "10.240.0.5", + "hostIps": ["10.240.0.5"], + "startTime": "2026-04-01T08:05:02Z", + "qosClass": "Burstable", + "reason": "", + "initContainerStatuses": [], + "conditions": [ + { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, + { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, + { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:00Z" } + ], + "containerStatuses": [ + { + "name": "coredns", + "ready": true, + "restartCount": 0, + "started": true, + "image": "registry.k8s.io/coredns/coredns:v1.11.1", + "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", + "state": { + "running": { "startedAt": "2026-04-01T08:05:13Z" } + } + } + ] + }, + "events": [ + { + "type": "Normal", + "reason": "Scheduled", + "age": "58d", + "from": "default-scheduler", + "message": "Successfully assigned kube-system/coredns-5d78c9869d-r4pzt to aks-nodepool1-12345678-1" + }, + { + "type": "Normal", + "reason": "Pulled", + "age": "58d", + "from": "kubelet", + "message": "Container image \"registry.k8s.io/coredns/coredns:v1.11.1\" already present on machine" + }, + { + "type": "Normal", + "reason": "Started", + "age": "58d", + "from": "kubelet", + "message": "Started container coredns" + } + ], + "attachedToExtension": "azure-kube-inventory" + } + } + } + } +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PodDisruptionBudget.json similarity index 86% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PodDisruptionBudget.json index 2d5800591be5..0830dd53428e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-PodDisruptionBudget.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-PodDisruptionBudget.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - PodDisruptionBudget", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - PodDisruptionBudget", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "poddisruptionbudget-nginx-pdb-default", + "kubernetesResourceName": "poddisruptionbudget-nginx-pdb-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/poddisruptionbudget-nginx-pdb-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/poddisruptionbudget-nginx-pdb-default", "name": "poddisruptionbudget-nginx-pdb-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ReplicaSet.json similarity index 91% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ReplicaSet.json index ee6e2fe05e41..d7af1faa6cfc 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ReplicaSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ReplicaSet.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ReplicaSet", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ReplicaSet", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "replicaset-nginx-7d9f8c-default", + "kubernetesResourceName": "replicaset-nginx-7d9f8c-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/replicaset-nginx-7d9f8c-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/replicaset-nginx-7d9f8c-default", "name": "replicaset-nginx-7d9f8c-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Role.json similarity index 87% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Role.json index bb535f360b73..f0fe0aad8ef9 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Role.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Role.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Role", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Role", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "role-pod-reader-default", + "kubernetesResourceName": "role-pod-reader-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/role-pod-reader-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/role-pod-reader-default", "name": "role-pod-reader-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-RoleBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-RoleBinding.json similarity index 84% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-RoleBinding.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-RoleBinding.json index 01ac5def7af5..4989fe9bb673 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-RoleBinding.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-RoleBinding.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - RoleBinding", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - RoleBinding", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "rolebinding-read-pods-default", + "kubernetesResourceName": "rolebinding-read-pods-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/rolebinding-read-pods-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/rolebinding-read-pods-default", "name": "rolebinding-read-pods-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Service.json similarity index 90% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Service.json index 116723321d28..6de92eec1962 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-Service.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Service.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - Service", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - Service", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "service-nginx-default", + "kubernetesResourceName": "service-nginx-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/service-nginx-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/service-nginx-default", "name": "service-nginx-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ServiceAccount.json similarity index 55% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ServiceAccount.json index f1e2029d1508..0b52c834fa23 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-ServiceAccount.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ServiceAccount.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ServiceAccount", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ServiceAccount", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "serviceaccount-nginx-sa-default", + "kubernetesResourceName": "serviceaccount-coredns-kube-system", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/serviceaccount-nginx-sa-default", - "name": "serviceaccount-nginx-sa-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/serviceaccount-coredns-kube-system", + "name": "serviceaccount-coredns-kube-system", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", @@ -28,29 +28,19 @@ "apiVersion": "v1", "kind": "ServiceAccount", "metadata": { - "name": "nginx-sa", - "namespaceName": "default", - "uid": "f2a3b4c5-d6e7-8901-fabc-345678901234", - "resourceVersion": "9234567", - "creationTimestamp": "2026-01-15T08:00:00Z", + "name": "coredns", + "namespaceName": "kube-system", + "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901", + "resourceVersion": "890123", + "creationTimestamp": "2026-01-01T00:00:00Z", "labels": [ - { - "name": "app", - "value": "nginx" - }, - { - "name": "app.kubernetes.io/managed-by", - "value": "Helm" - } + { "name": "k8s-app", "value": "kube-dns" }, + { "name": "kubernetes.io/cluster-service", "value": "true" } ], "annotations": [ { - "name": "eks.amazonaws.com/role-arn", - "value": "" - }, - { - "name": "meta.helm.sh/release-name", - "value": "nginx" + "name": "kubectl.kubernetes.io/last-applied-configuration", + "value": "{}" } ] }, @@ -66,4 +56,4 @@ } } } -} +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-StatefulSet.json similarity index 94% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-StatefulSet.json index dab86948c263..8b299265f767 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-StatefulSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-StatefulSet.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - StatefulSet", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - StatefulSet", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "statefulset-postgres-data", + "kubernetesResourceName": "statefulset-postgres-data", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/statefulset-postgres-data", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/statefulset-postgres-data", "name": "statefulset-postgres-data", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-StorageClass.json similarity index 86% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-StorageClass.json index e67351e40dd3..5c40ecda4f5c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-StorageClass.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-StorageClass.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - StorageClass", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - StorageClass", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "storageclass-managed-premium", + "kubernetesResourceName": "storageclass-managed-premium", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/storageclass-managed-premium", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/storageclass-managed-premium", "name": "storageclass-managed-premium", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ValidatingAdmissionPolicy.json similarity index 86% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ValidatingAdmissionPolicy.json index e88eae6ee55c..24f337a7345d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicy.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ValidatingAdmissionPolicy.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ValidatingAdmissionPolicy", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ValidatingAdmissionPolicy", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "validatingadmissionpolicy-deny-privileged-containers", + "kubernetesResourceName": "validatingadmissionpolicy-deny-privileged-containers", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/validatingadmissionpolicy-deny-privileged-containers", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/validatingadmissionpolicy-deny-privileged-containers", "name": "validatingadmissionpolicy-deny-privileged-containers", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json similarity index 83% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json index 5641c4cad758..10b622a6f7aa 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-ValidatingAdmissionPolicyBinding.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ValidatingAdmissionPolicyBinding.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - ValidatingAdmissionPolicyBinding", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - ValidatingAdmissionPolicyBinding", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "validatingadmissionpolicybinding-deny-privileged-binding", + "kubernetesResourceName": "validatingadmissionpolicybinding-deny-privileged-binding", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/validatingadmissionpolicybinding-deny-privileged-binding", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/validatingadmissionpolicybinding-deny-privileged-binding", "name": "validatingadmissionpolicybinding-deny-privileged-binding", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-VolumeAttachment.json similarity index 83% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-VolumeAttachment.json index 69296b683075..f0e5993f0eb5 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-VolumeAttachment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-VolumeAttachment.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory - VolumeAttachment", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources - VolumeAttachment", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "kubernetesResourceName": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/volumeattachment-csi-azuredisk-pvc-d0e1f2a3", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/volumeattachment-csi-azuredisk-pvc-d0e1f2a3", "name": "volumeattachment-csi-azuredisk-pvc-d0e1f2a3", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources.json similarity index 96% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources.json index 3072c74d2b4b..e4cbe5f019f7 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources.json @@ -1,21 +1,21 @@ { - "title": "Get KubeInventory", - "operationId": "KubeInventories_Get", + "title": "Get KubernetesResources", + "operationId": "KubernetesResources_Get", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "kubeInventoryName": "pod-nginx-6d4cf56db6-x7q2p-default", + "kubernetesResourceName": "pod-nginx-6d4cf56db6-x7q2p-default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/pod-nginx-6d4cf56db6-x7q2p-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/pod-nginx-6d4cf56db6-x7q2p-default", "name": "pod-nginx-6d4cf56db6-x7q2p-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/ListKubernetesResources.json similarity index 96% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/ListKubernetesResources.json index 9480d93a946a..fbcc5b17e76d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/ListKubeInventory.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/ListKubernetesResources.json @@ -1,6 +1,6 @@ { - "title": "List KubeInventory", - "operationId": "KubeInventories_List", + "title": "List KubernetesResources", + "operationId": "KubernetesResources_List", "parameters": { "subscriptionId": "00000000-0000-0000-0000-000000000001", "resourceGroupName": "rg1", @@ -14,9 +14,9 @@ "body": { "value": [ { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/pod-coredns-5d78c9869d-r4pzt-kube-system", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/pod-coredns-5d78c9869d-r4pzt-kube-system", "name": "pod-coredns-5d78c9869d-r4pzt-kube-system", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", @@ -208,9 +208,9 @@ } }, { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/deployment-nginx-default", + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubernetesResources/deployment-nginx-default", "name": "deployment-nginx-default", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", + "type": "Microsoft.KubernetesConfiguration/kubernetesResources", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/tspconfig.yaml b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/tspconfig.yaml similarity index 73% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/tspconfig.yaml rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/tspconfig.yaml index 61b69f1b9a03..0a826b08d4f7 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/tspconfig.yaml +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/tspconfig.yaml @@ -1,41 +1,41 @@ parameters: "service-dir": - default: "sdk/kubeinventory" + default: "sdk/kubernetesresources" emit: - "@azure-tools/typespec-autorest" options: "@azure-tools/typespec-autorest": omit-unreachable-types: false emitter-output-dir: "{project-root}" - output-file: "{version-status}/{version}/kubeInventory.json" + output-file: "{version-status}/{version}/KubernetesResources.json" arm-types-dir: "{project-root}/../../../../common-types/resource-management" emit-lro-options: "all" examples-dir: "{project-root}/examples" "@azure-tools/typespec-python": service-dir: sdk/kubernetesconfiguration - emitter-output-dir: "{output-dir}/{service-dir}/azure-mgmt-kubernetesconfiguration-kubeinventory" - namespace: "azure.mgmt.kubernetesconfiguration.kubeinventory" + emitter-output-dir: "{output-dir}/{service-dir}/azure-mgmt-kubernetesconfiguration-kubernetesresources" + namespace: "azure.mgmt.kubernetesconfiguration.kubernetesresources" generate-test: true generate-sample: true flavor: "azure" "@azure-tools/typespec-java": service-dir: sdk/kubernetesconfiguration - emitter-output-dir: "{output-dir}/{service-dir}/azure-resourcemanager-kubernetesconfiguration-kubeinventory" - namespace: "com.azure.resourcemanager.kubernetesconfiguration.kubeinventory" - service-name: "KubeInventory" + emitter-output-dir: "{output-dir}/{service-dir}/azure-resourcemanager-kubernetesconfiguration-kubernetesresources" + namespace: "com.azure.resourcemanager.kubernetesconfiguration.kubernetesresources" + service-name: "KubernetesResources" flavor: azure "@azure-tools/typespec-ts": service-dir: sdk/kubernetesconfiguration - emitter-output-dir: "{output-dir}/{service-dir}/arm-kubernetesconfiguration-kubeinventory" + emitter-output-dir: "{output-dir}/{service-dir}/arm-kubernetesconfiguration-kubernetesresources" flavor: "azure" compatibility-lro: true experimental-extensible-enums: true package-details: - name: "@azure/arm-kubernetesconfiguration-kubeinventory" + name: "@azure/arm-kubernetesconfiguration-kubernetesresources" "@azure-tools/typespec-go": service-dir: "sdk/resourcemanager/kubernetesconfiguration" - emitter-output-dir: "{output-dir}/{service-dir}/armkubeinventory" - module: "github.com/Azure/azure-sdk-for-go/{service-dir}/armkubeinventory" + emitter-output-dir: "{output-dir}/{service-dir}/armkubernetesresources" + module: "github.com/Azure/azure-sdk-for-go/{service-dir}/armkubernetesresources" fix-const-stuttering: true flavor: "azure" generate-samples: true @@ -43,7 +43,7 @@ options: head-as-boolean: true inject-spans: true "@azure-typespec/http-client-csharp-mgmt": - namespace: "Azure.ResourceManager.KubernetesConfiguration.KubeInventory" + namespace: "Azure.ResourceManager.KubernetesConfiguration.KubernetesResources" emitter-output-dir: "{output-dir}/sdk/kubernetesconfiguration/{namespace}" linter: extends: diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json deleted file mode 100644 index 94e3a78b13fe..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/examples/2026-06-15-preview/GetKubeInventory-DaemonSet.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "title": "Get KubeInventory - DaemonSet", - "operationId": "KubeInventories_Get", - "parameters": { - "subscriptionId": "00000000-0000-0000-0000-000000000001", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", - "clusterName": "clusterName1", - "kubeInventoryName": "daemonset-fluentbit-logging", - "api-version": "2026-06-15-preview" - }, - "responses": { - "200": { - "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/daemonset-fluentbit-logging", - "name": "daemonset-fluentbit-logging", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", - "systemData": { - "createdBy": "string", - "createdByType": "Application", - "createdAt": "2026-06-01T10:00:00.000Z", - "lastModifiedBy": "string", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-01T10:00:00.000Z" - }, - "properties": { - "apiVersion": "apps/v1", - "kind": "DaemonSet", - "metadata": { - "name": "fluent-bit", - "namespaceName": "logging", - "uid": "d3e4f5a6-b7c8-9012-defa-345678901234", - "resourceVersion": "3456789", - "generation": 1, - "creationTimestamp": "2026-02-01T12:00:00Z", - "labels": [ - { - "name": "app", - "value": "fluent-bit" - }, - { - "name": "k8s-app", - "value": "fluent-bit" - } - ] - }, - "spec": { - "selector": [ - { - "name": "app", - "value": "fluent-bit" - } - ], - "strategyType": "RollingUpdate", - "maxUnavailable": "1", - "serviceAccountName": "fluent-bit-sa", - "tolerations": [ - { - "key": "node-role.kubernetes.io/control-plane", - "operator": "Exists", - "effect": "NoSchedule" - }, - { - "key": "CriticalAddonsOnly", - "operator": "Exists" - } - ], - "volumes": [ - { - "name": "varlog", - "sourceType": "hostPath", - "source": "/var/log" - }, - { - "name": "varlibdockercontainers", - "sourceType": "hostPath", - "source": "/var/lib/docker/containers" - } - ], - "containers": [ - { - "name": "fluent-bit", - "image": "fluent/fluent-bit:2.2.0", - "imagePullPolicy": "IfNotPresent", - "envFrom": [ - { - "configMapRef": "fluent-bit-config" - } - ], - "resources": { - "requests": { - "cpu": "50m", - "memory": "50Mi" - }, - "limits": { - "cpu": "200m", - "memory": "200Mi" - } - }, - "volumeMounts": [ - { - "name": "varlog", - "mountPath": "/var/log", - "readOnly": true - }, - { - "name": "varlibdockercontainers", - "mountPath": "/var/lib/docker/containers", - "readOnly": true - } - ], - "securityContext": { - "readOnlyRootFilesystem": false, - "allowPrivilegeEscalation": false - } - } - ] - }, - "status": { - "desiredNumberScheduled": 5, - "currentNumberScheduled": 5, - "numberReady": 5, - "numberMisscheduled": 0, - "numberUnavailable": 0, - "availableReplicas": 5, - "updatedReplicas": 5, - "observedGeneration": 1, - "conditions": [ - { - "type": "Available", - "status": "True", - "lastTransitionTime": "2026-02-01T12:02:00Z" - } - ] - }, - "events": [], - "attachedToExtension": "azure-kube-inventory" - } - } - } - } -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json deleted file mode 100644 index 94e3a78b13fe..000000000000 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/examples/GetKubeInventory-DaemonSet.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "title": "Get KubeInventory - DaemonSet", - "operationId": "KubeInventories_Get", - "parameters": { - "subscriptionId": "00000000-0000-0000-0000-000000000001", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", - "clusterName": "clusterName1", - "kubeInventoryName": "daemonset-fluentbit-logging", - "api-version": "2026-06-15-preview" - }, - "responses": { - "200": { - "body": { - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/kubeInventory/daemonset-fluentbit-logging", - "name": "daemonset-fluentbit-logging", - "type": "Microsoft.KubernetesConfiguration/kubeInventory", - "systemData": { - "createdBy": "string", - "createdByType": "Application", - "createdAt": "2026-06-01T10:00:00.000Z", - "lastModifiedBy": "string", - "lastModifiedByType": "Application", - "lastModifiedAt": "2026-06-01T10:00:00.000Z" - }, - "properties": { - "apiVersion": "apps/v1", - "kind": "DaemonSet", - "metadata": { - "name": "fluent-bit", - "namespaceName": "logging", - "uid": "d3e4f5a6-b7c8-9012-defa-345678901234", - "resourceVersion": "3456789", - "generation": 1, - "creationTimestamp": "2026-02-01T12:00:00Z", - "labels": [ - { - "name": "app", - "value": "fluent-bit" - }, - { - "name": "k8s-app", - "value": "fluent-bit" - } - ] - }, - "spec": { - "selector": [ - { - "name": "app", - "value": "fluent-bit" - } - ], - "strategyType": "RollingUpdate", - "maxUnavailable": "1", - "serviceAccountName": "fluent-bit-sa", - "tolerations": [ - { - "key": "node-role.kubernetes.io/control-plane", - "operator": "Exists", - "effect": "NoSchedule" - }, - { - "key": "CriticalAddonsOnly", - "operator": "Exists" - } - ], - "volumes": [ - { - "name": "varlog", - "sourceType": "hostPath", - "source": "/var/log" - }, - { - "name": "varlibdockercontainers", - "sourceType": "hostPath", - "source": "/var/lib/docker/containers" - } - ], - "containers": [ - { - "name": "fluent-bit", - "image": "fluent/fluent-bit:2.2.0", - "imagePullPolicy": "IfNotPresent", - "envFrom": [ - { - "configMapRef": "fluent-bit-config" - } - ], - "resources": { - "requests": { - "cpu": "50m", - "memory": "50Mi" - }, - "limits": { - "cpu": "200m", - "memory": "200Mi" - } - }, - "volumeMounts": [ - { - "name": "varlog", - "mountPath": "/var/log", - "readOnly": true - }, - { - "name": "varlibdockercontainers", - "mountPath": "/var/lib/docker/containers", - "readOnly": true - } - ], - "securityContext": { - "readOnlyRootFilesystem": false, - "allowPrivilegeEscalation": false - } - } - ] - }, - "status": { - "desiredNumberScheduled": 5, - "currentNumberScheduled": 5, - "numberReady": 5, - "numberMisscheduled": 0, - "numberUnavailable": 0, - "availableReplicas": 5, - "updatedReplicas": 5, - "observedGeneration": 1, - "conditions": [ - { - "type": "Available", - "status": "True", - "lastTransitionTime": "2026-02-01T12:02:00Z" - } - ] - }, - "events": [], - "attachedToExtension": "azure-kube-inventory" - } - } - } - } -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/UpgradeAssessment.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/UpgradeAssessment.tsp similarity index 85% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/UpgradeAssessment.tsp rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/UpgradeAssessment.tsp index c5356808ac9f..e256a4e4a308 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/UpgradeAssessment.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/UpgradeAssessment.tsp @@ -19,15 +19,15 @@ model UpgradeAssessment ...ResourceNameParameter< Resource = UpgradeAssessment, KeyName = "upgradeAssessmentName", - SegmentName = "upgradeAssessment", + SegmentName = "upgradeAssessments", NamePattern = "^[a-z]([a-z0-9._-]{0,126}[a-z0-9])?$" >; } /** - * Operations alias for UpgradeAssessment using the cluster extension routing pattern. + * Operations alias for UpgradeAssessments using the cluster extension routing pattern. * Generates URLs of the form: - * /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessment[/{upgradeAssessmentName}] + * /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessments[/{upgradeAssessmentName}] */ alias UpgradeAssessmentOps = Azure.ResourceManager.Legacy.ExtensionOperations< { @@ -77,18 +77,18 @@ interface UpgradeAssessments { /** * Get the upgrade assessment for a cluster. */ - @tag("UpgradeAssessment") + @tag("UpgradeAssessments") get is UpgradeAssessmentOps.Read; /** * List upgrade assessments for the cluster. */ - @tag("UpgradeAssessment") + @tag("UpgradeAssessments") list is UpgradeAssessmentOps.List; } -@@doc(UpgradeAssessment.name, "Name of the UpgradeAssessment resource."); +@@doc(UpgradeAssessment.name, "Name of the UpgradeAssessments resource."); @@doc( UpgradeAssessment.properties, - "Properties of the UpgradeAssessment resource." + "Properties of the UpgradeAssessments resource." ); diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/examples/2026-06-15-preview/GetUpgradeAssessments.json similarity index 97% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/examples/2026-06-15-preview/GetUpgradeAssessments.json index e3861a83b981..f6118b78ef00 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/GetUpgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/examples/2026-06-15-preview/GetUpgradeAssessments.json @@ -7,15 +7,15 @@ "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "upgradeAssessmentName": "current", + "upgradeAssessmentName": "default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/upgradeAssessment", + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessments/default", + "name": "default", + "type": "Microsoft.KubernetesConfiguration/upgradeAssessments", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/examples/2026-06-15-preview/ListUpgradeAssessments.json similarity index 97% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/examples/2026-06-15-preview/ListUpgradeAssessments.json index 159f0e693265..11105254b318 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/examples/2026-06-15-preview/ListUpgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/examples/2026-06-15-preview/ListUpgradeAssessments.json @@ -14,9 +14,9 @@ "body": { "value": [ { - "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/upgradeAssessment", + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessments/default", + "name": "default", + "type": "Microsoft.KubernetesConfiguration/upgradeAssessments", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/main.tsp similarity index 81% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/main.tsp rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/main.tsp index 73b575c37ae4..23a6f8ae333c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/main.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/main.tsp @@ -15,9 +15,9 @@ using TypeSpec.Versioning; /** * APIs for cluster upgrade assessment resources under Microsoft.KubernetesConfiguration. */ -#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "UpgradeAssessment is a proxy resource provider under Microsoft.Kubernetes; no independent operations endpoint is registered." +#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "UpgradeAssessments is a proxy resource provider under Microsoft.Kubernetes; no independent operations endpoint is registered." @armProviderNamespace -@service(#{ title: "UpgradeAssessmentClient" }) +@service(#{ title: "UpgradeAssessmentsClient" }) @versioned(Versions) @armCommonTypesVersion(Azure.ResourceManager.CommonTypes.Versions.v6) namespace Microsoft.KubernetesConfiguration; diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/models.tsp similarity index 100% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/models.tsp rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/models.tsp diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/examples/GetUpgradeAssessments.json similarity index 97% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/examples/GetUpgradeAssessments.json index e3861a83b981..f6118b78ef00 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/GetUpgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/examples/GetUpgradeAssessments.json @@ -7,15 +7,15 @@ "clusterRp": "Microsoft.Kubernetes", "clusterResourceName": "connectedClusters", "clusterName": "clusterName1", - "upgradeAssessmentName": "current", + "upgradeAssessmentName": "default", "api-version": "2026-06-15-preview" }, "responses": { "200": { "body": { - "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/upgradeAssessment", + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessments/default", + "name": "default", + "type": "Microsoft.KubernetesConfiguration/upgradeAssessments", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/examples/ListUpgradeAssessments.json similarity index 97% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/examples/ListUpgradeAssessments.json index 159f0e693265..11105254b318 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/examples/ListUpgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/examples/ListUpgradeAssessments.json @@ -14,9 +14,9 @@ "body": { "value": [ { - "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/current", - "name": "current", - "type": "Microsoft.KubernetesConfiguration/upgradeAssessment", + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/upgradeAssessments/default", + "name": "default", + "type": "Microsoft.KubernetesConfiguration/upgradeAssessments", "systemData": { "createdBy": "string", "createdByType": "Application", diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/upgradeAssessments.json similarity index 96% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/upgradeAssessments.json index 2f53b895f476..645442d2e72f 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/upgradeAssessments.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "UpgradeAssessmentClient", + "title": "UpgradeAssessmentsClient", "version": "2026-06-15-preview", "description": "APIs for cluster upgrade assessment resources under Microsoft.KubernetesConfiguration.", "x-typespec-generated": [ @@ -40,15 +40,15 @@ }, "tags": [ { - "name": "UpgradeAssessment" + "name": "UpgradeAssessments" } ], "paths": { - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessment": { + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessments": { "get": { "operationId": "UpgradeAssessments_List", "tags": [ - "UpgradeAssessment" + "UpgradeAssessments" ], "description": "List upgrade assessments for the cluster.", "parameters": [ @@ -102,7 +102,7 @@ }, "x-ms-examples": { "List Upgrade Assessments": { - "$ref": "./examples/ListUpgradeAssessment.json" + "$ref": "./examples/ListUpgradeAssessments.json" } }, "x-ms-pageable": { @@ -110,11 +110,11 @@ } } }, - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessment/{upgradeAssessmentName}": { + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/upgradeAssessments/{upgradeAssessmentName}": { "get": { "operationId": "UpgradeAssessments_Get", "tags": [ - "UpgradeAssessment" + "UpgradeAssessments" ], "description": "Get the upgrade assessment for a cluster.", "parameters": [ @@ -154,7 +154,7 @@ { "name": "upgradeAssessmentName", "in": "path", - "description": "Name of the UpgradeAssessment resource.", + "description": "Name of the UpgradeAssessments resource.", "required": true, "type": "string", "pattern": "^[a-z]([a-z0-9._-]{0,126}[a-z0-9])?$" @@ -176,7 +176,7 @@ }, "x-ms-examples": { "Get Upgrade Assessment": { - "$ref": "./examples/GetUpgradeAssessment.json" + "$ref": "./examples/GetUpgradeAssessments.json" } } } @@ -453,7 +453,7 @@ "properties": { "properties": { "$ref": "#/definitions/UpgradeAssessmentProperties", - "description": "Properties of the UpgradeAssessment resource." + "description": "Properties of the UpgradeAssessments resource." } }, "allOf": [ diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/tspconfig.yaml b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/tspconfig.yaml similarity index 83% rename from specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/tspconfig.yaml rename to specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/tspconfig.yaml index 360b7ee370a8..0f8b481df84c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessment/tspconfig.yaml +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/upgradeAssessments/tspconfig.yaml @@ -1,41 +1,41 @@ parameters: "service-dir": - default: "sdk/upgradeassessment" + default: "sdk/upgradeassessments" emit: - "@azure-tools/typespec-autorest" options: "@azure-tools/typespec-autorest": omit-unreachable-types: false emitter-output-dir: "{project-root}" - output-file: "{version-status}/{version}/upgradeAssessment.json" + output-file: "{version-status}/{version}/upgradeAssessments.json" arm-types-dir: "{project-root}/../../../../common-types/resource-management" emit-lro-options: "all" examples-dir: "{project-root}/examples" "@azure-tools/typespec-python": service-dir: sdk/kubernetesconfiguration - emitter-output-dir: "{output-dir}/{service-dir}/azure-mgmt-kubernetesconfiguration-upgradeassessment" - namespace: "azure.mgmt.kubernetesconfiguration.upgradeassessment" + emitter-output-dir: "{output-dir}/{service-dir}/azure-mgmt-kubernetesconfiguration-upgradeassessments" + namespace: "azure.mgmt.kubernetesconfiguration.upgradeassessments" generate-test: true generate-sample: true flavor: "azure" "@azure-tools/typespec-java": service-dir: sdk/kubernetesconfiguration - emitter-output-dir: "{output-dir}/{service-dir}/azure-resourcemanager-kubernetesconfiguration-upgradeassessment" - namespace: "com.azure.resourcemanager.kubernetesconfiguration.upgradeassessment" - service-name: "UpgradeAssessment" + emitter-output-dir: "{output-dir}/{service-dir}/azure-resourcemanager-kubernetesconfiguration-upgradeassessments" + namespace: "com.azure.resourcemanager.kubernetesconfiguration.upgradeassessments" + service-name: "UpgradeAssessments" flavor: azure "@azure-tools/typespec-ts": service-dir: sdk/kubernetesconfiguration - emitter-output-dir: "{output-dir}/{service-dir}/arm-kubernetesconfiguration-upgradeassessment" + emitter-output-dir: "{output-dir}/{service-dir}/arm-kubernetesconfiguration-upgradeassessments" flavor: "azure" compatibility-lro: true experimental-extensible-enums: true package-details: - name: "@azure/arm-kubernetesconfiguration-upgradeassessment" + name: "@azure/arm-kubernetesconfiguration-upgradeassessments" "@azure-tools/typespec-go": service-dir: "sdk/resourcemanager/kubernetesconfiguration" - emitter-output-dir: "{output-dir}/{service-dir}/armupgradeassessment" - module: "github.com/Azure/azure-sdk-for-go/{service-dir}/armupgradeassessment" + emitter-output-dir: "{output-dir}/{service-dir}/armupgradeassessments" + module: "github.com/Azure/azure-sdk-for-go/{service-dir}/armupgradeassessments" fix-const-stuttering: true flavor: "azure" generate-samples: true @@ -43,7 +43,7 @@ options: head-as-boolean: true inject-spans: true "@azure-typespec/http-client-csharp-mgmt": - namespace: "Azure.ResourceManager.KubernetesConfiguration.UpgradeAssessment" + namespace: "Azure.ResourceManager.KubernetesConfiguration.UpgradeAssessments" emitter-output-dir: "{output-dir}/sdk/kubernetesconfiguration/{namespace}" linter: extends: From 65103be911b1fcb35171ac72cfc597c04bc1a880 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Wed, 10 Jun 2026 21:45:33 -0700 Subject: [PATCH 29/39] Fix file names --- specification/kubernetesconfiguration/cspell.yaml | 6 ++++-- .../resource-manager/readme.md | 12 ++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/specification/kubernetesconfiguration/cspell.yaml b/specification/kubernetesconfiguration/cspell.yaml index d9293c97efe1..a8a61b3ed862 100644 --- a/specification/kubernetesconfiguration/cspell.yaml +++ b/specification/kubernetesconfiguration/cspell.yaml @@ -8,12 +8,13 @@ version: '0.2' import: - ../../cspell.yaml words: - - armkubeinventory + - armkubernetesresources + - armupgradeassessments - gvisor - healthz - kata - - kubeinventory - kubernetesconfiguration + - kubernetesresources - kubelet - kustomization - kustomizations @@ -23,4 +24,5 @@ words: - oidc - readyz - rpns + - upgradeassessments diff --git a/specification/kubernetesconfiguration/resource-manager/readme.md b/specification/kubernetesconfiguration/resource-manager/readme.md index 4ebe99ba52c2..3a938ef30b15 100644 --- a/specification/kubernetesconfiguration/resource-manager/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/readme.md @@ -40,8 +40,8 @@ input-file: - Microsoft.KubernetesConfiguration/preview/2024-04-01-preview/fluxconfiguration.json - Microsoft.KubernetesConfiguration/stable/2023-05-01/kubernetesconfiguration.json - Microsoft.KubernetesConfiguration/stable/2023-05-01/operations.json - - Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json - - Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json + - Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/KubernetesResources.json + - Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/upgradeAssessments.json suppressions: - code: ResourceNameRestriction from: fluxconfiguration.json @@ -59,7 +59,7 @@ suppressions: from: fluxconfiguration.json reason: Existing service contract needs to be backward compatible. - code: EnumInsteadOfBoolean - from: kubeInventory.json + from: KubernetesResources.json reason: Boolean properties mirror the Kubernetes API contract directly and must remain boolean for compatibility. ``` @@ -69,11 +69,11 @@ These settings apply only when `--tag=package-preview-2026-06-only` is specified ``` yaml $(tag) == 'package-preview-2026-06-only' input-file: - - Microsoft.KubernetesConfiguration/kubeInventory/preview/2026-06-15-preview/kubeInventory.json - - Microsoft.KubernetesConfiguration/upgradeAssessment/preview/2026-06-15-preview/upgradeAssessment.json + - Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/KubernetesResources.json + - Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/upgradeAssessments.json suppressions: - code: EnumInsteadOfBoolean - from: kubeInventory.json + from: KubernetesResources.json reason: Boolean properties mirror the Kubernetes API contract directly and must remain boolean for compatibility. ``` From 18381b8d3b908d4409cd21c232ac9d4014f90f34 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Wed, 10 Jun 2026 22:20:46 -0700 Subject: [PATCH 30/39] Fix pretty and other examples --- .../GetKubernetesResources-DaemonSet.json | 92 ++++++++++++--- .../GetKubernetesResources-Pod.json | 105 ++++++++++++++---- ...GetKubernetesResources-ServiceAccount.json | 12 +- .../GetKubernetesResources-DaemonSet.json | 6 +- 4 files changed, 176 insertions(+), 39 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-DaemonSet.json index 384e2b0b1c53..519568082224 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-DaemonSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-DaemonSet.json @@ -35,24 +35,69 @@ "generation": 1, "creationTimestamp": "2026-01-01T00:00:00Z", "labels": [ - { "name": "k8s-app", "value": "kube-proxy" }, - { "name": "component", "value": "kube-proxy" } + { + "name": "k8s-app", + "value": "kube-proxy" + }, + { + "name": "component", + "value": "kube-proxy" + } ] }, "spec": { "selector": [ - { "name": "k8s-app", "value": "kube-proxy" } + { + "name": "k8s-app", + "value": "kube-proxy" + } ], "strategyType": "RollingUpdate", "maxUnavailable": "1", "serviceAccountName": "kube-proxy", "tolerations": [ - { "operator": "Exists" } + { + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "node.kubernetes.io/unreachable", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "node.kubernetes.io/disk-pressure", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "node.kubernetes.io/memory-pressure", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "node.kubernetes.io/unschedulable", + "operator": "Exists", + "effect": "NoSchedule" + } ], "volumes": [ - { "name": "kube-proxy", "sourceType": "configMap", "source": "kube-proxy" }, - { "name": "xtables-lock", "sourceType": "hostPath", "source": "/run/xtables.lock" }, - { "name": "lib-modules", "sourceType": "hostPath", "source": "/lib/modules" } + { + "name": "kube-proxy", + "sourceType": "configMap", + "source": "kube-proxy" + }, + { + "name": "xtables-lock", + "sourceType": "hostPath", + "source": "/run/xtables.lock" + }, + { + "name": "lib-modules", + "sourceType": "hostPath", + "source": "/lib/modules" + } ], "containers": [ { @@ -60,14 +105,29 @@ "image": "registry.k8s.io/kube-proxy:v1.29.0", "imagePullPolicy": "IfNotPresent", "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + } }, "volumeMounts": [ - { "name": "kube-proxy", "mountPath": "/var/lib/kube-proxy" }, - { "name": "xtables-lock", "mountPath": "/run/xtables.lock" }, - { "name": "lib-modules", "mountPath": "/lib/modules", "readOnly": true } + { + "name": "kube-proxy", + "mountPath": "/var/lib/kube-proxy" + }, + { + "name": "xtables-lock", + "mountPath": "/run/xtables.lock" + }, + { + "name": "lib-modules", + "mountPath": "/lib/modules", + "readOnly": true + } ], - "securityContext": { "privileged": true } + "securityContext": { + "privileged": true + } } ] }, @@ -81,7 +141,11 @@ "updatedReplicas": 3, "observedGeneration": 1, "conditions": [ - { "type": "Available", "status": "True", "lastTransitionTime": "2026-01-01T00:02:00Z" } + { + "type": "Available", + "status": "True", + "lastTransitionTime": "2026-01-01T00:02:00Z" + } ] }, "events": [], @@ -90,4 +154,4 @@ } } } -} \ No newline at end of file +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Pod.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Pod.json index f44071397e6f..30f43f8b4ffc 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Pod.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-Pod.json @@ -35,8 +35,14 @@ "generation": 1, "creationTimestamp": "2026-04-01T08:05:00Z", "labels": [ - { "name": "k8s-app", "value": "kube-dns" }, - { "name": "pod-template-hash", "value": "5d78c9869d" } + { + "name": "k8s-app", + "value": "kube-dns" + }, + { + "name": "pod-template-hash", + "value": "5d78c9869d" + } ], "ownerReferences": [ { @@ -60,7 +66,10 @@ "runAsNonRoot": true }, "tolerations": [ - { "key": "CriticalAddonsOnly", "operator": "Exists" }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + }, { "key": "node-role.kubernetes.io/control-plane", "operator": "Exists", @@ -68,8 +77,15 @@ } ], "volumes": [ - { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, - { "name": "kube-api-access", "sourceType": "projected" } + { + "name": "config-volume", + "sourceType": "configMap", + "source": "coredns" + }, + { + "name": "kube-api-access", + "sourceType": "projected" + } ], "containers": [ { @@ -77,16 +93,37 @@ "image": "registry.k8s.io/coredns/coredns:v1.11.1", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "dns", "containerPort": 53, "protocol": "UDP" }, - { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, - { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } + { + "name": "dns", + "containerPort": 53, + "protocol": "UDP" + }, + { + "name": "dns-tcp", + "containerPort": 53, + "protocol": "TCP" + }, + { + "name": "metrics", + "containerPort": 9153, + "protocol": "TCP" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "70Mi" }, - "limits": { "memory": "170Mi" } + "requests": { + "cpu": "100m", + "memory": "70Mi" + }, + "limits": { + "memory": "170Mi" + } }, "volumeMounts": [ - { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, + { + "name": "config-volume", + "mountPath": "/etc/coredns", + "readOnly": true + }, { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", @@ -97,8 +134,12 @@ "allowPrivilegeEscalation": false, "readOnlyRootFilesystem": true, "capabilities": { - "add": ["NET_BIND_SERVICE"], - "drop": ["ALL"] + "add": [ + "NET_BIND_SERVICE" + ], + "drop": [ + "ALL" + ] } }, "livenessProbe": { @@ -117,18 +158,38 @@ "status": { "phase": "Running", "podIp": "10.244.0.3", - "podIps": ["10.244.0.3"], + "podIps": [ + "10.244.0.3" + ], "hostIp": "10.240.0.5", - "hostIps": ["10.240.0.5"], + "hostIps": [ + "10.240.0.5" + ], "startTime": "2026-04-01T08:05:02Z", "qosClass": "Burstable", "reason": "", "initContainerStatuses": [], "conditions": [ - { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, - { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:00Z" } + { + "type": "Initialized", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:02Z" + }, + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:14Z" + }, + { + "type": "ContainersReady", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:14Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:00Z" + } ], "containerStatuses": [ { @@ -139,7 +200,9 @@ "image": "registry.k8s.io/coredns/coredns:v1.11.1", "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", "state": { - "running": { "startedAt": "2026-04-01T08:05:13Z" } + "running": { + "startedAt": "2026-04-01T08:05:13Z" + } } } ] @@ -172,4 +235,4 @@ } } } -} \ No newline at end of file +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ServiceAccount.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ServiceAccount.json index 0b52c834fa23..060e7c2a1537 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ServiceAccount.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/examples/2026-06-15-preview/GetKubernetesResources-ServiceAccount.json @@ -34,8 +34,14 @@ "resourceVersion": "890123", "creationTimestamp": "2026-01-01T00:00:00Z", "labels": [ - { "name": "k8s-app", "value": "kube-dns" }, - { "name": "kubernetes.io/cluster-service", "value": "true" } + { + "name": "k8s-app", + "value": "kube-dns" + }, + { + "name": "kubernetes.io/cluster-service", + "value": "true" + } ], "annotations": [ { @@ -56,4 +62,4 @@ } } } -} \ No newline at end of file +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json index 384e2b0b1c53..0402311d0f6a 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json @@ -47,7 +47,11 @@ "maxUnavailable": "1", "serviceAccountName": "kube-proxy", "tolerations": [ - { "operator": "Exists" } + { "key": "node.kubernetes.io/not-ready", "operator": "Exists", "effect": "NoSchedule" }, + { "key": "node.kubernetes.io/unreachable", "operator": "Exists", "effect": "NoSchedule" }, + { "key": "node.kubernetes.io/disk-pressure", "operator": "Exists", "effect": "NoSchedule" }, + { "key": "node.kubernetes.io/memory-pressure", "operator": "Exists", "effect": "NoSchedule" }, + { "key": "node.kubernetes.io/unschedulable", "operator": "Exists", "effect": "NoSchedule" } ], "volumes": [ { "name": "kube-proxy", "sourceType": "configMap", "source": "kube-proxy" }, From 60cd8b9f342a4699187b3bb0ee969dc1d0ba26c8 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Wed, 10 Jun 2026 22:31:26 -0700 Subject: [PATCH 31/39] Fix pretty --- .../PostgreSql/lease.yaml | 5 - .../GetKubernetesResources-DaemonSet.json | 96 +++++++++++++--- .../examples/GetKubernetesResources-Pod.json | 105 ++++++++++++++---- ...GetKubernetesResources-ServiceAccount.json | 12 +- 4 files changed, 171 insertions(+), 47 deletions(-) delete mode 100644 .github/arm-leases/postgresql/Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml diff --git a/.github/arm-leases/postgresql/Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml b/.github/arm-leases/postgresql/Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml deleted file mode 100644 index a73ff4c971fd..000000000000 --- a/.github/arm-leases/postgresql/Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml +++ /dev/null @@ -1,5 +0,0 @@ -lease: - resource-provider: Microsoft.DBforPostgreSQL - startdate: "2026-06-05" - duration: P180D - reviewer: "@vikeshi26" diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json index 0402311d0f6a..519568082224 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-DaemonSet.json @@ -35,28 +35,69 @@ "generation": 1, "creationTimestamp": "2026-01-01T00:00:00Z", "labels": [ - { "name": "k8s-app", "value": "kube-proxy" }, - { "name": "component", "value": "kube-proxy" } + { + "name": "k8s-app", + "value": "kube-proxy" + }, + { + "name": "component", + "value": "kube-proxy" + } ] }, "spec": { "selector": [ - { "name": "k8s-app", "value": "kube-proxy" } + { + "name": "k8s-app", + "value": "kube-proxy" + } ], "strategyType": "RollingUpdate", "maxUnavailable": "1", "serviceAccountName": "kube-proxy", "tolerations": [ - { "key": "node.kubernetes.io/not-ready", "operator": "Exists", "effect": "NoSchedule" }, - { "key": "node.kubernetes.io/unreachable", "operator": "Exists", "effect": "NoSchedule" }, - { "key": "node.kubernetes.io/disk-pressure", "operator": "Exists", "effect": "NoSchedule" }, - { "key": "node.kubernetes.io/memory-pressure", "operator": "Exists", "effect": "NoSchedule" }, - { "key": "node.kubernetes.io/unschedulable", "operator": "Exists", "effect": "NoSchedule" } + { + "key": "node.kubernetes.io/not-ready", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "node.kubernetes.io/unreachable", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "node.kubernetes.io/disk-pressure", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "node.kubernetes.io/memory-pressure", + "operator": "Exists", + "effect": "NoSchedule" + }, + { + "key": "node.kubernetes.io/unschedulable", + "operator": "Exists", + "effect": "NoSchedule" + } ], "volumes": [ - { "name": "kube-proxy", "sourceType": "configMap", "source": "kube-proxy" }, - { "name": "xtables-lock", "sourceType": "hostPath", "source": "/run/xtables.lock" }, - { "name": "lib-modules", "sourceType": "hostPath", "source": "/lib/modules" } + { + "name": "kube-proxy", + "sourceType": "configMap", + "source": "kube-proxy" + }, + { + "name": "xtables-lock", + "sourceType": "hostPath", + "source": "/run/xtables.lock" + }, + { + "name": "lib-modules", + "sourceType": "hostPath", + "source": "/lib/modules" + } ], "containers": [ { @@ -64,14 +105,29 @@ "image": "registry.k8s.io/kube-proxy:v1.29.0", "imagePullPolicy": "IfNotPresent", "resources": { - "requests": { "cpu": "100m", "memory": "128Mi" } + "requests": { + "cpu": "100m", + "memory": "128Mi" + } }, "volumeMounts": [ - { "name": "kube-proxy", "mountPath": "/var/lib/kube-proxy" }, - { "name": "xtables-lock", "mountPath": "/run/xtables.lock" }, - { "name": "lib-modules", "mountPath": "/lib/modules", "readOnly": true } + { + "name": "kube-proxy", + "mountPath": "/var/lib/kube-proxy" + }, + { + "name": "xtables-lock", + "mountPath": "/run/xtables.lock" + }, + { + "name": "lib-modules", + "mountPath": "/lib/modules", + "readOnly": true + } ], - "securityContext": { "privileged": true } + "securityContext": { + "privileged": true + } } ] }, @@ -85,7 +141,11 @@ "updatedReplicas": 3, "observedGeneration": 1, "conditions": [ - { "type": "Available", "status": "True", "lastTransitionTime": "2026-01-01T00:02:00Z" } + { + "type": "Available", + "status": "True", + "lastTransitionTime": "2026-01-01T00:02:00Z" + } ] }, "events": [], @@ -94,4 +154,4 @@ } } } -} \ No newline at end of file +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Pod.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Pod.json index f44071397e6f..30f43f8b4ffc 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Pod.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-Pod.json @@ -35,8 +35,14 @@ "generation": 1, "creationTimestamp": "2026-04-01T08:05:00Z", "labels": [ - { "name": "k8s-app", "value": "kube-dns" }, - { "name": "pod-template-hash", "value": "5d78c9869d" } + { + "name": "k8s-app", + "value": "kube-dns" + }, + { + "name": "pod-template-hash", + "value": "5d78c9869d" + } ], "ownerReferences": [ { @@ -60,7 +66,10 @@ "runAsNonRoot": true }, "tolerations": [ - { "key": "CriticalAddonsOnly", "operator": "Exists" }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + }, { "key": "node-role.kubernetes.io/control-plane", "operator": "Exists", @@ -68,8 +77,15 @@ } ], "volumes": [ - { "name": "config-volume", "sourceType": "configMap", "source": "coredns" }, - { "name": "kube-api-access", "sourceType": "projected" } + { + "name": "config-volume", + "sourceType": "configMap", + "source": "coredns" + }, + { + "name": "kube-api-access", + "sourceType": "projected" + } ], "containers": [ { @@ -77,16 +93,37 @@ "image": "registry.k8s.io/coredns/coredns:v1.11.1", "imagePullPolicy": "IfNotPresent", "ports": [ - { "name": "dns", "containerPort": 53, "protocol": "UDP" }, - { "name": "dns-tcp", "containerPort": 53, "protocol": "TCP" }, - { "name": "metrics", "containerPort": 9153, "protocol": "TCP" } + { + "name": "dns", + "containerPort": 53, + "protocol": "UDP" + }, + { + "name": "dns-tcp", + "containerPort": 53, + "protocol": "TCP" + }, + { + "name": "metrics", + "containerPort": 9153, + "protocol": "TCP" + } ], "resources": { - "requests": { "cpu": "100m", "memory": "70Mi" }, - "limits": { "memory": "170Mi" } + "requests": { + "cpu": "100m", + "memory": "70Mi" + }, + "limits": { + "memory": "170Mi" + } }, "volumeMounts": [ - { "name": "config-volume", "mountPath": "/etc/coredns", "readOnly": true }, + { + "name": "config-volume", + "mountPath": "/etc/coredns", + "readOnly": true + }, { "name": "kube-api-access", "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", @@ -97,8 +134,12 @@ "allowPrivilegeEscalation": false, "readOnlyRootFilesystem": true, "capabilities": { - "add": ["NET_BIND_SERVICE"], - "drop": ["ALL"] + "add": [ + "NET_BIND_SERVICE" + ], + "drop": [ + "ALL" + ] } }, "livenessProbe": { @@ -117,18 +158,38 @@ "status": { "phase": "Running", "podIp": "10.244.0.3", - "podIps": ["10.244.0.3"], + "podIps": [ + "10.244.0.3" + ], "hostIp": "10.240.0.5", - "hostIps": ["10.240.0.5"], + "hostIps": [ + "10.240.0.5" + ], "startTime": "2026-04-01T08:05:02Z", "qosClass": "Burstable", "reason": "", "initContainerStatuses": [], "conditions": [ - { "type": "Initialized", "status": "True", "lastTransitionTime": "2026-04-01T08:05:02Z" }, - { "type": "Ready", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "ContainersReady", "status": "True", "lastTransitionTime": "2026-04-01T08:05:14Z" }, - { "type": "PodScheduled", "status": "True", "lastTransitionTime": "2026-04-01T08:05:00Z" } + { + "type": "Initialized", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:02Z" + }, + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:14Z" + }, + { + "type": "ContainersReady", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:14Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastTransitionTime": "2026-04-01T08:05:00Z" + } ], "containerStatuses": [ { @@ -139,7 +200,9 @@ "image": "registry.k8s.io/coredns/coredns:v1.11.1", "containerId": "containerd://b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3d4e5f6a7b2c3", "state": { - "running": { "startedAt": "2026-04-01T08:05:13Z" } + "running": { + "startedAt": "2026-04-01T08:05:13Z" + } } } ] @@ -172,4 +235,4 @@ } } } -} \ No newline at end of file +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ServiceAccount.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ServiceAccount.json index 0b52c834fa23..060e7c2a1537 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ServiceAccount.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/examples/GetKubernetesResources-ServiceAccount.json @@ -34,8 +34,14 @@ "resourceVersion": "890123", "creationTimestamp": "2026-01-01T00:00:00Z", "labels": [ - { "name": "k8s-app", "value": "kube-dns" }, - { "name": "kubernetes.io/cluster-service", "value": "true" } + { + "name": "k8s-app", + "value": "kube-dns" + }, + { + "name": "kubernetes.io/cluster-service", + "value": "true" + } ], "annotations": [ { @@ -56,4 +62,4 @@ } } } -} \ No newline at end of file +} From e5ff801f3bd702e17e6852314e02c72302a03ed6 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Wed, 10 Jun 2026 22:41:16 -0700 Subject: [PATCH 32/39] Revert commit to lease file --- .../Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .github/arm-leases/postgresql/Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml diff --git a/.github/arm-leases/postgresql/Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml b/.github/arm-leases/postgresql/Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml new file mode 100644 index 000000000000..a73ff4c971fd --- /dev/null +++ b/.github/arm-leases/postgresql/Microsoft.DBforPostgreSQL/PostgreSql/lease.yaml @@ -0,0 +1,5 @@ +lease: + resource-provider: Microsoft.DBforPostgreSQL + startdate: "2026-06-05" + duration: P180D + reviewer: "@vikeshi26" From 33bdae5d37929227a411a9482d3198fc0e652423 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 11 Jun 2026 11:30:49 -0700 Subject: [PATCH 33/39] Update operations to include new api version --- .../ListAsyncOperationStatus.json | 35 +++ .../2026-06-15-preview/OperationsList.json | 180 ++++++++++++ .../operations/main.tsp | 5 + .../examples/ListAsyncOperationStatus.json | 35 +++ .../examples/OperationsList.json | 180 ++++++++++++ .../2026-06-15-preview/operations.json | 275 ++++++++++++++++++ .../resource-manager/readme.md | 3 +- 7 files changed, 712 insertions(+), 1 deletion(-) create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/OperationsList.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/OperationsList.json create mode 100644 specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json new file mode 100644 index 000000000000..533e3d878416 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json @@ -0,0 +1,35 @@ +{ + "parameters": { + "api-version": "2026-06-15-preview", + "clusterName": "clusterName1", + "clusterResourceName": "connectedClusters", + "clusterRp": "Microsoft.Kubernetes", + "resourceGroupName": "rg1", + "subscriptionId": "subId1" + }, + "responses": { + "200": { + "body": { + "nextLink": null, + "value": [ + { + "name": "99999999-9999-9999-9999-999999999999", + "error": null, + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", + "properties": {}, + "status": "Deleting" + }, + { + "name": "88888888-8888-8888-8888-888888888888", + "error": null, + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", + "properties": {}, + "status": "Creating" + } + ] + } + } + }, + "operationId": "OperationStatus_List", + "title": "AsyncOperationStatus List" +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/OperationsList.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/OperationsList.json new file mode 100644 index 000000000000..156c6b70497b --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/OperationsList.json @@ -0,0 +1,180 @@ +{ + "parameters": { + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "name": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/write", + "display": { + "description": "Creates or updates source control configuration.", + "operation": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/write", + "provider": "Microsoft Kubernetes Configuration", + "resource": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/read", + "display": { + "description": "Gets source control configuration.", + "operation": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/read", + "provider": "Microsoft Kubernetes Configuration", + "resource": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/delete", + "display": { + "description": "Deletes source control configuration.", + "operation": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/delete", + "provider": "Microsoft Kubernetes Configuration", + "resource": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensions/read", + "display": { + "description": "Get the specified Extension.", + "operation": "Get extension", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensions" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensions/write", + "display": { + "description": "Create the Extension specified.", + "operation": "Create a Extension", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensions" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensions/delete", + "display": { + "description": "Delete the specified Extension.", + "operation": "Delete Extension", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensions" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensions/operations/read", + "display": { + "description": "Get the Status of the Extension Async Operation.", + "operation": "Get Extension Async Operation Status", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensions" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/fluxConfigurations/read", + "display": { + "description": "Get the specified Flux Configuration.", + "operation": "Get fluxConfiguration", + "provider": "Microsoft KubernetesConfiguration", + "resource": "fluxConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/fluxConfigurations/write", + "display": { + "description": "Create the Flux Configuration specified.", + "operation": "Create a fluxConfiguration", + "provider": "Microsoft KubernetesConfiguration", + "resource": "fluxConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/fluxConfigurations/delete", + "display": { + "description": "Delete the specified Flux Configuration.", + "operation": "Delete Flux Configuration", + "provider": "Microsoft KubernetesConfiguration", + "resource": "fluxConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/fluxConfigurations/operations/read", + "display": { + "description": "Get the Status of the Flux Configuration Async Operation.", + "operation": "Get Flux Configuration Async Operation Status", + "provider": "Microsoft KubernetesConfiguration", + "resource": "fluxConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/register/action", + "display": { + "description": "Registers subscription to Microsoft.KubernetesConfiguration resource provider.", + "operation": "Microsoft.KubernetesConfiguration/register/action", + "provider": "Microsoft Kubernetes Configuration", + "resource": "Register" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensionTypes/read", + "display": { + "description": "Get Kubernetes Configuration Available Extensions", + "operation": "Microsoft.KubernetesConfiguration/extensionTypes/read", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensionTypes" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/kubernetesResources/read", + "display": { + "description": "Get the specified Kubernetes Resource inventory item.", + "operation": "Get kubernetesResources", + "provider": "Microsoft KubernetesConfiguration", + "resource": "kubernetesResources" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/upgradeAssessments/read", + "display": { + "description": "Get the specified Upgrade Assessment for a cluster.", + "operation": "Get upgradeAssessments", + "provider": "Microsoft KubernetesConfiguration", + "resource": "upgradeAssessments" + }, + "isDataAction": false, + "origin": "user,system" + } + ] + } + } + }, + "operationId": "Operations_List", + "title": "BatchAccountDelete" +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp index c51a9ccc7b1e..fa013477ad10 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp @@ -44,6 +44,11 @@ enum Versions { * The 2025-04-01 API version. */ v2025_04_01: "2025-04-01", + + /** + * The 2026-06-15-preview API version. + */ + v2026_06_15_preview: "2026-06-15-preview", } interface Operations diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json new file mode 100644 index 000000000000..533e3d878416 --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json @@ -0,0 +1,35 @@ +{ + "parameters": { + "api-version": "2026-06-15-preview", + "clusterName": "clusterName1", + "clusterResourceName": "connectedClusters", + "clusterRp": "Microsoft.Kubernetes", + "resourceGroupName": "rg1", + "subscriptionId": "subId1" + }, + "responses": { + "200": { + "body": { + "nextLink": null, + "value": [ + { + "name": "99999999-9999-9999-9999-999999999999", + "error": null, + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", + "properties": {}, + "status": "Deleting" + }, + { + "name": "88888888-8888-8888-8888-888888888888", + "error": null, + "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", + "properties": {}, + "status": "Creating" + } + ] + } + } + }, + "operationId": "OperationStatus_List", + "title": "AsyncOperationStatus List" +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/OperationsList.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/OperationsList.json new file mode 100644 index 000000000000..156c6b70497b --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/OperationsList.json @@ -0,0 +1,180 @@ +{ + "parameters": { + "api-version": "2026-06-15-preview" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "name": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/write", + "display": { + "description": "Creates or updates source control configuration.", + "operation": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/write", + "provider": "Microsoft Kubernetes Configuration", + "resource": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/read", + "display": { + "description": "Gets source control configuration.", + "operation": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/read", + "provider": "Microsoft Kubernetes Configuration", + "resource": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/delete", + "display": { + "description": "Deletes source control configuration.", + "operation": "Microsoft.KubernetesConfiguration/sourceControlConfigurations/delete", + "provider": "Microsoft Kubernetes Configuration", + "resource": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensions/read", + "display": { + "description": "Get the specified Extension.", + "operation": "Get extension", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensions" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensions/write", + "display": { + "description": "Create the Extension specified.", + "operation": "Create a Extension", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensions" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensions/delete", + "display": { + "description": "Delete the specified Extension.", + "operation": "Delete Extension", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensions" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensions/operations/read", + "display": { + "description": "Get the Status of the Extension Async Operation.", + "operation": "Get Extension Async Operation Status", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensions" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/fluxConfigurations/read", + "display": { + "description": "Get the specified Flux Configuration.", + "operation": "Get fluxConfiguration", + "provider": "Microsoft KubernetesConfiguration", + "resource": "fluxConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/fluxConfigurations/write", + "display": { + "description": "Create the Flux Configuration specified.", + "operation": "Create a fluxConfiguration", + "provider": "Microsoft KubernetesConfiguration", + "resource": "fluxConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/fluxConfigurations/delete", + "display": { + "description": "Delete the specified Flux Configuration.", + "operation": "Delete Flux Configuration", + "provider": "Microsoft KubernetesConfiguration", + "resource": "fluxConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/fluxConfigurations/operations/read", + "display": { + "description": "Get the Status of the Flux Configuration Async Operation.", + "operation": "Get Flux Configuration Async Operation Status", + "provider": "Microsoft KubernetesConfiguration", + "resource": "fluxConfigurations" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/register/action", + "display": { + "description": "Registers subscription to Microsoft.KubernetesConfiguration resource provider.", + "operation": "Microsoft.KubernetesConfiguration/register/action", + "provider": "Microsoft Kubernetes Configuration", + "resource": "Register" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/extensionTypes/read", + "display": { + "description": "Get Kubernetes Configuration Available Extensions", + "operation": "Microsoft.KubernetesConfiguration/extensionTypes/read", + "provider": "Microsoft KubernetesConfiguration", + "resource": "extensionTypes" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/kubernetesResources/read", + "display": { + "description": "Get the specified Kubernetes Resource inventory item.", + "operation": "Get kubernetesResources", + "provider": "Microsoft KubernetesConfiguration", + "resource": "kubernetesResources" + }, + "isDataAction": false, + "origin": "user,system" + }, + { + "name": "Microsoft.KubernetesConfiguration/upgradeAssessments/read", + "display": { + "description": "Get the specified Upgrade Assessment for a cluster.", + "operation": "Get upgradeAssessments", + "provider": "Microsoft KubernetesConfiguration", + "resource": "upgradeAssessments" + }, + "isDataAction": false, + "origin": "user,system" + } + ] + } + } + }, + "operationId": "Operations_List", + "title": "BatchAccountDelete" +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json new file mode 100644 index 000000000000..f870eb6ed8cb --- /dev/null +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json @@ -0,0 +1,275 @@ +{ + "swagger": "2.0", + "info": { + "title": "OperationsClient", + "version": "2026-06-15-preview", + "description": "Use these APIs to create extension resources through ARM, for Kubernetes Clusters.", + "x-typespec-generated": [ + { + "emitter": "@azure-tools/typespec-autorest" + } + ] + }, + "schemes": [ + "https" + ], + "host": "management.azure.com", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "security": [ + { + "azure_auth": [ + "user_impersonation" + ] + } + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "description": "Azure Active Directory OAuth2 Flow.", + "flow": "implicit", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "scopes": { + "user_impersonation": "impersonate your user account" + } + } + }, + "tags": [ + { + "name": "Operations" + }, + { + "name": "Operations in a Cluster" + } + ], + "paths": { + "/providers/Microsoft.KubernetesConfiguration/operations": { + "get": { + "operationId": "Operations_List", + "tags": [ + "Operations" + ], + "description": "List all the available operations the KubernetesConfiguration resource provider supports.", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/parameters/ApiVersionParameter" + } + ], + "responses": { + "200": { + "description": "Azure operation completed successfully.", + "schema": { + "$ref": "#/definitions/ResourceProviderOperationList" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "BatchAccountDelete": { + "$ref": "./examples/OperationsList.json" + } + }, + "x-ms-pageable": { + "nextLinkName": "nextLink" + } + } + }, + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{clusterRp}/{clusterResourceName}/{clusterName}/providers/Microsoft.KubernetesConfiguration/operations": { + "get": { + "operationId": "OperationStatus_List", + "tags": [ + "Operations in a Cluster" + ], + "description": "List Async Operations, currently in progress, in a cluster", + "parameters": [ + { + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/parameters/ApiVersionParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/parameters/SubscriptionIdParameter" + }, + { + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/parameters/ResourceGroupNameParameter" + }, + { + "name": "clusterRp", + "in": "path", + "description": "The Kubernetes cluster RP - i.e. Microsoft.ContainerService, Microsoft.Kubernetes, Microsoft.HybridContainerService.", + "required": true, + "type": "string" + }, + { + "name": "clusterResourceName", + "in": "path", + "description": "The Kubernetes cluster resource name - i.e. managedClusters, connectedClusters, provisionedClusters, appliances.", + "required": true, + "type": "string" + }, + { + "name": "clusterName", + "in": "path", + "description": "The name of the kubernetes cluster.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "The request has succeeded.", + "schema": { + "$ref": "#/definitions/OperationStatusList" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/ErrorResponse" + } + } + }, + "x-ms-examples": { + "AsyncOperationStatus List": { + "$ref": "./examples/ListAsyncOperationStatus.json" + } + }, + "x-ms-pageable": { + "nextLinkName": "nextLink" + } + } + } + }, + "definitions": { + "OperationStatusList": { + "type": "object", + "description": "The async operations in progress, in the cluster.", + "properties": { + "value": { + "type": "array", + "description": "List of async operations in progress, in the cluster.", + "items": { + "$ref": "#/definitions/OperationStatusResult" + }, + "readOnly": true + }, + "nextLink": { + "type": "string", + "description": "URL to get the next set of Operation Result objects, if any.", + "readOnly": true + } + } + }, + "OperationStatusResult": { + "type": "object", + "description": "The current status of an async operation.", + "properties": { + "id": { + "type": "string", + "description": "Fully qualified ID for the async operation." + }, + "name": { + "type": "string", + "description": "Name of the async operation." + }, + "status": { + "type": "string", + "description": "Operation status." + }, + "properties": { + "type": "object", + "description": "Additional information, if available.", + "x-nullable": true, + "additionalProperties": { + "type": "string" + } + }, + "error": { + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/ErrorDetail", + "description": "If present, details of the operation error.", + "x-nullable": true, + "readOnly": true + } + }, + "required": [ + "status" + ] + }, + "ResourceProviderOperation": { + "type": "object", + "description": "Supported operation of this resource provider.", + "properties": { + "name": { + "type": "string", + "description": "Operation name, in format of {provider}/{resource}/{operation}" + }, + "display": { + "$ref": "#/definitions/ResourceProviderOperationDisplay", + "description": "Display metadata associated with the operation." + }, + "isDataAction": { + "type": "boolean", + "description": "The flag that indicates whether the operation applies to data plane.", + "readOnly": true + }, + "origin": { + "type": "string", + "description": "Origin of the operation", + "readOnly": true + } + } + }, + "ResourceProviderOperationDisplay": { + "type": "object", + "description": "Display metadata associated with the operation.", + "properties": { + "provider": { + "type": "string", + "description": "Resource provider: Microsoft KubernetesConfiguration." + }, + "resource": { + "type": "string", + "description": "Resource on which the operation is performed." + }, + "operation": { + "type": "string", + "description": "Type of operation: get, read, delete, etc." + }, + "description": { + "type": "string", + "description": "Description of this operation." + } + } + }, + "ResourceProviderOperationList": { + "type": "object", + "description": "Result of the request to list operations.", + "properties": { + "value": { + "type": "array", + "description": "List of operations supported by this resource provider.", + "items": { + "$ref": "#/definitions/ResourceProviderOperation" + }, + "readOnly": true, + "x-ms-identifiers": [ + "name" + ] + }, + "nextLink": { + "type": "string", + "description": "URL to the next set of results, if any.", + "readOnly": true + } + } + } + }, + "parameters": {} +} diff --git a/specification/kubernetesconfiguration/resource-manager/readme.md b/specification/kubernetesconfiguration/resource-manager/readme.md index 3a938ef30b15..9aaa380aa5e6 100644 --- a/specification/kubernetesconfiguration/resource-manager/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/readme.md @@ -39,7 +39,7 @@ input-file: - Microsoft.KubernetesConfiguration/stable/2023-05-01/extensions.json - Microsoft.KubernetesConfiguration/preview/2024-04-01-preview/fluxconfiguration.json - Microsoft.KubernetesConfiguration/stable/2023-05-01/kubernetesconfiguration.json - - Microsoft.KubernetesConfiguration/stable/2023-05-01/operations.json + - Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json - Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/KubernetesResources.json - Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/upgradeAssessments.json suppressions: @@ -69,6 +69,7 @@ These settings apply only when `--tag=package-preview-2026-06-only` is specified ``` yaml $(tag) == 'package-preview-2026-06-only' input-file: + - Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json - Microsoft.KubernetesConfiguration/KubernetesResources/preview/2026-06-15-preview/KubernetesResources.json - Microsoft.KubernetesConfiguration/upgradeAssessments/preview/2026-06-15-preview/upgradeAssessments.json suppressions: From bc65e81c66fdb6b5fd482ed54e908d2100321a04 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 11 Jun 2026 14:59:41 -0700 Subject: [PATCH 34/39] Use v6 for the latest version --- .../operations/main.tsp | 15 +++++++++++++-- .../preview/2026-06-15-preview/operations.json | 14 +++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp index fa013477ad10..bc0dccfb17a3 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp @@ -27,8 +27,6 @@ using TypeSpec.Versioning; @armProviderNamespace @service(#{ title: "OperationsClient" }) @versioned(Versions) -// FIXME: Common type version v2 is not supported for now. Set to v3. -@armCommonTypesVersion(Azure.ResourceManager.CommonTypes.Versions.v3) namespace Microsoft.KubernetesConfiguration; /** @@ -51,6 +49,19 @@ enum Versions { v2026_06_15_preview: "2026-06-15-preview", } +@@armCommonTypesVersion( + Versions.v2025_03_01, + Azure.ResourceManager.CommonTypes.Versions.v3 +); +@@armCommonTypesVersion( + Versions.v2025_04_01, + Azure.ResourceManager.CommonTypes.Versions.v3 +); +@@armCommonTypesVersion( + Versions.v2026_06_15_preview, + Azure.ResourceManager.CommonTypes.Versions.v6 +); + interface Operations extends Azure.ResourceManager.Legacy.Operations< ArmResponse, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json index f870eb6ed8cb..c5b496a1e250 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json @@ -56,7 +56,7 @@ "description": "List all the available operations the KubernetesConfiguration resource provider supports.", "parameters": [ { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/parameters/ApiVersionParameter" + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" } ], "responses": { @@ -69,7 +69,7 @@ "default": { "description": "An unexpected error response.", "schema": { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/ErrorResponse" + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorResponse" } } }, @@ -92,13 +92,13 @@ "description": "List Async Operations, currently in progress, in a cluster", "parameters": [ { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/parameters/ApiVersionParameter" + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ApiVersionParameter" }, { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/parameters/SubscriptionIdParameter" + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/SubscriptionIdParameter" }, { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/parameters/ResourceGroupNameParameter" + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/parameters/ResourceGroupNameParameter" }, { "name": "clusterRp", @@ -132,7 +132,7 @@ "default": { "description": "An unexpected error response.", "schema": { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/ErrorResponse" + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorResponse" } } }, @@ -192,7 +192,7 @@ } }, "error": { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/ErrorDetail", + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", "description": "If present, details of the operation error.", "x-nullable": true, "readOnly": true From eac1a9ef14d5252fe9609607629237cfb5712f81 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 11 Jun 2026 15:07:18 -0700 Subject: [PATCH 35/39] Fix violations --- .../2026-06-15-preview/ListAsyncOperationStatus.json | 6 +++--- .../examples/ListAsyncOperationStatus.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json index 533e3d878416..6f1788aff0a6 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json @@ -5,7 +5,7 @@ "clusterResourceName": "connectedClusters", "clusterRp": "Microsoft.Kubernetes", "resourceGroupName": "rg1", - "subscriptionId": "subId1" + "subscriptionId": "00000000-0000-0000-0000-000000000001" }, "responses": { "200": { @@ -15,14 +15,14 @@ { "name": "99999999-9999-9999-9999-999999999999", "error": null, - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", "properties": {}, "status": "Deleting" }, { "name": "88888888-8888-8888-8888-888888888888", "error": null, - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", "properties": {}, "status": "Creating" } diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json index 533e3d878416..6f1788aff0a6 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json @@ -5,7 +5,7 @@ "clusterResourceName": "connectedClusters", "clusterRp": "Microsoft.Kubernetes", "resourceGroupName": "rg1", - "subscriptionId": "subId1" + "subscriptionId": "00000000-0000-0000-0000-000000000001" }, "responses": { "200": { @@ -15,14 +15,14 @@ { "name": "99999999-9999-9999-9999-999999999999", "error": null, - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", "properties": {}, "status": "Deleting" }, { "name": "88888888-8888-8888-8888-888888888888", "error": null, - "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", + "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", "properties": {}, "status": "Creating" } From a983baaabd0afed203fca65130aec2bec9414222 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 11 Jun 2026 15:14:37 -0700 Subject: [PATCH 36/39] update readme --- .../operations/readme.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/readme.md b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/readme.md index 343cf7d7893e..02432c3dc26e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/readme.md @@ -33,6 +33,30 @@ tag: package-2025-04 --- +### Tag: package-preview-2026-06 + +These settings apply only when `--tag=package-preview-2026-06` is specified on the command line. + +``` yaml $(tag) == 'package-preview-2026-06' +input-file: + - preview/2026-06-15-preview/operations.json +suppressions: + - code: OperationsApiSchemaUsesCommonTypes + from: operations.json + reason: Existing service contract needs to be backward compatible. + - code: OperationsApiTenantLevelOnly + from: operations.json + reason: Existing service contract needs to be backward compatible. + - code: ResourceNameRestriction + from: operations.json + reason: Existing service contract needs to be backward compatible. + - code: OperationsApiResponseSchema + from: operations.json + reason: Existing service contract needs to be backward compatible. +``` + +--- + ### Tag: package-2025-04 These settings apply only when `--tag=package-2025-04` is specified on the command line. From 9e9ec99db2e2c82fbe9a63b4a9c85ef1bdd29a78 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 11 Jun 2026 15:41:03 -0700 Subject: [PATCH 37/39] Fix operations type spec --- .../operations/main.tsp | 2 +- .../operations/models.tsp | 109 +----------------- .../2026-06-15-preview/operations.json | 107 +---------------- .../stable/2025-03-01/operations.json | 107 +---------------- .../stable/2025-04-01/operations.json | 107 +---------------- 5 files changed, 9 insertions(+), 423 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp index bc0dccfb17a3..2a74738c6192 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/main.tsp @@ -64,7 +64,7 @@ enum Versions { interface Operations extends Azure.ResourceManager.Legacy.Operations< - ArmResponse, + ArmResponse, ErrorResponse > {} @@doc( diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/models.tsp b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/models.tsp index 5217c54b859d..3c62700128a6 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/models.tsp +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/models.tsp @@ -6,30 +6,11 @@ import "@azure-tools/typespec-azure-resource-manager"; using TypeSpec.Rest; using TypeSpec.Http; using Azure.ResourceManager; +using Azure.ResourceManager.CommonTypes; using Azure.ResourceManager.Foundations; namespace Microsoft.KubernetesConfiguration; -/** - * Result of the request to list operations. - */ -model ResourceProviderOperationList { - /** - * List of operations supported by this resource provider. - */ - @visibility(Lifecycle.Read) - @identifiers(#["name"]) - @pageItems - value?: ResourceProviderOperation[]; - - /** - * URL to the next set of results, if any. - */ - @nextLink - @visibility(Lifecycle.Read) - nextLink?: string; -} - /** * The async operations in progress, in the cluster. */ @@ -39,7 +20,7 @@ model OperationStatusList { */ @pageItems @visibility(Lifecycle.Read) - value?: OperationStatusResult[]; + value?: Azure.ResourceManager.CommonTypes.OperationStatusResult[]; /** * URL to get the next set of Operation Result objects, if any. @@ -48,89 +29,3 @@ model OperationStatusList { @visibility(Lifecycle.Read) nextLink?: string; } - -/** - * The current status of an async operation. - */ -model OperationStatusResult { - /** - * Fully qualified ID for the async operation. - */ - id?: string; - - /** - * Name of the async operation. - */ - name?: string; - - /** - * Operation status. - */ - status: string; - - /** - * Additional information, if available. - */ - #suppress "@azure-tools/typespec-azure-resource-manager/arm-no-record" "FIXME: Update justification, follow aka.ms/tsp/conversion-fix for details" - #suppress "@azure-tools/typespec-azure-core/no-nullable" "FIXME: Update justification, follow aka.ms/tsp/conversion-fix for details" - properties?: Record | null; - - /** - * If present, details of the operation error. - */ - #suppress "@azure-tools/typespec-azure-core/no-nullable" "FIXME: Update justification, follow aka.ms/tsp/conversion-fix for details" - @visibility(Lifecycle.Read) - error?: Azure.ResourceManager.CommonTypes.ErrorDetail | null; -} - -/** - * Supported operation of this resource provider. - */ -model ResourceProviderOperation { - /** - * Operation name, in format of {provider}/{resource}/{operation} - */ - name?: string; - - /** - * Display metadata associated with the operation. - */ - display?: ResourceProviderOperationDisplay; - - /** - * The flag that indicates whether the operation applies to data plane. - */ - @visibility(Lifecycle.Read) - isDataAction?: boolean; - - /** - * Origin of the operation - */ - @visibility(Lifecycle.Read) - origin?: string; -} - -/** - * Display metadata associated with the operation. - */ -model ResourceProviderOperationDisplay { - /** - * Resource provider: Microsoft KubernetesConfiguration. - */ - provider?: string; - - /** - * Resource on which the operation is performed. - */ - resource?: string; - - /** - * Type of operation: get, read, delete, etc. - */ - operation?: string; - - /** - * Description of this operation. - */ - description?: string; -} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json index c5b496a1e250..22cd4ef3b27e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/operations.json @@ -63,7 +63,7 @@ "200": { "description": "Azure operation completed successfully.", "schema": { - "$ref": "#/definitions/ResourceProviderOperationList" + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/OperationListResult" } }, "default": { @@ -156,7 +156,7 @@ "type": "array", "description": "List of async operations in progress, in the cluster.", "items": { - "$ref": "#/definitions/OperationStatusResult" + "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/OperationStatusResult" }, "readOnly": true }, @@ -166,109 +166,6 @@ "readOnly": true } } - }, - "OperationStatusResult": { - "type": "object", - "description": "The current status of an async operation.", - "properties": { - "id": { - "type": "string", - "description": "Fully qualified ID for the async operation." - }, - "name": { - "type": "string", - "description": "Name of the async operation." - }, - "status": { - "type": "string", - "description": "Operation status." - }, - "properties": { - "type": "object", - "description": "Additional information, if available.", - "x-nullable": true, - "additionalProperties": { - "type": "string" - } - }, - "error": { - "$ref": "../../../../../../common-types/resource-management/v6/types.json#/definitions/ErrorDetail", - "description": "If present, details of the operation error.", - "x-nullable": true, - "readOnly": true - } - }, - "required": [ - "status" - ] - }, - "ResourceProviderOperation": { - "type": "object", - "description": "Supported operation of this resource provider.", - "properties": { - "name": { - "type": "string", - "description": "Operation name, in format of {provider}/{resource}/{operation}" - }, - "display": { - "$ref": "#/definitions/ResourceProviderOperationDisplay", - "description": "Display metadata associated with the operation." - }, - "isDataAction": { - "type": "boolean", - "description": "The flag that indicates whether the operation applies to data plane.", - "readOnly": true - }, - "origin": { - "type": "string", - "description": "Origin of the operation", - "readOnly": true - } - } - }, - "ResourceProviderOperationDisplay": { - "type": "object", - "description": "Display metadata associated with the operation.", - "properties": { - "provider": { - "type": "string", - "description": "Resource provider: Microsoft KubernetesConfiguration." - }, - "resource": { - "type": "string", - "description": "Resource on which the operation is performed." - }, - "operation": { - "type": "string", - "description": "Type of operation: get, read, delete, etc." - }, - "description": { - "type": "string", - "description": "Description of this operation." - } - } - }, - "ResourceProviderOperationList": { - "type": "object", - "description": "Result of the request to list operations.", - "properties": { - "value": { - "type": "array", - "description": "List of operations supported by this resource provider.", - "items": { - "$ref": "#/definitions/ResourceProviderOperation" - }, - "readOnly": true, - "x-ms-identifiers": [ - "name" - ] - }, - "nextLink": { - "type": "string", - "description": "URL to the next set of results, if any.", - "readOnly": true - } - } } }, "parameters": {} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/operations.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/operations.json index c245249e9236..630d12565a8e 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/operations.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/operations.json @@ -63,7 +63,7 @@ "200": { "description": "Azure operation completed successfully.", "schema": { - "$ref": "#/definitions/ResourceProviderOperationList" + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/OperationListResult" } }, "default": { @@ -156,7 +156,7 @@ "type": "array", "description": "List of async operations in progress, in the cluster.", "items": { - "$ref": "#/definitions/OperationStatusResult" + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/OperationStatusResult" }, "readOnly": true }, @@ -166,109 +166,6 @@ "readOnly": true } } - }, - "OperationStatusResult": { - "type": "object", - "description": "The current status of an async operation.", - "properties": { - "id": { - "type": "string", - "description": "Fully qualified ID for the async operation." - }, - "name": { - "type": "string", - "description": "Name of the async operation." - }, - "status": { - "type": "string", - "description": "Operation status." - }, - "properties": { - "type": "object", - "description": "Additional information, if available.", - "x-nullable": true, - "additionalProperties": { - "type": "string" - } - }, - "error": { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/ErrorDetail", - "description": "If present, details of the operation error.", - "x-nullable": true, - "readOnly": true - } - }, - "required": [ - "status" - ] - }, - "ResourceProviderOperation": { - "type": "object", - "description": "Supported operation of this resource provider.", - "properties": { - "name": { - "type": "string", - "description": "Operation name, in format of {provider}/{resource}/{operation}" - }, - "display": { - "$ref": "#/definitions/ResourceProviderOperationDisplay", - "description": "Display metadata associated with the operation." - }, - "isDataAction": { - "type": "boolean", - "description": "The flag that indicates whether the operation applies to data plane.", - "readOnly": true - }, - "origin": { - "type": "string", - "description": "Origin of the operation", - "readOnly": true - } - } - }, - "ResourceProviderOperationDisplay": { - "type": "object", - "description": "Display metadata associated with the operation.", - "properties": { - "provider": { - "type": "string", - "description": "Resource provider: Microsoft KubernetesConfiguration." - }, - "resource": { - "type": "string", - "description": "Resource on which the operation is performed." - }, - "operation": { - "type": "string", - "description": "Type of operation: get, read, delete, etc." - }, - "description": { - "type": "string", - "description": "Description of this operation." - } - } - }, - "ResourceProviderOperationList": { - "type": "object", - "description": "Result of the request to list operations.", - "properties": { - "value": { - "type": "array", - "description": "List of operations supported by this resource provider.", - "items": { - "$ref": "#/definitions/ResourceProviderOperation" - }, - "readOnly": true, - "x-ms-identifiers": [ - "name" - ] - }, - "nextLink": { - "type": "string", - "description": "URL to the next set of results, if any.", - "readOnly": true - } - } } }, "parameters": {} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-04-01/operations.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-04-01/operations.json index f799553a22dc..df55b6e2eaad 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-04-01/operations.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-04-01/operations.json @@ -63,7 +63,7 @@ "200": { "description": "Azure operation completed successfully.", "schema": { - "$ref": "#/definitions/ResourceProviderOperationList" + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/OperationListResult" } }, "default": { @@ -156,7 +156,7 @@ "type": "array", "description": "List of async operations in progress, in the cluster.", "items": { - "$ref": "#/definitions/OperationStatusResult" + "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/OperationStatusResult" }, "readOnly": true }, @@ -166,109 +166,6 @@ "readOnly": true } } - }, - "OperationStatusResult": { - "type": "object", - "description": "The current status of an async operation.", - "properties": { - "id": { - "type": "string", - "description": "Fully qualified ID for the async operation." - }, - "name": { - "type": "string", - "description": "Name of the async operation." - }, - "status": { - "type": "string", - "description": "Operation status." - }, - "properties": { - "type": "object", - "description": "Additional information, if available.", - "x-nullable": true, - "additionalProperties": { - "type": "string" - } - }, - "error": { - "$ref": "../../../../../../common-types/resource-management/v3/types.json#/definitions/ErrorDetail", - "description": "If present, details of the operation error.", - "x-nullable": true, - "readOnly": true - } - }, - "required": [ - "status" - ] - }, - "ResourceProviderOperation": { - "type": "object", - "description": "Supported operation of this resource provider.", - "properties": { - "name": { - "type": "string", - "description": "Operation name, in format of {provider}/{resource}/{operation}" - }, - "display": { - "$ref": "#/definitions/ResourceProviderOperationDisplay", - "description": "Display metadata associated with the operation." - }, - "isDataAction": { - "type": "boolean", - "description": "The flag that indicates whether the operation applies to data plane.", - "readOnly": true - }, - "origin": { - "type": "string", - "description": "Origin of the operation", - "readOnly": true - } - } - }, - "ResourceProviderOperationDisplay": { - "type": "object", - "description": "Display metadata associated with the operation.", - "properties": { - "provider": { - "type": "string", - "description": "Resource provider: Microsoft KubernetesConfiguration." - }, - "resource": { - "type": "string", - "description": "Resource on which the operation is performed." - }, - "operation": { - "type": "string", - "description": "Type of operation: get, read, delete, etc." - }, - "description": { - "type": "string", - "description": "Description of this operation." - } - } - }, - "ResourceProviderOperationList": { - "type": "object", - "description": "Result of the request to list operations.", - "properties": { - "value": { - "type": "array", - "description": "List of operations supported by this resource provider.", - "items": { - "$ref": "#/definitions/ResourceProviderOperation" - }, - "readOnly": true, - "x-ms-identifiers": [ - "name" - ] - }, - "nextLink": { - "type": "string", - "description": "URL to the next set of results, if any.", - "readOnly": true - } - } } }, "parameters": {} From 1dd42c893c75f0d0de18a0420bea90bd54008158 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 11 Jun 2026 15:50:08 -0700 Subject: [PATCH 38/39] Fix examples --- .../2025-03-01/ListAsyncOperationStatus.json | 25 ++++++++----------- .../2025-04-01/ListAsyncOperationStatus.json | 11 +++----- .../ListAsyncOperationStatus.json | 11 +++----- .../examples/ListAsyncOperationStatus.json | 11 +++----- .../examples/ListAsyncOperationStatus.json | 25 ++++++++----------- .../stable/2025-03-01/operations.json | 2 +- .../examples/ListAsyncOperationStatus.json | 11 +++----- 7 files changed, 33 insertions(+), 63 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-03-01/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-03-01/ListAsyncOperationStatus.json index 17878d29efaa..c7113b780b01 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-03-01/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-03-01/ListAsyncOperationStatus.json @@ -1,11 +1,11 @@ { "parameters": { - "subscriptionId": "subId1", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", "api-version": "2025-03-01", - "clusterName": "clusterName1" + "clusterName": "clusterName1", + "clusterResourceName": "connectedClusters", + "clusterRp": "Microsoft.Kubernetes", + "resourceGroupName": "rg1", + "subscriptionId": "subId1" }, "responses": { "200": { @@ -14,22 +14,17 @@ { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", "name": "99999999-9999-9999-9999-999999999999", - "status": "Deleting", - "properties": {}, - "error": null + "status": "Deleting" }, { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", "name": "88888888-8888-8888-8888-888888888888", - "status": "Creating", - "properties": {}, - "error": null + "status": "Creating" } - ], - "nextLink": null + ] } } }, "operationId": "OperationStatus_List", - "title": "List Async Operation Status" -} + "title": "AsyncOperationStatus List" +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-04-01/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-04-01/ListAsyncOperationStatus.json index 2aed71b9b35e..4f6d94cf093c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-04-01/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-04-01/ListAsyncOperationStatus.json @@ -10,20 +10,15 @@ "responses": { "200": { "body": { - "nextLink": null, "value": [ { - "name": "99999999-9999-9999-9999-999999999999", - "error": null, "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", - "properties": {}, + "name": "99999999-9999-9999-9999-999999999999", "status": "Deleting" }, { - "name": "88888888-8888-8888-8888-888888888888", - "error": null, "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", - "properties": {}, + "name": "88888888-8888-8888-8888-888888888888", "status": "Creating" } ] @@ -32,4 +27,4 @@ }, "operationId": "OperationStatus_List", "title": "AsyncOperationStatus List" -} +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json index 6f1788aff0a6..c701c982a124 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json @@ -10,20 +10,15 @@ "responses": { "200": { "body": { - "nextLink": null, "value": [ { - "name": "99999999-9999-9999-9999-999999999999", - "error": null, "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", - "properties": {}, + "name": "99999999-9999-9999-9999-999999999999", "status": "Deleting" }, { - "name": "88888888-8888-8888-8888-888888888888", - "error": null, "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", - "properties": {}, + "name": "88888888-8888-8888-8888-888888888888", "status": "Creating" } ] @@ -32,4 +27,4 @@ }, "operationId": "OperationStatus_List", "title": "AsyncOperationStatus List" -} +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json index 6f1788aff0a6..c701c982a124 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/preview/2026-06-15-preview/examples/ListAsyncOperationStatus.json @@ -10,20 +10,15 @@ "responses": { "200": { "body": { - "nextLink": null, "value": [ { - "name": "99999999-9999-9999-9999-999999999999", - "error": null, "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", - "properties": {}, + "name": "99999999-9999-9999-9999-999999999999", "status": "Deleting" }, { - "name": "88888888-8888-8888-8888-888888888888", - "error": null, "id": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", - "properties": {}, + "name": "88888888-8888-8888-8888-888888888888", "status": "Creating" } ] @@ -32,4 +27,4 @@ }, "operationId": "OperationStatus_List", "title": "AsyncOperationStatus List" -} +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/examples/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/examples/ListAsyncOperationStatus.json index 17878d29efaa..c7113b780b01 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/examples/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/examples/ListAsyncOperationStatus.json @@ -1,11 +1,11 @@ { "parameters": { - "subscriptionId": "subId1", - "resourceGroupName": "rg1", - "clusterRp": "Microsoft.Kubernetes", - "clusterResourceName": "connectedClusters", "api-version": "2025-03-01", - "clusterName": "clusterName1" + "clusterName": "clusterName1", + "clusterResourceName": "connectedClusters", + "clusterRp": "Microsoft.Kubernetes", + "resourceGroupName": "rg1", + "subscriptionId": "subId1" }, "responses": { "200": { @@ -14,22 +14,17 @@ { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", "name": "99999999-9999-9999-9999-999999999999", - "status": "Deleting", - "properties": {}, - "error": null + "status": "Deleting" }, { "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", "name": "88888888-8888-8888-8888-888888888888", - "status": "Creating", - "properties": {}, - "error": null + "status": "Creating" } - ], - "nextLink": null + ] } } }, "operationId": "OperationStatus_List", - "title": "List Async Operation Status" -} + "title": "AsyncOperationStatus List" +} \ No newline at end of file diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/operations.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/operations.json index 630d12565a8e..6ba93bad07da 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/operations.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-03-01/operations.json @@ -137,7 +137,7 @@ } }, "x-ms-examples": { - "List Async Operation Status": { + "AsyncOperationStatus List": { "$ref": "./examples/ListAsyncOperationStatus.json" } }, diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-04-01/examples/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-04-01/examples/ListAsyncOperationStatus.json index 2aed71b9b35e..4f6d94cf093c 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-04-01/examples/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/stable/2025-04-01/examples/ListAsyncOperationStatus.json @@ -10,20 +10,15 @@ "responses": { "200": { "body": { - "nextLink": null, "value": [ { - "name": "99999999-9999-9999-9999-999999999999", - "error": null, "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/ClusterMonitor/operations/99999999-9999-9999-9999-999999999999", - "properties": {}, + "name": "99999999-9999-9999-9999-999999999999", "status": "Deleting" }, { - "name": "88888888-8888-8888-8888-888888888888", - "error": null, "id": "/subscriptions/subId1/resourceGroups/rg1/providers/Microsoft.Kubernetes/connectedClusters/clusterName1/providers/Microsoft.KubernetesConfiguration/extensions/cassandraExtension1/operations/88888888-8888-8888-8888-888888888888", - "properties": {}, + "name": "88888888-8888-8888-8888-888888888888", "status": "Creating" } ] @@ -32,4 +27,4 @@ }, "operationId": "OperationStatus_List", "title": "AsyncOperationStatus List" -} +} \ No newline at end of file From ef6db51b47b76410d394fc1602cae67a905a3cd4 Mon Sep 17 00:00:00 2001 From: Bharath Griddaluru Date: Thu, 11 Jun 2026 16:04:27 -0700 Subject: [PATCH 39/39] Fix pretty --- .../2025-03-01/ListAsyncOperationStatus.json | 2 +- .../2025-04-01/ListAsyncOperationStatus.json | 2 +- .../ListAsyncOperationStatus.json | 2 +- .../operations/readme.md | 35 +++++++++---------- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-03-01/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-03-01/ListAsyncOperationStatus.json index c7113b780b01..ec40c3272c5d 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-03-01/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-03-01/ListAsyncOperationStatus.json @@ -27,4 +27,4 @@ }, "operationId": "OperationStatus_List", "title": "AsyncOperationStatus List" -} \ No newline at end of file +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-04-01/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-04-01/ListAsyncOperationStatus.json index 4f6d94cf093c..2f7349c0b11b 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-04-01/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2025-04-01/ListAsyncOperationStatus.json @@ -27,4 +27,4 @@ }, "operationId": "OperationStatus_List", "title": "AsyncOperationStatus List" -} \ No newline at end of file +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json index c701c982a124..844499182077 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/examples/2026-06-15-preview/ListAsyncOperationStatus.json @@ -27,4 +27,4 @@ }, "operationId": "OperationStatus_List", "title": "AsyncOperationStatus List" -} \ No newline at end of file +} diff --git a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/readme.md b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/readme.md index 02432c3dc26e..6eacac5fd3bc 100644 --- a/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/readme.md +++ b/specification/kubernetesconfiguration/resource-manager/Microsoft.KubernetesConfiguration/operations/readme.md @@ -24,7 +24,7 @@ For other options on installation see [Installing AutoRest](https://aka.ms/autor These are the global settings for the operations in KubernetesConfiguration. -``` yaml +```yaml title: OperationsClient description: Operations Client openapi-type: arm @@ -37,7 +37,7 @@ tag: package-2025-04 These settings apply only when `--tag=package-preview-2026-06` is specified on the command line. -``` yaml $(tag) == 'package-preview-2026-06' +```yaml $(tag) == 'package-preview-2026-06' input-file: - preview/2026-06-15-preview/operations.json suppressions: @@ -61,22 +61,22 @@ suppressions: These settings apply only when `--tag=package-2025-04` is specified on the command line. -``` yaml $(tag) == 'package-2025-04' +```yaml $(tag) == 'package-2025-04' input-file: - stable/2025-04-01/operations.json suppressions: - code: OperationsApiSchemaUsesCommonTypes from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: OperationsApiTenantLevelOnly from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: ResourceNameRestriction from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: OperationsApiResponseSchema from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. ``` --- @@ -85,22 +85,22 @@ suppressions: These settings apply only when `--tag=package-2025-03` is specified on the command line. -``` yaml $(tag) == 'package-2025-03' +```yaml $(tag) == 'package-2025-03' input-file: - stable/2025-03-01/operations.json suppressions: - code: OperationsApiSchemaUsesCommonTypes from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: OperationsApiTenantLevelOnly from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: ResourceNameRestriction from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: OperationsApiResponseSchema from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. ``` --- @@ -109,21 +109,20 @@ suppressions: These settings apply only when `--tag=package-2024-11` is specified on the command line. -``` yaml $(tag) == 'package-2024-11' +```yaml $(tag) == 'package-2024-11' input-file: - stable/2024-11-01/operations.json suppressions: - code: OperationsApiSchemaUsesCommonTypes from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: OperationsApiTenantLevelOnly from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: ResourceNameRestriction from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. - code: OperationsApiResponseSchema from: operations.json - reason: Existing service contract needs to be backward compatible. + reason: Existing service contract needs to be backward compatible. ``` -