Skip to content

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

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

Xu Xue (xuexu6666) wants to merge 1 commit into
Azure:mainfrom
xuexu6666:xuxue/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 replace file-based Python execution with module execution across all affected templates and remove the corresponding unused environment variable without leaving any remaining references.

Pull request overview

This PR fixes Azure SDK import failures in the CRUD/Machine-API Azure DevOps pipelines caused by Python namespace shadowing (crud/azure shadowing the installed azure SDK namespace) by switching pipeline invocation from running the main.py file to executing the module via python3 -m crud.main.

Changes:

  • Update CRUD pipeline steps to run python3 -m crud.main ... instead of python3 "$PYTHON_SCRIPT_FILE" ....
  • Remove the now-unused PYTHON_SCRIPT_FILE environment variable from the affected steps.
  • Apply the same invocation fix consistently across both CRUD and Machine API execute/collect step templates.
File summaries
File Description
steps/engine/machine/k8s/execute.yml Switch machine CRUD execution commands to python3 -m crud.main and remove PYTHON_SCRIPT_FILE.
steps/engine/machine/k8s/collect.yml Switch machine CRUD collection command to python3 -m crud.main and remove PYTHON_SCRIPT_FILE.
steps/engine/crud/k8s/execute.yml Switch k8s CRUD execution commands (create/scale/workloads/statefulset/job/delete) to python3 -m crud.main and remove PYTHON_SCRIPT_FILE.
steps/engine/crud/k8s/collect.yml Switch k8s CRUD collection command to python3 -m crud.main and remove 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

Copy link
Copy Markdown
Contributor Author

Superseded by #1319 (branch now on Azure/telescope directly, no fork).

@xuexu6666
Xu Xue (xuexu6666) deleted the xuxue/crud-azure-namespace-shadowing branch September 9, 2026 15:13
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