Skip to content

[AKS] Fix #34091: az aks get-credentials: Fix kubelogin conversion for explicit kubeconfig paths - #34099

Open
Aditya Pujara (a0x1ab) wants to merge 1 commit into
Azure:devfrom
a0x1ab:agent-assist/azure-azure-cli-issue-34091-5cea4d61c040
Open

Aditya Pujara (a0x1ab) wants to merge 1 commit into
Azure:devfrom
a0x1ab:agent-assist/azure-azure-cli-issue-34091-5cea4d61c040

Conversation

@a0x1ab

@a0x1ab Aditya Pujara (a0x1ab) commented Sep 18, 2026

Copy link
Copy Markdown
Member

🤖 PR Validation — ️✔️ All clear

Breaking Changes Tests
️✔️ None ️✔️ 130/130

Related command

az aks get-credentials

Description

Fixes #34091.

Implemented by X Engineering Agent using Azure AI Foundry. This is an AI-generated change, published by the configured operator.

Testing Guide

  • Run az aks get-credentials.
  • Focused regression coverage: src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py.
  • Repository CI and the authorized live-test workflow validate the published revision.

History Notes

[AKS] az aks get-credentials: Fix kubelogin conversion for explicit kubeconfig paths


This checklist is used to make sure that common guidelines for a pull request are followed.

…sion for explicit kubeconfig paths

AI-generated by X Engineering Agent via Azure AI Foundry.
Foundry-Job: 5cea4d61c0405a0d3cad2061ebf19ec75d5984a5d77936de831da998855811b1
@x-engineering-agent x-engineering-agent Bot added the Request X Engineering Agent Request X Engineering Agent testing and review label Sep 18, 2026
@x-engineering-agent
x-engineering-agent Bot marked this pull request as ready for review September 18, 2026 15:27
@x-engineering-agent
x-engineering-agent Bot requested a review from a team as a code owner September 18, 2026 15:27
Copilot AI lite review requested due to automatic review settings September 18, 2026 15:27
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved critical and moderate issues remain in kubelogin execution and explicit-path recovery guidance.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Fixes az aks get-credentials kubelogin conversion for explicit kubeconfig paths.

Changes:

  • Passes the selected kubeconfig path to kubelogin.
  • Adds regression coverage for path, environment, merge, and failure scenarios.
  • Preserves nonfatal conversion failures.
File summaries
File Summary
src/azure-cli/azure/cli/command_modules/acs/custom.py Updates kubelogin invocation; unresolved executable-path security and explicit-path recovery issues remain.
src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py Adds focused regression tests for credential conversion scenarios.
Review details

Suppressed comments (1)

src/azure-cli/azure/cli/command_modules/acs/custom.py:1956

  • For an explicit --file path, the fallback hint below still tells users to run conversion without --kubeconfig; with no KUBECONFIG set, kubelogin will operate on ~/.kube/config instead of the file just merged, so the devicecode kubeconfig remains unconverted. Include the effective path in this recovery command (and quote it for paths containing spaces).
                        ["kubelogin", "convert-kubeconfig", "-l", "azurecli", "--kubeconfig", path],
  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

subprocess.run(
["kubelogin", "convert-kubeconfig", "-l", "azurecli"],
cwd=os.path.dirname(path),
["kubelogin", "convert-kubeconfig", "-l", "azurecli", "--kubeconfig", path],
@a0x1ab

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).

@x-engineering-agent

Copy link
Copy Markdown
Contributor

Live test results — azdev test --live --series (changed test files only)

PASS

Selectors: acs.test_custom (module)
PR head ref: agent-assist/azure-azure-cli-issue-34091-5cea4d61c040
PR head sha: b065887220096c3f2471512985302004f9675e74
PR base ref: dev
New test files in PR: false

Changed test files run
src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py

Workflow run: https://github.com/Azure/issue-sentinel/actions/runs/35366475570

