Skip to content

docs: add Azure provider ecosystem guide#18568

Merged
CamSoper merged 3 commits intomasterfrom
fix_issue_17745_azure_provider_guide
Apr 16, 2026
Merged

docs: add Azure provider ecosystem guide#18568
CamSoper merged 3 commits intomasterfrom
fix_issue_17745_azure_provider_guide

Conversation

@joeduffy
Copy link
Copy Markdown
Member

Summary

Adds a holistic guide covering the full Pulumi Azure provider ecosystem, addressing issue #17745. Users often don't understand why multiple Azure providers exist, which API surface each targets, or how they compose together in real deployments.

Changes

New content files:

  • content/docs/iac/clouds/azure/guides/_index.md — Guides section landing page for the Azure docs, matching the pattern established for Google Cloud
  • content/docs/iac/clouds/azure/guides/providers.md — Comprehensive provider ecosystem guide covering:
    • azure-native (ARM API, recommended primary provider, v1/v2/v3 versioning)
    • azure-classic (Terraform-bridged, not recommended for new projects)
    • azuread (Microsoft Graph API, Entra ID resources — with note on the Azure AD rebrand to Entra ID)
    • azuredevops (Azure DevOps REST API, pipeline and project management)
    • azapi (community-maintained, largely superseded by azure-native)
    • Decision table for common tasks
    • Multi-provider composition example (azure-native + azuread together)

New static programs (all 6 languages):

  • static/programs/azure-providers-{typescript,python,go,csharp,java,yaml}/
    • Demonstrates creating an Azure resource group (azure-native) alongside an Entra ID application and service principal (azuread), showing how the providers compose in practice

Notes

Closes #17745


🧠 This PR was created by workprentice on behalf of @joeduffy.

Add a holistic guide covering the full Pulumi Azure provider ecosystem,
explaining when to use each provider and how they compose together.

New files:
- content/docs/iac/clouds/azure/guides/_index.md
  - Guides landing page for the Azure docs section
- content/docs/iac/clouds/azure/guides/providers.md
  - Comprehensive guide covering azure-native, azure-classic, azuread,
    azuredevops, and the community azapi package
  - Explains the underlying API each targets (ARM, Microsoft Graph, DevOps REST)
  - Notes the Microsoft Entra ID rebrand (Azure AD -> Entra ID)
  - Covers azure-native versioning (v1, v2, v3)
  - Provides a decision table and combined multi-provider code examples
- static/programs/azure-providers-{typescript,python,go,csharp,java,yaml}/
  - Example programs demonstrating azure-native + azuread together

Closes #17745
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Apr 16, 2026

Docs Review — PR #18568

Scope: All 19 new files (2 content docs, 17 static program files across 6 languages).

This is a well-structured guide that fills a real gap in the Azure documentation. The content is accurate, clearly written, and follows the established pattern from the GCP provider guide. A few items to address:


Issues

1. Stale time reference in the AzAPI sectioncontent/docs/iac/clouds/azure/guides/providers.md line 217

As of mid-2024, the package has had little maintenance activity.

This is nearly two years old and may no longer be accurate. Consider rephrasing to avoid a point-in-time reference that will age:

The package has historically seen limited maintenance activity.

Or verify the current maintenance status and update accordingly.

2. Likely incorrect .NET package casing for Azure DevOpscontent/docs/iac/clouds/azure/guides/providers.md line 40

The table lists Pulumi.Azuredevops, but Pulumi NuGet packages follow PascalCase conventions (e.g., Pulumi.AzureNative, Pulumi.AzureAD). The correct package name is likely:

`Pulumi.AzureDevOps`

Please verify the actual NuGet package name and correct the casing.

3. Go module uses azure-native-sdk v2 while text says v3 is currentstatic/programs/azure-providers-go/go.mod line 6

github.com/pulumi/pulumi-azure-native-sdk/resources/v2 v2.42.1

The guide text at providers.md line 78 says "The current major version is v3, and all new projects should target it." If v3 of the Go SDK module exists, the example program should use it to be consistent with the recommendation. If the Go module path /v2 is still correct for provider v3 (due to Go module versioning conventions), a brief note in the guide clarifying this discrepancy would help avoid confusion.


Minor suggestions

4. _index.md refers to "Azure Active Directory / Entra ID provider"content/docs/iac/clouds/azure/guides/_index.md line 27

Since Microsoft completed the rebrand to "Entra ID" in 2023, consider leading with the current name:

- [Entra ID provider (`@pulumi/azuread`)](/registry/packages/azuread/) — a provider for
  managing Microsoft Entra ID (formerly Azure Active Directory) resources such as users, groups, service
  principals, and app registrations

This would be consistent with the note in providers.md that explains the rebrand.

5. The "Packages at a glance" table is extremely wideproviders.md lines 35–46

