Skip to content

Fix azure SDK namespace shadowing in CRUD pipeline steps (run via -m crud.main) - #1317

Closed
Xu Xue (xuexu6666) wants to merge 1 commit into
Azure:mainfrom
xuexu6666:fix/crud-azure-namespace-shadowing
Closed

Xu Xue (xuexu6666) wants to merge 1 commit into
Azure:mainfrom
xuexu6666:fix/crud-azure-namespace-shadowing

Conversation

@xuexu6666

Copy link
Copy Markdown
Contributor

Problem

The GPU Cluster CRUD pipeline (and other CRUD/Machine-API pipelines) have failed on every run since #1231 merged. Both CRUD tasks fail immediately:

File ".../modules/python/crud/main.py", line 19
  from crud.azure.node_pool_crud import NodePoolCRUD
File ".../modules/python/clients/aks_client.py", line 20
  from azure.core.exceptions import HttpResponseError, ResourceNotFoundError
ModuleNotFoundError: No module named 'azure.core'

azure-core is installed correctly by "Install Dependencies" — this is namespace shadowing, not a missing dependency.

Root cause

The steps run the script as a file:

workingDirectory: modules/python
env:
  PYTHON_SCRIPT_FILE: $(Pipeline.Workspace)/s/modules/python/crud/main.py
script: python3 "$PYTHON_SCRIPT_FILE" create ...

Running python3 .../crud/main.py puts the script's own directory — modules/python/crud/ — at sys.path[0]. #1231 added modules/python/crud/azure/__init__.py, turning crud/azure/ into a regular package. Found first on sys.path, it shadows the installed azure SDK namespace package, so azure.core can no longer be resolved.

Unit tests didn't catch this because pytest runs with a different sys.path that never places crud/ at sys.path[0].

Fix

Invoke the module with -m instead of running the file. python3 -m crud.main puts modules/python (the working directory) on sys.path[0] instead of crud/, so the azure SDK resolves from site-packages while crud.azure still imports. This is also what the telescope-crud entry point registered in #1231 was intended for. The now-unused PYTHON_SCRIPT_FILE env var is removed.

Applied to all affected engine steps:

  • steps/engine/crud/k8s/execute.yml
  • steps/engine/crud/k8s/collect.yml
  • steps/engine/machine/k8s/execute.yml
  • steps/engine/machine/k8s/collect.yml

Verification

Reproduced the shadowing and confirmed the fix locally:

# crud/ on sys.path[0] (file invocation)
import azure.core.exceptions  -> ModuleNotFoundError: No module named 'azure.core'

# modules/python on sys.path[0] (-m crud.main)
import azure.core.exceptions; import crud.azure  -> both import OK

The crud engine/machine steps ran main.py as a file
(python3 $PYTHON_SCRIPT_FILE), which puts modules/python/crud/ on
sys.path[0]. After Azure#1231 added crud/azure/__init__.py, that regular
package shadows the installed 'azure' SDK namespace, so
'from azure.core.exceptions import ...' fails with
ModuleNotFoundError: No module named 'azure.core'.

Invoke as a module instead (python3 -m crud.main) so sys.path[0] is
modules/python: the azure SDK resolves from site-packages and
crud.azure still imports. Drop the now-unused PYTHON_SCRIPT_FILE env var.
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

For reviewers only: reply /run-tf-integration to trigger the terraform integration pipeline before approving the PR.

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.

🟢 Approval recommended

The changes consistently apply the -m crud.main invocation and remove the unused env var across all listed pipeline steps, directly addressing the verified namespace-shadowing failure mode.

Pull request overview

This PR fixes Azure SDK import failures in the GPU Cluster CRUD / Machine-API pipeline steps by avoiding Python namespace shadowing (crud/azure shadowing the installed azure SDK) when invoking the CRUD entrypoint.

Changes:

  • Switch CRUD execution from running crud/main.py as a file to running it as a module (python3 -m crud.main) so sys.path[0] is modules/python rather than modules/python/crud.
  • Remove the now-unneeded PYTHON_SCRIPT_FILE environment variable from the affected pipeline steps.
File summaries
File Description
steps/engine/machine/k8s/execute.yml Invoke Machine API CRUD via python3 -m crud.main and drop PYTHON_SCRIPT_FILE.
steps/engine/machine/k8s/collect.yml Invoke result collection via python3 -m crud.main and drop PYTHON_SCRIPT_FILE.
steps/engine/crud/k8s/execute.yml Invoke CRUD create/scale/workloads/delete via python3 -m crud.main and drop PYTHON_SCRIPT_FILE.
steps/engine/crud/k8s/collect.yml Invoke CRUD collection via python3 -m crud.main and drop PYTHON_SCRIPT_FILE.
Review details
  • Files reviewed: 4/4 changed files
  • Comments generated: 0
  • Review effort level: Lite

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

@xuexu6666
Xu Xue (xuexu6666) deleted the fix/crud-azure-namespace-shadowing branch September 9, 2026 15:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants