Skip to content

add WasbDagBundle to load Dags from Azure Blob Storage - #67016

Open
Nishieee wants to merge 17 commits into
apache:mainfrom
Nishieee:feature/azure-blob-dag-bundle
Open

Nishieee wants to merge 17 commits into
apache:mainfrom
Nishieee:feature/azure-blob-dag-bundle

Conversation

@Nishieee

@Nishieee Nishieee commented May 15, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds a Dag bundle for Azure Blob Storage so Dags can be loaded from a container (with optional prefix), similar to S3DagBundle and GCSDagBundle. Introduces WasbDagBundle, extends WasbHook with container checks and sync_to_local_dir, registers the bundle in provider metadata, documents it in dag-bundles.rst, and adds unit tests.

Manual verification: Tested with Breeze against a real Azure storage account: wasb connection, dag_processor.dag_bundle_config_list pointing at WasbDagBundle, Dag parsed from blob and visible in the UI. PR includes screenshots (Azure container + Airflow Dags list).

closes: #66987


Was generative AI tooling used to co-author this PR?
  • Yes — Cursor (agent-assisted editing)
Screenshot 2026-05-15 at 7 12 30 PM Screenshot 2026-05-15 at 6 52 48 PM Screenshot 2026-05-15 at 6 52 39 PM

Generated-by: Cursor following the guidelines


Important

🛠️ Maintainer triage note for @Nishieee · by @potiuk · 2026-07-08 15:51 UTC

Some review feedback from @eladkal is waiting on you (4 unresolved threads):

The ball is in your court — you've been assigned to this PR. Reply or push a fix in each thread, then mark them resolved. See the Pull Request quality criteria.

Automated triage — may be imperfect; a maintainer takes the next look.

Comment thread airflow-core/docs/administration-and-deployment/dag-bundles.rst
@jroachgolf84

Copy link
Copy Markdown
Collaborator

I added a note in the PR about enhancing the docs. I think a couple of things that I'd like to know if I were a user setting this up from scratch.

  • What authentication method do I use between Airflow and Microsoft?
  • What permissions does my managed identity need?
  • Are there any custom storage bucket/container configuration I need to keep in mind?
  • What about networking?
  • Can I use the same type of Connection that I'd use in a DAG (I know the answer is "yes", but it might be worth calling out)?

@jroachgolf84

Copy link
Copy Markdown
Collaborator

These changes offer a nice starting point: https://github.com/apache/airflow/pull/66993/changes

@Nishieee

Copy link
Copy Markdown
Contributor Author

These changes offer a nice starting point: https://github.com/apache/airflow/pull/66993/changes

Thanks for the review. I'll add provider-level bundle docs for WASB following the pattern in #66993 (providers/microsoft/azure/docs/bundles/index.rst, Guides entry, cross-link to core Dag bundles), and cover auth, managed-identity permissions, container/prefix setup, networking, and reusing the same wasb Connection as in Dags. I'll push an update shortly.

@yuseok89 yuseok89 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.

Left a couple of small comments inline.
Please take a look when you have a moment.

Comment thread providers/microsoft/azure/src/airflow/providers/microsoft/azure/bundles/wasb.py Outdated
Comment thread providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py Outdated
@potiuk

potiuk commented May 18, 2026

Copy link
Copy Markdown
Member

@Nishieee — There are 4 unresolved review thread(s) on this PR from @dominikhei, @jroachgolf84, @yuseok89. Could you either push a fix or reply in each thread explaining why the feedback doesn't apply? Once you believe the feedback is addressed, mark the thread as resolved so the reviewer isn't re-pinged needlessly. Thanks!


Note: This comment was drafted by an AI-assisted triage tool and may contain mistakes. Once you have addressed the points above, an Apache Airflow maintainer — a real person — will take the next look at your PR. We use this two-stage triage process so that our maintainers' limited time is spent where it matters most: the conversation with you.

@Nishieee
Nishieee force-pushed the feature/azure-blob-dag-bundle branch from 0144712 to a16419b Compare May 19, 2026 17:28
@Nishieee
Nishieee requested a review from jroachgolf84 May 24, 2026 01:46
@potiuk

potiuk commented May 26, 2026

Copy link
Copy Markdown
Member

@Nishieee — There are 2 unresolved review thread(s) on this PR, and you have engaged with each one (post-review commits and/or in-thread replies). Could you confirm whether you believe the feedback is fully addressed and the PR is ready for maintainer review confirmation?

If yes, reply here (a short "yes / ready" is fine) and an Apache Airflow maintainer will pick the PR up from the review queue on the next sweep.

If you are still working on a thread, please reply with what is outstanding so the threads stay unresolved on purpose.


Note: This comment was drafted by an AI-assisted triage tool and may contain mistakes. Once you have addressed the points above, an Apache Airflow maintainer — a real person — will take the next look at your PR. We use this two-stage triage process so that our maintainers' limited time is spent where it matters most: the conversation with you.


Drafted-by: Claude Code (Opus 4.7); reviewed by @potiuk before posting

@Nishieee

Copy link
Copy Markdown
Contributor Author

@Nishieee — There are 2 unresolved review thread(s) on this PR, and you have engaged with each one (post-review commits and/or in-thread replies). Could you confirm whether you believe the feedback is fully addressed and the PR is ready for maintainer review confirmation?

