Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
8439bf5
add pester tests for connectedk8s cli extension
Mar 18, 2025
3b1b7db
Pass the force delete param to the API call (#4)
atchutbarli Mar 25, 2025
e3cb602
fix CI testcases for nodepool image issues (#8)
bavneetsingh16 May 23, 2025
2227ad5
update python version to 3.13 (#12)
bavneetsingh16 Jul 31, 2025
e6bf41a
changes to support gateway association/disassociation for api version…
bavneetsingh16 Sep 17, 2025
c330db4
[Azure RBAC] Deprecate 3P mode flags, fix Azure RBAC enablement bug, …
vineeth-thumma Sep 29, 2025
9570e28
Bug Fix for FFX mcr url (#22)
hapate Oct 15, 2025
66aca81
[connectedk8s] update release notes and version (#26)
bavneetsingh16 Oct 16, 2025
b6b7fd1
[Azure RBAC] Remove deprecated flags (#16)
vineeth-thumma Oct 28, 2025
f9d663b
Updating the proxy version constant (#28)
gabemousa Nov 5, 2025
106fdde
update broken test in CI pipeline (#37)
bavneetsingh16 Mar 3, 2026
fb191a5
Update CLIENT_PROXY_VERSION to 1.3.033281 (#36)
shlokpatel57 Mar 3, 2026
4d4a3cf
Updates in CSP version (#40)
shlokpatel57 Mar 26, 2026
796a1d7
Add ARM64 support for Helm installation in connectedk8s (#34)
ashnanze Apr 15, 2026
e670957
Handle removal of --all flag in Helm 4 (#42)
atchutbarli Apr 20, 2026
0cca833
Update CSP version (#44)
shlokpatel57 Apr 28, 2026
d1a0d25
Update CSP version (#50)
shlokpatel57 Jun 8, 2026
dc4fa0b
Adding CLI changes for AGC Scenario (#30)
junw98 Jun 16, 2026
242ef7a
[az-cli][connectedk8s][MultiCloudConnector] Allow AgentNotInstalled t…
ikanni Jun 16, 2026
7a55af0
Update CODEOWNERS for connectedk8s directory
jianyunt Jun 30, 2026
459bd11
ensure correlation propagation happens e2e for connectedk8s proxy (#51)
revchandra Jul 1, 2026
06c340b
Fix telemetry "Unknown" errors: wrap string exceptions, add missing i…
ashnanze Jul 2, 2026
0f17892
Update csp version (#55)
shlokpatel57 Jul 14, 2026
a7bbb47
Fix azdev style pass with targeted cleanup (#52)
ashnanze Jul 21, 2026
0906b3a
removing workload identity preview feature flag (#60)
deeksha345 Jul 22, 2026
9ca134a
Add Diagnosis Logic for Helm Timeouts to improve failure classificati…
jmccormick7 Jul 24, 2026
9c8014a
Fix ruff lint and format violations (#64)
ashnanze Jul 24, 2026
7f6501a
move kubeadm to be evaluated last (#65)
deeksha345 Jul 27, 2026
3337e6a
Add prediagnostic telemetry for onboarding failures (#54)
ashnanze Jul 27, 2026
cb34699
Add 'Arc' keyword to --proxy-skip-range for Azure Arc private-link en…
Tareesh21 Aug 1, 2026
f429b94
Fix pre-onboarding diagnostic checks grading NotCompleted job as Pass…
ashnanze Aug 5, 2026
96c8a09
Bump version to 1.11.2 and update HISTORY.rst
ashnanze Aug 5, 2026
de6e70d
Fix azdev scan false positive in test_utils_: use string concat for P…
ashnanze Aug 6, 2026
11225ba
Remove fork-specific testing directory (not for upstream)
ashnanze Aug 7, 2026
0998ce3
Restore 1.11.1 and 1.11.0 history entries missing from upstream merge
ashnanze Aug 7, 2026
a5b9488
Remove committed whl artifact and revert fork-specific workflow changes
ashnanze Aug 7, 2026
c63eeda
update proxy tests to build the url at runtime to avoid failing the (…
jmccormick7 Aug 10, 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
23 changes: 23 additions & 0 deletions src/connectedk8s/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,21 @@

Release History
===============
1.11.2
+++++++
* 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.11.1
+++++++
* Added ARM64 support for Helm binary installation.
Expand All @@ -18,6 +33,14 @@ Release History
* Add endpoint overrides for Azure Government cloud environments
* Update Proxy Image to 1.3.032281

1.10.13
+++++
* 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
+++++++
* Removed hardcoded public ARM endpoint URL for Government clouds.
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
Loading