Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
20aecd7
add pester tests for connectedk8s cli extension
Mar 18, 2025
40926a3
Pass the force delete param to the API call (#4)
atchutbarli Mar 25, 2025
8f068a8
fix CI testcases for nodepool image issues (#8)
bavneetsingh16 May 23, 2025
ad1ce1d
update python version to 3.13 (#12)
bavneetsingh16 Jul 31, 2025
2121694
changes to support gateway association/disassociation for api version…
bavneetsingh16 Sep 17, 2025
3c08eac
[Azure RBAC] Deprecate 3P mode flags, fix Azure RBAC enablement bug, …
vineeth-thumma Sep 29, 2025
ed5b5e2
Merge branch 'Azure:main' into main
bavneetsingh16 Oct 15, 2025
9038227
remove hardcoded public ARM endpoint url for fairfax and mooncake (#24)
bavneetsingh16 Oct 15, 2025
002220d
Bug Fix for FFX mcr url (#22)
hapate Oct 15, 2025
6c0a24b
[connectedk8s] update release notes and version (#26)
bavneetsingh16 Oct 16, 2025
3ca7ae1
Add Helm Overrides for AGC (#23)
junw98 Oct 27, 2025
bbebbcd
[Azure RBAC] Remove deprecated flags (#16)
vineeth-thumma Oct 28, 2025
979a4c3
update prediag version (#27)
atchutbarli Nov 4, 2025
09119b8
Updating the proxy version constant (#28)
gabemousa Nov 5, 2025
22d2042
update broken test in CI pipeline (#37)
bavneetsingh16 Mar 3, 2026
532f503
Update CLIENT_PROXY_VERSION to 1.3.033281 (#36)
shlokpatel57 Mar 3, 2026
92383b8
Updates in CSP version (#40)
shlokpatel57 Mar 26, 2026
11550d4
Add ARM64 support for Helm installation in connectedk8s (#34)
ashnanze Apr 15, 2026
c9215c4
Handle removal of --all flag in Helm 4 (#42)
atchutbarli Apr 20, 2026
2f03b6b
Update CSP version (#44)
shlokpatel57 Apr 28, 2026
5cda931
Add debug log for helm binary location (#48)
ashnanze May 19, 2026
717e87c
Update CSP version (#50)
shlokpatel57 Jun 8, 2026
9b7e096
Adding CLI changes for AGC Scenario (#30)
junw98 Jun 16, 2026
54514d1
[az-cli][connectedk8s][MultiCloudConnector] Allow AgentNotInstalled t…
ikanni Jun 16, 2026
445b492
Update CODEOWNERS for connectedk8s directory
jianyunt Jun 30, 2026
c6096ea
ensure correlation propagation happens e2e for connectedk8s proxy (#51)
revchandra Jul 1, 2026
adb149e
Fix telemetry "Unknown" errors: wrap string exceptions, add missing i…
ashnanze Jul 2, 2026
d547e8e
Update csp version (#55)
shlokpatel57 Jul 14, 2026
27f7b00
Fix azdev style pass with targeted cleanup (#52)
ashnanze Jul 21, 2026
e019573
removing workload identity preview feature flag (#60)
deeksha345 Jul 22, 2026
70f8984
Add Diagnosis Logic for Helm Timeouts to improve failure classificati…
jmccormick7 Jul 24, 2026
edcc0a5
Fix ruff lint and format violations (#64)
ashnanze Jul 24, 2026
dd43fc5
move kubeadm to be evaluated last (#65)
deeksha345 Jul 27, 2026
b1ca1d8
Add prediagnostic telemetry for onboarding failures (#54)
ashnanze Jul 27, 2026
aa39de0
Add 'Arc' keyword to --proxy-skip-range for Azure Arc private-link en…
Tareesh21 Aug 1, 2026
41e4d77
Fix pre-onboarding diagnostic checks grading NotCompleted job as Pass…
ashnanze Aug 5, 2026
3245ad1
Bump version to 1.11.2 and update HISTORY.rst
ashnanze Aug 5, 2026
8722b2f
Merge remote-tracking branch 'upstream/main' into release-v1.11.2
ashnanze Aug 6, 2026
2d5b5b8
Fix azdev scan false positive in test_utils_: use string concat for P…
ashnanze Aug 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@

/src/ip-group/ @necusjz @kairu-ms @jsntcy

/src/connectedk8s/ @bavneetsingh16 @deeksha345 @anagg929 @atchutbarli @bgriddaluru
/src/connectedk8s/ @jmccormick7 @deeksha345 @anagg929 @jianyunt @bgriddaluru

/src/storagesync/ @jsntcy

Expand Down
5 changes: 2 additions & 3 deletions .github/workflows/AzdevLinter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ jobs:
- name: Checkout CLI extension repo
uses: actions/checkout@v4
with:
fetch-depth: 1
sparse-checkout: |
.github
fetch-depth: 0
submodules: false
- name: Azdev Env Setup
uses: ./.github/actions/env-setup
- name: Get Diff Files
Expand Down
5 changes: 2 additions & 3 deletions .github/workflows/AzdevStyle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ jobs:
- name: Checkout CLI extension repo
uses: actions/checkout@v4
with:
fetch-depth: 1
sparse-checkout: |
.github
fetch-depth: 0
submodules: false
- name: Azdev Env Setup
uses: ./.github/actions/env-setup
- name: Get Diff Files
Expand Down
33 changes: 20 additions & 13 deletions src/connectedk8s/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,28 @@

Release History
===============
1.11.1
1.11.2
+++++++
* Added ARM64 support for Helm binary installation.
* Handle removal of '--all' flag in Helm 4 to ensure compatibility.
* Added Helm overrides support for Application Gateway for Containers (AGC).
* Updated CSP version.
* Updated CLIENT_PROXY_VERSION to 1.3.033892.
* Updated pre-diagnostics version.

1.11.0
* Fix telemetry `Unknown` errors: wrap string exceptions, add missing instrumentation, and catch-all decorator for unhandled exceptions.
* Propagate correlation ID end-to-end for `az connectedk8s proxy`.
* [MultiCloudConnector] Allow AgentNotInstalled to Agent conversion in connected clusters.
* Add debug log for helm binary location.
* Add diagnosis logic for helm timeouts to improve failure classification.
* Move kubeadm distribution detection to be evaluated last to prevent incorrect cluster distribution classification.
* Updated CLIENT_PROXY_VERSION to 1.3.034631.
* Removed workload identity preview feature flag.
* Added telemetry for pre-onboarding diagnostic results, including diagnostics execution failures.
* Add `Arc` to `--proxy-skip-range` default values for Azure Arc private-link endpoints.
* Fix pre-onboarding diagnostic checks incorrectly grading a NotCompleted job as Passed when partial container output is present.
* Updated clusterdiagnosticchecks image to 1.36.1.

1.10.13
+++++
* [Breaking Change] Removed deprecated '--app-id' and '--app-secret' RBAC parameters from the extension.
* Update cluster diagnostics image to comply with Pod Security Standards-Restricted level( Updated image version:1.31.2).
* Add endpoint overrides for Azure Government cloud environments
* Update Proxy Image to 1.3.032281
* Added telemetry for pre-onboarding diagnostic results, including diagnostics execution failures.

1.10.12
+++++
* Removed deprecated '--app-id' and '--app-secret' RBAC parameters from the extension.

1.10.11
+++++++
Expand Down
2 changes: 1 addition & 1 deletion src/connectedk8s/azext_connectedk8s/_client_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def signed_session(
self, session: requests.Session | None = None
) -> requests.Session:
session = session or requests.Session()
header = "{} {}".format("Bearer", self.access_token)
header = f"Bearer {self.access_token}"
session.headers["Authorization"] = header
return session

Expand Down
84 changes: 82 additions & 2 deletions src/connectedk8s/azext_connectedk8s/_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,30 @@
"timed out waiting for the condition",
"connection refused",
]
Helm_Timeout_Messages = (
"timed out waiting for the condition",
"context deadline exceeded",
"deadline exceeded",
)
Helm_Timeout_Signal_Classifications = (
"ImagePullFailure",
"CrashLoopBackOff",
"ContainerCreateFailure",
"PendingOrUnschedulable",
"ClusterResourceOrSchedulingConstraint",
"MissingIdentityCertificateSecret",
"MissingKubeAadProxyCertificateSecret",
"KeyPairOrIdentityCertificateSync",
)
Helm_Timeout_Resolved_Classifications = (
"GenericHelmTimeout",
"ImagePullFailure",
"PendingOrUnschedulable",
"ClusterIdentityFailure",
)
Max_Helm_Timeout_Diagnostic_Evidence = 8
Max_Helm_Timeout_Event_Evidence = 5
Cluster_Identity_Operator_Prefix = "clusteridentityoperator"
Custom_Locations_Provider_Namespace = "Microsoft.ExtendedLocation"
Connected_Cluster_Provider_Namespace = "Microsoft.Kubernetes"
Kubernetes_Configuration_Provider_Namespace = "Microsoft.KubernetesConfiguration"
Expand All @@ -91,6 +115,7 @@
USGovCloud_OriginalName = "AZUREUSGOVERNMENT"
Dogfood_RMEndpoint = "https://api-dogfood.resources.windows-int.net/"
Client_Request_Id_Header = "x-ms-client-request-id"
Correlation_Request_Id_Header = "x-ms-correlation-request-id"
Default_Onboarding_Source_Tracking_Guid = "77ade16b-0f55-403b-b7d2-739554a897f2"
Custom_Access_Token_Env_Var_Sub_Id_Missing_Fault_Type = "Required environment variable SubscriptionId not set, for custom Azure access token"
Custom_Access_Token_Env_Var_Tenant_Id_Missing_Fault_Type = (
Expand Down Expand Up @@ -124,6 +149,26 @@
PublicKey_Export_Fault_Type = "publickey-export-error"
PrivateKey_Export_Fault_Type = "privatekey-export-error"
Install_HelmRelease_Fault_Type = "helm-release-install-error"
Helm_Timeout_ImagePull_Fault_Type = "helm-timeout-image-pull-failure"
Helm_Timeout_PendingOrUnschedulable_Fault_Type = "helm-timeout-pending-or-unschedulable"
Helm_Timeout_ClusterIdentity_Fault_Type = "helm-timeout-cluster-identity-error"
Helm_Timeout_Generic_Fault_Type = "helm-timeout-error"
# Customer-facing AZK8S error codes surfaced for Helm timeout classifications.
# Ranges follow the error code chart: Helm & Agent Lifecycle (0500-0599),
# Network & Connectivity (0300-0399).
Helm_Timeout_PendingOrUnschedulable_Error_Code = "AZK8S0512"
Helm_Timeout_ImagePull_Error_Code = "AZK8S0513"
Helm_Timeout_Generic_Error_Code = "AZK8S0514"
Helm_Timeout_ClusterIdentity_Error_Code = "AZK8S0309"
Install_Prediagnostics_Fault_Type = "prediagnostics-failure"
Install_Prediagnostics_Job_Execution_Error_Fault_Type = (
"prediagnostics-job-execution-error"
)
Post_Diagnostic_Precheck_Fault_Type = "post-diagnostic-precheck-failure"
Telemetry_Onboarding_Error_Type_Key = "Context.Default.AzureCLI.onboardingErrorType"
Telemetry_Onboarding_Error_Message_Key = (
"Context.Default.AzureCLI.onboardingErrorMessage"
)
Delete_HelmRelease_Fault_Type = "helm-release-delete-error"
Check_PodStatus_Fault_Type = "check-pod-status-error"
Kubernetes_Connectivity_FaultType = "kubernetes-cluster-connection-error"
Expand All @@ -147,6 +192,14 @@
Agent_State_Succeeded = "Succeeded"
Agent_State_Failed = "Failed"
Agent_State_Timeout = 15
Agent_State_Timeout_Fault_Type = "agent-state-timeout-error"
Provisioned_Cluster_Operation_Fault_Type = "provisioned-cluster-unsupported-operation"
Update_No_Params_Fault_Type = "update-no-parameters-specified"
Update_Proxy_Conflict_Fault_Type = "update-proxy-parameters-conflict"
Connected_Cluster_Resource_Id_None_Fault_Type = (
"connected-cluster-resource-id-none-error"
)
Custom_Locations_Enable_Failed_Fault_Type = "custom-locations-enable-failed"
Get_Credentials_Failed_Fault_Type = "failed-to-get-list-cluster-user-credentials"
Failed_To_Merge_Credentials_Fault_Type = "failed-to-merge-credentials"
Kubeconfig_Failed_To_Load_Fault_Type = "failed-to-load-kubeconfig-file"
Expand Down Expand Up @@ -194,6 +247,16 @@
No_Param_Error = "No parameters were specified with update command. Please run az connectedk8s update --help to check parameters available for update"
Gateway_ArmId_Is_Invalid = "The provided Gateway ArmID in --gateway-resource-id {} is invalid. Please provide a valid Gateway ArmID."
EnableProxy_Conflict_Error = "Conflict detected: --disable-proxy can not be set with --https-proxy, --http-proxy, --proxy-skip-range and --proxy-cert at the same time. Please run az connectedk8s update --help for more information about the parameters"

# --proxy-skip-range keyword that expands to the Azure Arc private-link endpoints.
Proxy_Skip_Range_Arc_Keyword = "arc"
# Arc private-link endpoint host suffixes the "arc" keyword expands to.
Arc_Private_Link_Endpoints = [
".his.arc.azure.{cloud_based_domain}",
".dp.kubernetesconfiguration.azure.{cloud_based_domain}",
".guestconfiguration.azure.{cloud_based_domain}",
]

Manual_Upgrade_Called_In_Auto_Update_Enabled = (
"Manual Upgrade was called while in auto_Update enabled mode"
)
Expand Down Expand Up @@ -368,6 +431,18 @@
Diagnostic_Check_Passed = "Passed"
Diagnostic_Check_Failed = "Failed"
Diagnostic_Check_Incomplete = "Incomplete"
Diagnostic_Check_Starting = "Starting"
Diagnostic_Check_Not_Applicable = "NotApplicable"

# Prediagnostic job execution status values
Job_Status_Not_Started = "NotStarted"
Job_Status_Running = "Running"
Job_Status_Completed = "Completed"
Job_Status_Not_Completed = "NotCompleted"
Job_Status_Not_Scheduled = "NotScheduled"
Job_Status_Cleanup_Failed = "CleanupFailed"
Job_Status_Execution_Failed = "ExecutionFailed"

# Name of the checks and operations
Retrieve_Arc_Agents_Event_Logs = "retrieved_arc_agents_event_logs"
Retrieve_Arc_Agents_Logs = "retrieved_arc_agents_logs"
Expand Down Expand Up @@ -418,7 +493,7 @@

# Connect Precheck Diagnoser constants
Cluster_Diagnostic_Checks_Job_Registry_Path = (
"azurearck8s/helmchart/stable/clusterdiagnosticchecks:1.31.2"
"azurearck8s/helmchart/stable/clusterdiagnosticchecks:1.36.1"
)
Cluster_Diagnostic_Checks_Helm_Install_Failed_Fault_Type = (
"Error while installing cluster diagnostic checks helm release"
Expand All @@ -442,6 +517,7 @@
Outbound_Connectivity_Check_Failed_For_Onboarding = (
"Outbound network connectivity check failed for onboarding"
)
Outbound_Connectivity_Non2xx_Response_Type = "prediagnostics-outbound-non2xx-response"
DNS_Check_Failed = "DNS Resolution failed"
Cluster_Diagnostic_Prechecks_Failed = "Cluster diagnostic prechecks failed"
Cluster_Diagnostic_Prechecks_Incomplete = (
Expand Down Expand Up @@ -475,8 +551,12 @@
"Outbound network connectivity check failed for Cluster Connect"
)
DNS_Check_Result_String = "DNS Result:"
Entra_Connectivity_Check_Result_String = (
"Entra Authentication Endpoint Connectivity Check Result"
)
CRD_Ownership_Check_Failed_String = "Check Failed: CRD"
AZ_CLI_ADAL_TO_MSAL_MIGRATE_VERSION = "2.30.0"
CLIENT_PROXY_VERSION = "1.3.033892"
CLIENT_PROXY_VERSION = "1.3.034631"
CLIENT_PROXY_FOLDER = ".clientproxy"
API_SERVER_PORT = 47011
CLIENT_PROXY_PORT = 47010
Expand Down
4 changes: 2 additions & 2 deletions src/connectedk8s/azext_connectedk8s/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
- name: Onboard a connected kubernetes cluster by specifying the kubeconfig and kubecontext.
text: az connectedk8s connect -g resourceGroupName -n connectedClusterName --kube-config /path/to/kubeconfig --kube-context kubeContextName
- name: Onboard a connected kubernetes cluster by specifying the https proxy, http proxy, no proxy settings.
text: az connectedk8s connect -g resourceGroupName -n connectedClusterName --proxy-https https://proxy-url --proxy-http http://proxy-url --proxy-skip-range excludedIP,excludedCIDR,exampleCIDRfollowed,10.0.0.0/24
text: az connectedk8s connect -g resourceGroupName -n connectedClusterName --proxy-https https://proxy-url --proxy-http http://proxy-url --proxy-skip-range excludedIP,excludedCIDR,exampleCIDRfollowed,10.0.0.0/24,Arc
- name: Onboard a connected kubernetes cluster by specifying the https proxy, http proxy, no proxy with cert settings.
text: az connectedk8s connect -g resourceGroupName -n connectedClusterName --proxy-cert /path/to/crt --proxy-https https://proxy-url --proxy-http http://proxy-url --proxy-skip-range excludedIP,excludedCIDR,exampleCIDRfollowed,10.0.0.0/24
- name: Onboard a connected kubernetes cluster with private link feature enabled by specifying private link parameters.
Expand All @@ -46,7 +46,7 @@
short-summary: Update properties of the arc onboarded kubernetes cluster.
examples:
- name: Update proxy values for the agents
text: az connectedk8s update -g resourceGroupName -n connectedClusterName --proxy-cert /path/to/crt --proxy-https https://proxy-url --proxy-http http://proxy-url --proxy-skip-range excludedIP,excludedCIDR,exampleCIDRfollowed,10.0.0.0/24
text: az connectedk8s update -g resourceGroupName -n connectedClusterName --proxy-cert /path/to/crt --proxy-https https://proxy-url --proxy-http http://proxy-url --proxy-skip-range excludedIP,excludedCIDR,exampleCIDRfollowed,10.0.0.0/24,Arc
- name: Disable proxy settings for agents
text: az connectedk8s update -g resourceGroupName -n connectedClusterName --disable-proxy
- name: Disable auto-upgrade of agents
Expand Down
15 changes: 5 additions & 10 deletions src/connectedk8s/azext_connectedk8s/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
features_types = CLIArgumentType(nargs="+", choices=CaseInsensitiveList(Feature_Values))


def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None:
def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None: # pylint: disable=too-many-statements
pls_arm_id_type = CLIArgumentType(
options_list=["--private-link-scope-resource-id", "--pls-arm-id"],
arg_group="PrivateLink",
Expand Down Expand Up @@ -97,7 +97,8 @@ def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None:
"no_proxy",
options_list=["--proxy-skip-range"],
arg_group="Proxy",
help="List of URLs/CIDRs for which proxy should not to be used.",
help="List of URLs/CIDRs for which proxy should not be used. Pass the "
"keyword 'Arc' to bypass the proxy for the linked Azure Arc private-link endpoints.",
)
c.argument(
"proxy_cert",
Expand Down Expand Up @@ -187,14 +188,12 @@ def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None:
options_list=["--enable-oidc-issuer"],
arg_group="Workload Identity",
help="Enable creation of OIDC issuer url used for workload identity federation",
is_preview=True,
)
c.argument(
"self_hosted_issuer",
options_list=["--self-hosted-issuer"],
arg_group="Workload Identity",
help="Self hosted issuer url for public cloud clusters - AKS, GKE, EKS",
is_preview=True,
validator=validate_self_hosted_issuer,
)
c.argument(
Expand All @@ -203,7 +202,6 @@ def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None:
options_list=["--enable-workload-identity", "--enable-wi"],
arg_group="Workload Identity",
help="Enable workload identity webhook",
is_preview=True,
)
c.argument(
"gateway_resource_id",
Expand Down Expand Up @@ -263,7 +261,8 @@ def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None:
"no_proxy",
options_list=["--proxy-skip-range"],
arg_group="Proxy",
help="List of URLs/CIDRs for which proxy should not to be used.",
help="List of URLs/CIDRs for which proxy should not be used. Pass the "
"keyword 'Arc' to bypass the proxy for the linked Azure Arc private-link endpoints.",
)
c.argument(
"distribution",
Expand Down Expand Up @@ -321,15 +320,13 @@ def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None:
options_list=["--enable-oidc-issuer"],
arg_group="Workload Identity",
help="Enable creation of OIDC issuer url used for workload identity federation",
is_preview=True,
validator=validate_enable_oidc_issuer_updates,
)
c.argument(
"self_hosted_issuer",
options_list=["--self-hosted-issuer"],
arg_group="Workload Identity",
help="Self hosted issuer url for public cloud clusters - AKS, GKE, EKS",
is_preview=True,
validator=validate_self_hosted_issuer,
)
c.argument(
Expand All @@ -338,7 +335,6 @@ def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None:
options_list=["--enable-workload-identity", "--enable-wi"],
arg_group="Workload Identity",
help="Enable workload identity webhook",
is_preview=True,
validator=validate_workload_identity_updates,
)
c.argument(
Expand All @@ -347,7 +343,6 @@ def load_arguments(self: Connectedk8sCommandsLoader, _: CLICommand) -> None:
options_list=["--disable-workload-identity", "--disable-wi"],
arg_group="Workload Identity",
help="Disable workload identity webhook",
is_preview=True,
validator=validate_workload_identity_updates,
)
c.argument(
Expand Down
Loading