If yes, reply here (a short "yes / ready" is fine) and an Apache Airflow maintainer will pick the PR up from the review queue on the next sweep.

If you are still working on a thread, please reply with what is outstanding so the threads stay unresolved on purpose.

Note: This comment was drafted by an AI-assisted triage tool and may contain mistakes. Once you have addressed the points above, an Apache Airflow maintainer — a real person — will take the next look at your PR. We use this two-stage triage process so that our maintainers' limited time is spent where it matters most: the conversation with you.

Drafted-by: Claude Code (Opus 4.7); reviewed by @potiuk before posting

yes

@jroachgolf84 jroachgolf84 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Nice work, all the changes LGTM. I'm not a maintainer, so my review doesn't count towards your required approvals. But nice job!

@potiuk potiuk added the ready for maintainer review Set after triaging when all criteria pass. label Jun 3, 2026
@jroachgolf84

Copy link
Copy Markdown
Collaborator

@eladkal - can you take a look at this one? I know that you were involved on the initial issue.

@potiuk potiuk removed the ready for maintainer review Set after triaging when all criteria pass. label Jun 22, 2026
@eladkal
eladkal force-pushed the feature/azure-blob-dag-bundle branch from 2d3b4e3 to 51d73e9 Compare June 25, 2026 07:31

@eladkal eladkal 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.

LGTM

@eladkal

eladkal commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Probably needs 2nd eye from someone more familiar witht he bundle area

@shahar1
shahar1 requested review from dabla and removed request for dominikhei and yuseok89 July 1, 2026 19:30
Comment thread providers/microsoft/azure/src/airflow/providers/microsoft/azure/bundles/wasb.py Outdated
Comment thread providers/microsoft/azure/src/airflow/providers/microsoft/azure/bundles/wasb.py Outdated
Comment thread providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/wasb.py Outdated

@jroachgolf84 jroachgolf84 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

My docs issues are addressed, thanks!

@aaron-y-chen aaron-y-chen 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.

Thanks for the contribution :)

Comment thread providers/microsoft/azure/src/airflow/providers/microsoft/azure/bundles/wasb.py Outdated

@dabla dabla 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.

Solid addition overall: WasbDagBundle mirrors the S3DagBundle/GCSDagBundle structure, check_for_container now uses ContainerClient.exists(), the "Deleting …" log wording and the prefix + "/" anchoring from the previous rounds are in, and the hook and bundle tests are otherwise thorough. Every earlier thread is either addressed in the diff or was explicitly closed by discussion (structlog positional args, prefix="" default, _view_url_template, LoggingMixin deferred to #69859), with one exception below.

Two things block the merge:

  1. SAS token in the view URL (comment [3]). The response to @aaron-y-chen's thread fixed the URL shape but kept the query string, so a SAS-based connection leaks its signature into the link shown to every UI user. Dropping query/fragment in urlunsplit is a one-line fix; a test with a ?sig= URL should accompany it.
  2. No path-traversal guard in sync_to_local_dir (comment [4]). S3 gained one in #67847 after this PR was opened and GCS has one too; the WASB port needs the same check plus the matching test.

Also worth doing before merge: prefix-path test coverage for the hook (comment [5]), and the two nits on the unanchored prefix existence check and the missing docs heading underline.

This was a diff-based pass; I compared against the S3 and GCS hooks and the bundle manager in the repo, but did not trace beyond that.

Comment thread providers/microsoft/azure/docs/bundles/index.rst
Comment thread providers/microsoft/azure/src/airflow/providers/microsoft/azure/bundles/wasb.py Outdated
@Nishieee
Nishieee requested a review from dabla September 29, 2026 18:18

@aaron-y-chen aaron-y-chen 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.

LGTM

@Nishieee
Nishieee requested a review from eladkal October 11, 2026 22:36
Nishieee and others added 16 commits October 15, 2026 20:44
…e/bundles/wasb.py

Co-authored-by: Yuseok Jo <yuseok89@gmail.com>
The debug logs claimed a file or directory had been deleted before
item.unlink()/os.rmdir() actually ran, so a failed deletion would still
be logged as successful.

Co-authored-by: Cursor <cursoragent@cursor.com>
The previous commit changed the stale-file/dir deletion log messages
from past to present tense but missed updating this test's assertions,
breaking CI across every provider compatibility matrix job.

Co-authored-by: Cursor <cursoragent@cursor.com>
blob_service_client.url includes the SAS query string when the
connection is authenticated via a full SAS URL. Appending the
container name and prefix as plain string suffixes placed them after
the query string instead of in the path, producing a broken link.
Build the URL by rejoining the path and query components instead.
…s directory

A SAS-authenticated connection put its signature into the bundle view URL
shown to every UI user, and a crafted blob name could be written outside the
bundle directory on the Dag processor host. The prefix existence check also
accepted sibling prefixes, letting a bundle initialize and then sync nothing.
Unspecced mocks accept any attribute, so the sync tests would keep passing
even if the hook started reading a BlobProperties field that does not exist.
@dabla
dabla force-pushed the feature/azure-blob-dag-bundle branch from a30ff7d to ac68f33 Compare October 15, 2026 18:55
The previous commit rewrote uv.lock with an older uv, which lowered the
lock revision and dropped the exclude-newer options. This PR adds no
dependency, so the lock file matches main again.

This branch has not been deployed

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add AzureBlobStorageDagBundle

8 participants