Skip to content

docs: Rewrite Azure Batch tutorial for native Batch Forge support - #1674

Open
adamrtalbot wants to merge 6 commits into
masterfrom
docs/azure-batch-native-tutorial
Open

docs: Rewrite Azure Batch tutorial for native Batch Forge support#1674
adamrtalbot wants to merge 6 commits into
masterfrom
docs/azure-batch-native-tutorial

Conversation

@adamrtalbot

Copy link
Copy Markdown
Contributor

Context

The manual-azure-batch-setup.md tutorials were written when advanced Azure Batch topologies required manual Nextflow config and manual Azure Portal pool creation. Seqera Platform now provisions most of these natively via Batch Forge and the compute-environment form.

Verified against seqera/platform:

Old tutorial option Now native?
Batch Forge single pool Forge now creates separate head/worker pools by default
Separate pools via process.queue Native (Forge default)
Hot head node Native (disable autoscale + Head VM type/CPUs/memory)
Nextflow autopool Deprecated/disabled (allowPoolCreation=false)
Entra service principal + managed identity Native (Entra credential + MI form fields)
VNet pool Native (Subnet ID field, Entra-gated)
VNet + autopool workers Native (subnet applied to worker pool by Forge)

Batch Forge provisions dedicated nodes only, so low-priority (spot) nodes remain a genuinely manual step and are preserved.

Changes

  • Restructure both tutorials as a native-first Batch Forge walkthrough (Cloud + Enterprise latest).
  • Keep genuinely manual content: low-priority (spot) worker nodes and pre-existing/custom pools.
  • Remove the deprecated Nextflow autopool options; replace with a short deprecation note.
  • Add reference cross-links from compute-envs/azure-batch.md to the tutorial (previously only linked one way).

Versioned snapshots (24.2–26.1) left untouched.

🤖 Generated with Claude Code

Batch Forge now provisions most advanced Azure Batch topologies natively
(separate head/worker pools, dedicated head job resources, autoscaling,
Entra authentication, and private networking). The manual-setup tutorials
taught Nextflow-config workarounds that are now redundant, and the Nextflow
autopool option was misleading since Platform disables allowPoolCreation.

- Restructure both tutorials as a native-first Batch Forge walkthrough
- Keep genuinely manual content: low-priority (spot) worker nodes
  (Forge is dedicated-only) and pre-existing/custom pools
- Remove deprecated autopool options; replace with a deprecation note
- Add reference cross-links from compute-envs/azure-batch.md to the tutorial

Scope: cloud + enterprise latest only; versioned snapshots untouched.

Generated by Claude Code
@netlify

netlify Bot commented Jul 21, 2026

Copy link
Copy Markdown

Deploy Preview for seqera-docs ready!

Name Link
🔨 Latest commit f914bee
🔍 Latest deploy log https://app.netlify.com/projects/seqera-docs/deploys/6a6b5d86b3c07a0008ab84d1
😎 Deploy Preview https://deploy-preview-1674--seqera-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@justinegeffen

Copy link
Copy Markdown
Contributor

@claude please port this to the current versioned docs (26.1) as well

@claude

claude Bot commented Jul 21, 2026

Copy link
Copy Markdown

Claude finished @justinegeffen's task in 2m 50s —— View job


Porting Azure Batch tutorial to versioned docs (26.1)

  • Read the 26.1 versioned files and compare with the new master versions
  • Port manual-azure-batch-setup.md to version-26.1
  • Port azure-batch.md cross-link to version-26.1
  • Verify relative links resolve in the versioned tree
  • Commit and pushcommitted locally, but push denied (403)