Last 80 lines of azdev output
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_dot_relative_filename PASSED [  9%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_empty_first_environment_entry PASSED [ 10%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_explicit_file_overrides_environment PASSED [ 11%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_first_environment_entry PASSED [ 13%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_literal_tilde_path PASSED [ 14%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_merge_failure_does_not_convert PASSED [ 15%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_missing_kubelogin_is_nonfatal PASSED [ 16%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_nested_relative_filename PASSED [ 17%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_non_devicecode PASSED [ 19%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_overwrite_existing PASSED [ 20%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_path_with_spaces PASSED [ 21%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_relative_environment_entry PASSED [ 22%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_stdout_skips_conversion PASSED [ 23%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest::test_aks_get_credentials_symlink_does_not_convert PASSED [ 25%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_get_latest_kubelogin_version_all_sources_fail PASSED [ 26%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_get_latest_kubelogin_version_fallback_only_on_rate_limit PASSED [ 27%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_get_latest_kubelogin_version_fallback_without_tag_prefix PASSED [ 28%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_get_latest_kubelogin_version_unexpected_fallback_content PASSED [ 29%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_k8s_install_kubectl_create_installation_dir PASSED [ 30%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_k8s_install_kubectl_emit_warnings PASSED [ 32%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_k8s_install_kubectl_with_custom_source_url PASSED [ 33%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_k8s_install_kubelogin_create_installation_dir PASSED [ 34%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_k8s_install_kubelogin_emit_warnings PASSED [ 35%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_k8s_install_kubelogin_latest_version_fallback PASSED [ 36%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_k8s_install_kubelogin_with_custom_source_url SKIPPED [ 38%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_k8s_install_kubelogin_with_gh_token PASSED [ 39%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_merge_admin_credentials PASSED [ 40%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_merge_credentials PASSED [ 41%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_merge_credentials_already_present PASSED [ 42%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_merge_credentials_broken_yaml PASSED [ 44%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_merge_credentials_missing PASSED [ 45%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_merge_credentials_non_existent PASSED [ 46%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_merge_credentials_rejects_symlink PASSED [ 47%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_update_addons PASSED [ 48%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AcsCustomCommandTest::test_update_upgrade_settings PASSED [ 50%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_agentpool_auto_scale_add_non_vms_pool PASSED [ 51%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_agentpool_auto_scale_add_success PASSED [ 52%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_agentpool_auto_scale_delete_non_vms_pool PASSED [ 53%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_agentpool_auto_scale_delete_profile_not_found PASSED [ 54%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_agentpool_auto_scale_delete_success PASSED [ 55%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_agentpool_auto_scale_update_missing_required PASSED [ 57%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_agentpool_auto_scale_update_profile_not_found PASSED [ 58%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_agentpool_auto_scale_update_success PASSED [ 59%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_stop PASSED [ 60%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_upgrade_kubernetes_version_skips_machines_mode_pool PASSED [ 61%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAKSCommand::test_aks_upgrade_node_image_only_skips_machines_mode_pool PASSED [ 63%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestRunCommand::test_get_command_context_empty PASSED [ 64%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestRunCommand::test_get_command_context_invalid_file PASSED [ 65%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestRunCommand::test_get_command_context_mixed PASSED [ 66%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestRunCommand::test_get_command_context_valid PASSED [ 67%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAddonConfigurationAzureBleuCloud::test_bleufrancecentral_region_mapping PASSED [ 69%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAddonConfigurationAzureBleuCloud::test_bleufrancesouth_region_mapping PASSED [ 70%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAddonConfigurationAzureBleuCloud::test_unknown_bleu_region_defaults_to_bleufrancecentral PASSED [ 71%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAddonConfigurationAzureDelosCloud::test_deloscloudgermanycentral_region_mapping PASSED [ 72%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAddonConfigurationAzureDelosCloud::test_deloscloudgermanynorth_region_mapping PASSED [ 73%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAddonConfigurationAzureDelosCloud::test_unknown_delos_region_defaults_to_deloscloudgermanycentral PASSED [ 75%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestIsMonitoringAddonEnabled::test_monitoring_disabled_with_camelcase_key PASSED [ 76%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestIsMonitoringAddonEnabled::test_monitoring_enabled_with_camelcase_key PASSED [ 77%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestIsMonitoringAddonEnabled::test_monitoring_enabled_with_lowercase_key PASSED [ 78%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestIsMonitoringAddonEnabled::test_no_monitoring_addon_at_all PASSED [ 79%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestIsMonitoringAddonEnabled::test_non_monitoring_addon PASSED [ 80%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAksEnableAddonsAutoHLSM::test_hlsm_auto_enabled_when_cnl_active PASSED [ 82%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAksEnableAddonsAutoHLSM::test_hlsm_auto_enabled_with_cnl_lowercase_true PASSED [ 83%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAksEnableAddonsAutoHLSM::test_hlsm_explicit_false_not_overridden_by_cnl PASSED [ 84%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAksEnableAddonsAutoHLSM::test_hlsm_explicit_true_not_overridden PASSED [ 85%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAksEnableAddonsAutoHLSM::test_hlsm_not_auto_enabled_when_cnl_false PASSED [ 86%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::TestAksEnableAddonsAutoHLSM::test_hlsm_not_auto_enabled_when_cnl_inactive PASSED [ 88%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AksAgentpoolUpgradeTest::test_aks_agentpool_upgrade_sets_max_unavailable PASSED [ 89%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AksAgentpoolRollbackTest::test_aks_agentpool_get_rollback_versions_returns_recently_used_versions PASSED [ 90%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AksAgentpoolRollbackTest::test_aks_agentpool_rollback_prioritizes_upgrade_channel_warning PASSED [ 91%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AksAgentpoolRollbackTest::test_aks_agentpool_rollback_raises_when_no_recent_versions PASSED [ 92%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AksAgentpoolRollbackTest::test_aks_agentpool_rollback_uses_most_recent_version PASSED [ 94%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AksAgentpoolRollbackTest::test_aks_agentpool_rollback_warns_node_image_only_for_node_os_channel PASSED [ 95%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::DcrTableReadinessRetryTest::test_other_errors_keep_three_attempt_limit PASSED [ 96%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::DcrTableReadinessRetryTest::test_raises_after_readiness_retry_limit PASSED [ 97%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::DcrTableReadinessRetryTest::test_retries_invalid_output_table_with_delay PASSED [ 98%]
azure-cli/src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::DcrTableReadinessRetryTest::test_succeeds_without_retry PASSED [100%]

- generated xml file: /home/runner/work/issue-sentinel/issue-sentinel/test-output/results.xml -
======================== 83 passed, 1 skipped in 2.74s =========================

Posted by the X Engineering Agent live-test workflow.

@x-engineering-agent x-engineering-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aditya Pujara (@a0x1ab)

Review

Reviewed head b065887220096c3f2471512985302004f9675e74. No confirmed policy or semantic findings in the bounded review targets. Validation is green; the real-converter/recording qualification below remains for the owning squad.

Upstream CI

  • 53/53 checks completed successfully; 0 failed, 0 pending, 0 cancelled. No underlying failed ADO builds to classify.

Test validation

  • Live test: Passed. Workflow run
  • Regression coverage: Present for acs: 1 focused test file(s) changed.

Scoped review evidence

  • All seven review skills were accounted for. Release-artifact, test-strength, user-intent, scope-consistency and domain-edge-case targets were inspected; generated ownership and command/help conventions were not applicable. No direct generated-history edits or unrelated production changes were found.
  • src/azure-cli/azure/cli/command_modules/acs/custom.py:1951-1958 skips conversion for stdout and passes the same resolved kubeconfig path used by the merge, without changing the caller working directory. The title/History Notes describe the path-conversion fix.
  • src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py::AKSGetCredentialsTest verifies serialized file contents, unrelated-file preservation, explicit/relative/environment/default paths, stdout, merge/overwrite failures, missing or failing converters, symlinks and admin credentials. Its child-process converter stand-in makes incorrect path/cwd selection observable.
  • Optional qualified human-review guidance was unavailable (ReviewIntelligenceServiceError); the recalled network/billing observations do not establish findings for this ACS change.

Recording and integration qualification

No recording files changed. This patch changes local kubeconfig authentication output and stdout-side-effect behavior, not ARM request construction or service-response mappings. The focused tests use a converter stand-in, so the green workflow does not by itself prove real kubelogin interoperability. Owning-squad attention: verify real-converter output on explicit/relative paths and confirm --file - leaves kubeconfig files untouched; refresh affected scenario recordings only if their expected command/output artifacts change.

Focused regression rerun: pytest -q src/azure-cli/azure/cli/command_modules/acs/tests/latest/test_custom.py -k AKSGetCredentialsTest. No tests were executed locally during this review.

Risk assessment

17/100 · Low · High confidence

The Low rating is driven by public CLI behavior.

  • Change scope: 2 changed files, 357 changed lines (+352 / -5), including 1 production file.
  • Affected components: acs
  • Risk drivers: public CLI behavior (+18)
  • Regression evidence: Changed regression tests are included, reducing risk.
  • Confidence: High because changed-line patches were available for every production file.
  • Required review: Owning-squad review is recommended for acs before merge.

@x-engineering-agent x-engineering-agent Bot added X Engineering Agent Reviewed Pull request reviewed by X Engineering Agent and removed Request X Engineering Agent Request X Engineering Agent testing and review labels Sep 18, 2026
@microsoft-github-policy-service

Copy link
Copy Markdown
Contributor

🔔 Routing this PR to @Azure/act-observability-squad.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

act-observability-squad AKS az aks/acs/openshift Auto-Assign Auto assign by bot X Engineering Agent Reviewed Pull request reviewed by X Engineering Agent

Projects

None yet

Development

Successfully merging this pull request may close these issues.

az aks get-credentials fails with Error running kubelogin: [Errno 2] No such file or directory: '' despite kubelogin correctly installed and on PATH

3 participants