The five-column table with full Go import paths will likely overflow or require horizontal scrolling on smaller viewports. This is a minor presentation concern — no action required, but worth confirming it renders acceptably on the live site.


What looks good

  • Frontmatter is complete and correct on both content files (title_tag, meta_desc, meta_image, menu, aliases).
  • Menu hierarchy is correct: azure-cloudsazure-clouds-guidesazure-guides-providers.
  • Heading case follows style guide (H1 Title Case, H2+ sentence case).
  • All six language examples have complete project structures (Pulumi.yaml, dependency files, source files).
  • The {{< example-program path="azure-providers" >}} shortcode usage is correct — the shortcode auto-discovers available languages.
  • Code examples use correct language-idiomatic conventions (camelCase for TS, snake_case for Python, PascalCase for C#/Go).
  • Internal links to /docs/iac/get-started/azure/, /registry/packages/azure-native/, etc. reference known paths.
  • Content structure mirrors the existing GCP guides section.

Mention @claude if you'd like additional reviews or help fixing any of the above items.

Copy link
Copy Markdown
Contributor

@CamSoper CamSoper left a comment

Choose a reason for hiding this comment

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

Thanks for the guide, Joe -- the prose and structure are solid. A handful of concrete fixes before merge, mostly around the failing CI:

CI failures

Lint -- trailing blank line at EOF in both content files:

  • content/docs/iac/clouds/azure/guides/_index.md:37
  • content/docs/iac/clouds/azure/guides/providers.md:261

Go program won't compile -- pulumi-azuread/sdk/v4 uses the legacy ApplicationId field name, but the program code uses ClientId. The cleanest fix is to bump both Azure module versions in static/programs/azure-providers-go/go.mod to match the current ecosystem and the v3 recommendation in the guide:

github.com/pulumi/pulumi-azure-native-sdk/resources/v3 v3.16.0
github.com/pulumi/pulumi-azuread/sdk/v6 v6.9.0

Then update the import in main.go from sdk/v4/go/azuread to sdk/v6/go/azuread. That also resolves the v2-vs-v3 inconsistency noted in the earlier review.

Java program won't run -- static/programs/azure-providers-java/pom.xml declares <mainClass> under <properties> but doesn't wire it to the exec-maven-plugin that the test harness invokes via mvn exec:java. Copy the org.codehaus.mojo:exec-maven-plugin block from static/programs/aws-providers-combine-java/pom.xml (or gcp-providers-classic-java/pom.xml).

From the earlier review, still unaddressed

  • providers.md:40 -- the table lists Pulumi.Azuredevops; the canonical NuGet package id is Pulumi.AzureDevOps.
  • providers.md:217 -- "As of mid-2024, the package has had little maintenance activity." -- the azapi repo's most recent commit is 2025-07-01, so the mid-2024 framing is stale. Consider a non-dated phrasing: "The package has historically seen limited maintenance activity."

- Remove trailing blank lines at EOF in both content files (lint fix)
- Upgrade Go azuread sdk/v4 to sdk/v6 (ClientId field compatibility, v3 alignment)
- Upgrade Go azure-native-sdk resources/v2 to resources/v3 (match guide recommendation)
- Update Go azuread import path in table from sdk/v4 to sdk/v6
- Add exec-maven-plugin to Java pom.xml for test harness compatibility
- Fix .NET package casing: Pulumi.Azuredevops -> Pulumi.AzureDevOps
- Replace stale mid-2024 date reference with non-dated azapi maintenance note
@joeduffy
Copy link
Copy Markdown
Member Author

Thanks for the thorough review, @CamSoper. All items addressed in the latest push (579050d):

  • Trailing blank lines: Removed from both _index.md and providers.md
  • Go program: Upgraded to pulumi-azure-native-sdk/resources/v3 and pulumi-azuread/sdk/v6, correcting both the version inconsistency and the ClientId field compatibility issue. Also updated the Go package path in the comparison table to reflect v6.
  • Java pom.xml: Added exec-maven-plugin (matching the GCP guide pattern) and aligned assembly plugin config with the established template
  • Pulumi.AzureDevOps casing: Fixed in the comparison table
  • azapi date phrasing: Replaced "As of mid-2024" with "The package has historically seen limited maintenance activity"

@pulumi-bot
Copy link
Copy Markdown
Collaborator

pulumi-bot commented Apr 16, 2026

@joeduffy joeduffy requested a review from CamSoper April 16, 2026 20:03
@joeduffy
Copy link
Copy Markdown
Member Author

CI is now green on both checks. All review feedback from @CamSoper has been addressed — requesting a re-review when you have a moment.

The existing warning described limited maintenance; the repo was
archived on 2025-07-01 with a README caution redirecting users to
the Azure Native provider. Tightens the wording to reflect current
state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@CamSoper CamSoper left a comment

Choose a reason for hiding this comment

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

Thanks for the quick turn on the prior feedback, Joe -- CI is green, the Go module bump to v3/v6 resolved both the build failure and the version consistency, and the Java pom now wires exec-maven-plugin. Casing and the stale date reference are fixed.

One small accuracy follow-up landed directly on the branch: the AzAPI warning block called out "limited maintenance activity," but a fact-check turned up that dirien/pulumi-azapi was archived on 2025-07-01 with a README caution redirecting users to the Azure Native provider. Swapped the phrasing to say that outright.

Optional nit (not blocking, feel free to ignore): the inline AKS example at providers.md:118-154 still uses servicePrincipalProfile with clientId/secret. That's valid in azure-native v3, but Microsoft's current guidance for new AKS clusters is managed identity. Since the example's whole point is to motivate azuread as a companion provider, swapping to managed identity would undercut that -- so no action needed unless you want to add a one-liner noting managed identity is the modern default.

Approving with auto-merge on squash.

@CamSoper CamSoper enabled auto-merge (squash) April 16, 2026 20:25
@CamSoper CamSoper merged commit f4989c4 into master Apr 16, 2026
7 checks passed
@CamSoper CamSoper deleted the fix_issue_17745_azure_provider_guide branch April 16, 2026 20:32
CamSoper added a commit to CamSoper/pulumi.docs that referenced this pull request May 1, 2026
* docs: add Azure provider ecosystem guide (pulumi#17745)

Add a holistic guide covering the full Pulumi Azure provider ecosystem,
explaining when to use each provider and how they compose together.

New files:
- content/docs/iac/clouds/azure/guides/_index.md
  - Guides landing page for the Azure docs section
- content/docs/iac/clouds/azure/guides/providers.md
  - Comprehensive guide covering azure-native, azure-classic, azuread,
    azuredevops, and the community azapi package
  - Explains the underlying API each targets (ARM, Microsoft Graph, DevOps REST)
  - Notes the Microsoft Entra ID rebrand (Azure AD -> Entra ID)
  - Covers azure-native versioning (v1, v2, v3)
  - Provides a decision table and combined multi-provider code examples
- static/programs/azure-providers-{typescript,python,go,csharp,java,yaml}/
  - Example programs demonstrating azure-native + azuread together

Closes pulumi#17745

* fix: address CI failures and review feedback on Azure provider guide

- Remove trailing blank lines at EOF in both content files (lint fix)
- Upgrade Go azuread sdk/v4 to sdk/v6 (ClientId field compatibility, v3 alignment)
- Upgrade Go azure-native-sdk resources/v2 to resources/v3 (match guide recommendation)
- Update Go azuread import path in table from sdk/v4 to sdk/v6
- Add exec-maven-plugin to Java pom.xml for test harness compatibility
- Fix .NET package casing: Pulumi.Azuredevops -> Pulumi.AzureDevOps
- Replace stale mid-2024 date reference with non-dated azapi maintenance note

* docs: disclose AzAPI repo archival in warning block

The existing warning described limited maintenance; the repo was
archived on 2025-07-01 with a README caution redirecting users to
the Azure Native provider. Tightens the wording to reflect current
state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: workprenticebot <257153108+workprenticebot@users.noreply.github.com>
Co-authored-by: Cam <csoper@pulumi.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CamSoper added a commit to CamSoper/pulumi.docs that referenced this pull request May 5, 2026
* docs: add Azure provider ecosystem guide (pulumi#17745)

Add a holistic guide covering the full Pulumi Azure provider ecosystem,
explaining when to use each provider and how they compose together.

New files:
- content/docs/iac/clouds/azure/guides/_index.md
  - Guides landing page for the Azure docs section
- content/docs/iac/clouds/azure/guides/providers.md
  - Comprehensive guide covering azure-native, azure-classic, azuread,
    azuredevops, and the community azapi package
  - Explains the underlying API each targets (ARM, Microsoft Graph, DevOps REST)
  - Notes the Microsoft Entra ID rebrand (Azure AD -> Entra ID)
  - Covers azure-native versioning (v1, v2, v3)
  - Provides a decision table and combined multi-provider code examples
- static/programs/azure-providers-{typescript,python,go,csharp,java,yaml}/
  - Example programs demonstrating azure-native + azuread together

Closes pulumi#17745

* fix: address CI failures and review feedback on Azure provider guide

- Remove trailing blank lines at EOF in both content files (lint fix)
- Upgrade Go azuread sdk/v4 to sdk/v6 (ClientId field compatibility, v3 alignment)
- Upgrade Go azure-native-sdk resources/v2 to resources/v3 (match guide recommendation)
- Update Go azuread import path in table from sdk/v4 to sdk/v6
- Add exec-maven-plugin to Java pom.xml for test harness compatibility
- Fix .NET package casing: Pulumi.Azuredevops -> Pulumi.AzureDevOps
- Replace stale mid-2024 date reference with non-dated azapi maintenance note

* docs: disclose AzAPI repo archival in warning block

The existing warning described limited maintenance; the repo was
archived on 2025-07-01 with a README caution redirecting users to
the Azure Native provider. Tightens the wording to reflect current
state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: workprenticebot <257153108+workprenticebot@users.noreply.github.com>
Co-authored-by: Cam <csoper@pulumi.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CamSoper added a commit to CamSoper/pulumi.docs that referenced this pull request May 5, 2026
* docs: add Azure provider ecosystem guide (pulumi#17745)

Add a holistic guide covering the full Pulumi Azure provider ecosystem,
explaining when to use each provider and how they compose together.

New files:
- content/docs/iac/clouds/azure/guides/_index.md
  - Guides landing page for the Azure docs section
- content/docs/iac/clouds/azure/guides/providers.md
  - Comprehensive guide covering azure-native, azure-classic, azuread,
    azuredevops, and the community azapi package
  - Explains the underlying API each targets (ARM, Microsoft Graph, DevOps REST)
  - Notes the Microsoft Entra ID rebrand (Azure AD -> Entra ID)
  - Covers azure-native versioning (v1, v2, v3)
  - Provides a decision table and combined multi-provider code examples
- static/programs/azure-providers-{typescript,python,go,csharp,java,yaml}/
  - Example programs demonstrating azure-native + azuread together

Closes pulumi#17745

* fix: address CI failures and review feedback on Azure provider guide

- Remove trailing blank lines at EOF in both content files (lint fix)
- Upgrade Go azuread sdk/v4 to sdk/v6 (ClientId field compatibility, v3 alignment)
- Upgrade Go azure-native-sdk resources/v2 to resources/v3 (match guide recommendation)
- Update Go azuread import path in table from sdk/v4 to sdk/v6
- Add exec-maven-plugin to Java pom.xml for test harness compatibility
- Fix .NET package casing: Pulumi.Azuredevops -> Pulumi.AzureDevOps
- Replace stale mid-2024 date reference with non-dated azapi maintenance note

* docs: disclose AzAPI repo archival in warning block

The existing warning described limited maintenance; the repo was
archived on 2025-07-01 with a README caution redirecting users to
the Azure Native provider. Tightens the wording to reflect current
state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: workprenticebot <257153108+workprenticebot@users.noreply.github.com>
Co-authored-by: Cam <csoper@pulumi.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CamSoper added a commit to CamSoper/pulumi.docs that referenced this pull request May 5, 2026
* docs: add Azure provider ecosystem guide (pulumi#17745)

Add a holistic guide covering the full Pulumi Azure provider ecosystem,
explaining when to use each provider and how they compose together.

New files:
- content/docs/iac/clouds/azure/guides/_index.md
  - Guides landing page for the Azure docs section
- content/docs/iac/clouds/azure/guides/providers.md
  - Comprehensive guide covering azure-native, azure-classic, azuread,
    azuredevops, and the community azapi package
  - Explains the underlying API each targets (ARM, Microsoft Graph, DevOps REST)
  - Notes the Microsoft Entra ID rebrand (Azure AD -> Entra ID)
  - Covers azure-native versioning (v1, v2, v3)
  - Provides a decision table and combined multi-provider code examples
- static/programs/azure-providers-{typescript,python,go,csharp,java,yaml}/
  - Example programs demonstrating azure-native + azuread together

Closes pulumi#17745

* fix: address CI failures and review feedback on Azure provider guide

- Remove trailing blank lines at EOF in both content files (lint fix)
- Upgrade Go azuread sdk/v4 to sdk/v6 (ClientId field compatibility, v3 alignment)
- Upgrade Go azure-native-sdk resources/v2 to resources/v3 (match guide recommendation)
- Update Go azuread import path in table from sdk/v4 to sdk/v6
- Add exec-maven-plugin to Java pom.xml for test harness compatibility
- Fix .NET package casing: Pulumi.Azuredevops -> Pulumi.AzureDevOps
- Replace stale mid-2024 date reference with non-dated azapi maintenance note

* docs: disclose AzAPI repo archival in warning block

The existing warning described limited maintenance; the repo was
archived on 2025-07-01 with a README caution redirecting users to
the Azure Native provider. Tightens the wording to reflect current
state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: workprenticebot <257153108+workprenticebot@users.noreply.github.com>
Co-authored-by: Cam <csoper@pulumi.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

docs: Azure provider ecosystem guide — azure-native, AzureAD/Entra ID, Azure DevOps, and AzAPI disambiguation

4 participants