I ported both changes to platform-enterprise_versioned_docs/version-26.1/, mirroring the master rewrite:

  • enterprise/advanced-topics/manual-azure-batch-setup.md — full native-first Batch Forge rewrite (Parts 1–4 + Advanced), matching the enterprise-latest version. Verified the versioned cross-link anchors resolve (#entra-service-principal-and-managed-identity at line 150, #create-a-nextflow-compatible-azure-batch-pool at line 394). I kept the versioned file's existing install-seqera-cli reference (https://docs.seqera.io/platform-cli/installation) rather than the root-relative form used in the unversioned file, consistent with the snapshot's conventions.
  • compute-envs/azure-batch.md — added the same :::tip cross-link to the walkthrough under Add compute environment.

Net: +60 / −328 across the two files. The changes are committed locally as 3c40718.

Warning

I could not push the commit. Every push attempt (both HEAD and the branch name, via the required git-push.sh wrapper) fails with:

remote: Permission to seqeralabs/docs.git denied to github-actions[bot].
fatal: ... error: 403

The github-actions[bot] token in this run doesn't have write access to the branch. This is a permissions/config issue outside what I can fix from here — the workflow needs permissions: contents: write (and, for PRs from the same repo, an appropriately scoped token). Once that's granted, re-trigger @claude and I'll push, or a maintainer can cherry-pick commit 3c40718.
docs/azure-batch-native-tutorial

justinegeffen and others added 2 commits July 22, 2026 10:49
Applies the same native-Batch-Forge rewrite to the versioned 26.1
snapshot so the current release surface matches master. Preserves
the versioned-tree convention of using an absolute URL for the
Seqera CLI installation link.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@justinegeffen
justinegeffen requested review from jonmarti and justinegeffen and removed request for jonmarti July 22, 2026 20:34
@justinegeffen justinegeffen added 1. Editor review Needs a language review 1. Dev/PM/SME Needs a review by a Dev/PM/SME deslop-to-do labels Jul 22, 2026
1. For **Managed Identity Client ID**, enter the client ID of the managed identity created earlier.

Duplicate the `hello-world-autopool-low-priority` pipeline and save it as `hello-world-entra-mi`.
1. Under the managed identity fields, enter the client ID of the managed identity created earlier.

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.

The MI step here is now incomplete for Batch Forge. The compute-environment form actually exposes four MI fields (a client ID + a resource ID for both head and worker pool), and resource IDs are required when using Batch Forge because Forge passes them to BatchManager at pool-create time to attach the UAMIs. Worth mirroring what the reference doc landed on (via #1315 / #1396) so readers pick up the right fields.

Suggested change
1. Under the managed identity fields, enter the client ID of the managed identity created earlier.
1. Under the managed identity fields, enter the **client ID** and **resource ID** of the managed identity. When using Batch Forge you can also specify a separate pool managed identity by populating the corresponding pool fields — see [Entra service principal and managed identity][azure-batch-entra] in the Azure Batch reference for the four fields and when each is required.

(Same fix needed in platform-cloud/docs/enterprise/advanced-topics/manual-azure-batch-setup.md line 129 and the versioned 26.1 copy line 152.)

- Exchange of data can be faster and cheaper than routing over the public internet.

In practice, you are more likely to connect an Azure Batch Node pool to an existing virtual network that is connected to other resources, such as Seqera Platform or the Azure Storage Account. In this instance, connecting it to a VNet with public internet access will route the network traffic via the virtual network while still allowing you to perform every action.
To connect the Batch pool nodes to a private Azure VNet, enter a **Subnet ID** when creating the Batch Forge compute environment. Batch Forge attaches the subnet to both the head and worker pools, so worker nodes inherit the same networking automatically.

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.

This is accurate for Batch Forge specifically — but a reader who later follows the "Advanced. Use a pre-existing Azure Batch pool" section won't get that automatic subnet inheritance and has to attach the VNet to each pool themselves. Worth adding a one-liner in the Advanced section (line ~189) so readers know the Forge behaviour doesn't carry over.

Select **Launch** next to the `hello-world-entra-mi` pipeline in your workspace Launchpad to complete the launch form and launch the workflow. The pipeline runs as before, but uses the managed identity to authenticate to Azure Batch and Storage. No keys are exchanged.

:::note
You can also use User Subscription mode instead of Batch Managed here, but this is beyond the scope of this tutorial.

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.

This note is preserved from the old doc but reads oddly under a Batch Forge-first flow: Forge always creates pools in Batch Managed allocation mode (via BatchManager), not User Subscription. If we want to keep the pointer, it belongs in the "Advanced. Use a pre-existing Azure Batch pool" section rather than immediately after a Forge walkthrough — otherwise readers may think Forge supports both modes. Suggested: drop the callout here, or move it down.

(Same in versioned 26.1 line 160.)

[nextflow-working-directory]: https://docs.seqera.io/nextflow/cache-and-resume#work-directory
[create-org-workspace]: ../../getting-started/workspace-setup
[add-pipeline]: ../../getting-started/quickstart-demo/add-pipelines#add-from-the-launchpad
[azure-batch-reference]: ../../compute-envs/azure-batch

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.

Nit — link definitions in the three variants of this tutorial disagree on the file-extension convention:

  • platform-cloud/docs/enterprise/advanced-topics/manual-azure-batch-setup.md uses ../../compute-envs/azure-batch.md (with .md)
  • This file (Enterprise) uses ../../compute-envs/azure-batch (no .md)
  • platform-enterprise_versioned_docs/version-26.1/... also uses no .md

Docusaurus tolerates both, but worth aligning across the three copies (dropping .md from the Cloud one seems cleanest since two files already do it that way).

1. For **Managed Identity Client ID**, enter the client ID of the managed identity created earlier.

Duplicate the `hello-world-autopool-low-priority` pipeline and save it as `hello-world-entra-mi`.
1. Under the managed identity fields, enter the client ID of the managed identity created earlier.

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.

One more thing in this Entra section — the SP roles link a few lines up ("Assign roles to the service principal") points at a generic Microsoft page and doesn't tell the reader which roles to pick. We spent a while in #1315 / #1396 nailing this down (there is no built-in Azure Batch Contributor; the correct one is Azure Batch Data Contributor). Worth adding a pointer to the reference so readers don't re-derive it:

See the Service principal section of the Azure Batch reference for the specific roles the SP needs — Azure Batch Data Contributor on the Batch account, Storage Blob Data Contributor on the storage account, Managed Identity Operator on each UAMI, and — situationally — Network Contributor on the VNet.

(Same addition useful in the Cloud and versioned 26.1 copies.)

@jonmarti

Copy link
Copy Markdown
Contributor

Small self-correction on my review — I retracted my earlier comment about the head-pool Autoscale tip (it's now deleted). Turns out the compute-env form does expose a per-pool autoScale control in dual-pool mode (see compute-env-azure-platform.component.ts:271 on master), so the tutorial's tip about disabling Autoscale on the head pool via the UI is accurate as-is. Apologies for the noise — I'd validated against my memory from earlier in the year rather than current master. The other five comments still stand after re-checking the current codebase.

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

Labels

1. Dev/PM/SME Needs a review by a Dev/PM/SME 1. Editor review Needs a language review deslop-to-do

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants