Skip to content

feat: add Azure DevOps Flow Registry Client support#412

Merged
Chaffelson merged 4 commits into
feat/nifi-2.10.0from
feature/azuredevops-registry
Jul 20, 2026
Merged

feat: add Azure DevOps Flow Registry Client support#412
Chaffelson merged 4 commits into
feat/nifi-2.10.0from
feature/azuredevops-registry

Conversation

@Chaffelson

@Chaffelson Chaffelson commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Summary

Adds support for NiFi's native Azure DevOps Flow Registry Client, alongside the existing GitHub/GitLab providers. Unlike GitHub/GitLab (single PAT), Azure DevOps authenticates only via a Microsoft Entra service principal (OAuth2 client credentials), which requires two controller-level ("management") controller services. A single versioning.ensure_azuredevops_registry() call provisions them and wires up the registry client.

Changes

  • canvas: create_management_controller() (controller-level create via the Controller API, unlike the process-group-scoped create_controller) and the idempotent ensure_management_controller() composer built on the existing get/update/schedule controller functions. CRUD tests prove those shared functions operate on management services, not only PG-scoped ones.
  • ci: new azuredevops provider in ensure_registry (with NIFI_ADO_* environment fallbacks).
  • cli: native Azure Pipelines output format (##vso[task.setvariable], auto-detected via TF_BUILD).
  • tests: management-controller CRUD, Azure DevOps unit/validation, gated live integration tests, and teardown fixtures.

Stacked on #411 (2.10.0 bump + client regen); base will retarget to main once #411 merges.

Test plan

  • Full suite green on NiFi 2.10.0: 722 passed, 33 skipped
  • flake8 + pylint 10.00/10
  • Live ADO integration (gated on ADO_* env)

@Chaffelson Chaffelson self-assigned this Jul 18, 2026
Add nipyapi.versioning.ensure_azuredevops_registry() to provision NiFi's
native AzureDevOpsFlowRegistryClient end to end. Azure DevOps authenticates
only via a Microsoft Entra service principal (OAuth2 client credentials), so
the helper ensures the two required management (controller-level) controller
services - a Web Client Service and an OAuth2 Access Token Provider - and
wires them into the registry client.

Supporting changes:
- canvas: add create_management_controller() (controller-level create via the
  Controller API, unlike the process-group-scoped create_controller) and the
  idempotent ensure_management_controller() composer built on the existing
  get/update/schedule controller functions.
- ci: add an "azuredevops" provider branch to ensure_registry (with NIFI_ADO_*
  environment fallbacks).
- cli: add native Azure Pipelines output format (##vso[task.setvariable],
  auto-detected via the TF_BUILD environment variable).
- tests: management-controller CRUD tests, Azure DevOps unit/validation tests,
  gated live integration tests, and teardown fixtures.
…l ADO auth

- ensure_management_controller: re-applying properties to an existing,
  already-enabled management service failed because update_controller refuses
  to modify an enabled service without auto_disable. Pass auto_disable=True so
  the update disables, applies, and re-enables (with built-in rollback).
- test_canvas: cover re-invocation with properties on an already-enabled
  service (previously only the no-properties idempotent path was tested).
- test_ci: the live Azure DevOps test now lists buckets from the repo, forcing
  the SP OAuth2 token fetch + a live ADO API call, to prove the service
  principal actually authenticated rather than only that config is VALID.
@Chaffelson
Chaffelson force-pushed the feature/azuredevops-registry branch from c4b181f to b9f9519 Compare July 18, 2026 08:44
@Chaffelson
Chaffelson merged commit f4a082b into feat/nifi-2.10.0 Jul 20, 2026
1 check passed
Chaffelson added a commit that referenced this pull request Jul 20, 2026
* feat: add Azure DevOps Flow Registry Client support

Add nipyapi.versioning.ensure_azuredevops_registry() to provision NiFi's
native AzureDevOpsFlowRegistryClient end to end. Azure DevOps authenticates
only via a Microsoft Entra service principal (OAuth2 client credentials), so
the helper ensures the two required management (controller-level) controller
services - a Web Client Service and an OAuth2 Access Token Provider - and
wires them into the registry client.

Supporting changes:
- canvas: add create_management_controller() (controller-level create via the
  Controller API, unlike the process-group-scoped create_controller) and the
  idempotent ensure_management_controller() composer built on the existing
  get/update/schedule controller functions.
- ci: add an "azuredevops" provider branch to ensure_registry (with NIFI_ADO_*
  environment fallbacks).
- cli: add native Azure Pipelines output format (##vso[task.setvariable],
  auto-detected via the TF_BUILD environment variable).
- tests: management-controller CRUD tests, Azure DevOps unit/validation tests,
  gated live integration tests, and teardown fixtures.

* fix(canvas): make ensure_management_controller idempotent; verify real ADO auth

- ensure_management_controller: re-applying properties to an existing,
  already-enabled management service failed because update_controller refuses
  to modify an enabled service without auto_disable. Pass auto_disable=True so
  the update disables, applies, and re-enables (with built-in rollback).
- test_canvas: cover re-invocation with properties on an already-enabled
  service (previously only the no-properties idempotent path was tested).
- test_ci: the live Azure DevOps test now lists buckets from the repo, forcing
  the SP OAuth2 token fetch + a live ADO API call, to prove the service
  principal actually authenticated rather than only that config is VALID.

* fix(canvas): validate ensure_management_controller properties via prepare_controller_config

* docs: document Azure DevOps registry + Azure Pipelines support
@Chaffelson
Chaffelson deleted the feature/azuredevops-registry branch July 20, 2026 10:00
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