Skip to content

feat: add dynamic creator API endpoints for schema-driven scaffolding#676

Merged
ssbarnea merged 3 commits intoansible:mainfrom
cidrblock:dynamic_api
Feb 26, 2026
Merged

feat: add dynamic creator API endpoints for schema-driven scaffolding#676
ssbarnea merged 3 commits intoansible:mainfrom
cidrblock:dynamic_api

Conversation

@cidrblock
Copy link
Copy Markdown
Contributor

@cidrblock cidrblock commented Feb 13, 2026

Summary

  • Adds three new endpoints to the ADT server that leverage ansible-creator's V1 programmatic API for dynamic, schema-driven scaffolding:
    • GET /v2/creator/capabilities -- discover all available ansible-creator commands
    • GET /v2/creator/schema?command_path=init&command_path=collection -- retrieve parameter schema for a specific command
    • POST /v2/creator/scaffold -- scaffold any project type dynamically via {"command_path": [...], "params": {...}}
  • This eliminates the need to modify ADT every time ansible-creator adds a new scaffolding capability
  • Includes OpenAPI schema definitions, handler implementation, and 13 integration tests

Depends on

Test plan

  • All 13 new integration tests pass (test_server_creator_dynamic.py)
  • Pre-commit hooks pass (ruff, mypy, pylint, cspell, pydoclint)
  • CI passes
  • Existing tests unaffected

@ssbarnea ssbarnea marked this pull request as draft February 19, 2026 19:16
@ssbarnea ssbarnea marked this pull request as draft February 19, 2026 19:16
@ssbarnea
Copy link
Copy Markdown
Member

@cidrblock moved to draft due to not passing tests.

@github-actions github-actions bot added feat and removed feat labels Feb 24, 2026
@cidrblock cidrblock marked this pull request as ready for review February 24, 2026 14:35
@github-actions github-actions bot added feat and removed feat labels Feb 26, 2026
Add three new endpoints that leverage ansible-creator's V1 API to
provide dynamic, schema-driven scaffolding without hardcoding individual
project types:

- GET /v2/creator/capabilities: discover all available commands
- GET /v2/creator/schema: retrieve parameter schema for a command
- POST /v2/creator/scaffold: scaffold any project type dynamically

Co-authored-by: Cursor <[email protected]>
@github-actions github-actions bot added the feat label Feb 26, 2026
@ssbarnea ssbarnea merged commit 1e16a80 into ansible:main Feb 26, 2026
30 checks passed
renovate bot added a commit to sdwilsh/ansible-playbooks that referenced this pull request Mar 12, 2026
##### [\`26.2.0\`](https://github.com/ansible/ansible-dev-tools/releases/tag/v26.2.0)

#### Features

- feat: add dynamic creator API endpoints for schema-driven scaffolding ([#676](ansible/ansible-dev-tools#676)) [@cidrblock](https://github.com/cidrblock)
- feat: bump minimal direct dependencies ([#688](ansible/ansible-dev-tools#688)) [@ssbarnea](https://github.com/ssbarnea)
- feat: add execution environment project endpoint to ADT server ([#675](ansible/ansible-dev-tools#675)) [@cidrblock](https://github.com/cidrblock)

#### Fixes

- fix: disable gunicorn control socket to prevent post-fork deadlock ([#693](ansible/ansible-dev-tools#693)) [@cidrblock](https://github.com/cidrblock)
- fix: update base image to Fedora 42 as Fedora 41 is EOL ([#672](ansible/ansible-dev-tools#672)) [@dmzoneill](https://github.com/dmzoneill)

#### Maintenance

- chore: improve adt server execution during testing ([#691](ansible/ansible-dev-tools#691)) [@ssbarnea](https://github.com/ssbarnea)
- chore(deps): update pep621 ([#690](ansible/ansible-dev-tools#690)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore: update test deps ([#689](ansible/ansible-dev-tools#689)) [@ssbarnea](https://github.com/ssbarnea)
- chore: update pytest config ([#685](ansible/ansible-dev-tools#685)) [@ssbarnea](https://github.com/ssbarnea)
- chore: fix devel pipeline loop (chardet regression) ([#687](ansible/ansible-dev-tools#687)) [@ssbarnea](https://github.com/ssbarnea)
- chore: fix devspaces pipeline getting stuck (tox nested call) ([#681](ansible/ansible-dev-tools#681)) [@ssbarnea](https://github.com/ssbarnea)
- chore: migrate hooks from pre-commit to prek ([#678](ansible/ansible-dev-tools#678)) [@ssbarnea](https://github.com/ssbarnea)
- chore: add selenium-adt container for testing extension ([#677](ansible/ansible-dev-tools#677)) [@ssbarnea](https://github.com/ssbarnea)
- chore(deps): bump pillow from 12.1.0 to 12.1.1 in the uv group across 1 directory ([#674](ansible/ansible-dev-tools#674)) @[dependabot\[bot\]](https://github.com/apps/dependabot)
- chore(deps): bump cryptography from 46.0.4 to 46.0.5 in the uv group across 1 directory ([#673](ansible/ansible-dev-tools#673)) @[dependabot\[bot\]](https://github.com/apps/dependabot)
- chore(deps): update dependencies \[security] ([#669](ansible/ansible-dev-tools#669)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore(deps): update all dependencies ([#668](ansible/ansible-dev-tools#668)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore(deps): update all dependencies ([#667](ansible/ansible-dev-tools#667)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore(deps): update all dependencies ([#666](ansible/ansible-dev-tools#666)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore(deps): update all dependencies ([#664](ansible/ansible-dev-tools#664)) @[renovate\[bot\]](https://github.com/apps/renovate)
sdwilsh pushed a commit to sdwilsh/ansible-playbooks that referenced this pull request Mar 12, 2026
##### [\`26.2.0\`](https://github.com/ansible/ansible-dev-tools/releases/tag/v26.2.0)

#### Features

- feat: add dynamic creator API endpoints for schema-driven scaffolding ([#676](ansible/ansible-dev-tools#676)) [@cidrblock](https://github.com/cidrblock)
- feat: bump minimal direct dependencies ([#688](ansible/ansible-dev-tools#688)) [@ssbarnea](https://github.com/ssbarnea)
- feat: add execution environment project endpoint to ADT server ([#675](ansible/ansible-dev-tools#675)) [@cidrblock](https://github.com/cidrblock)

#### Fixes

- fix: disable gunicorn control socket to prevent post-fork deadlock ([#693](ansible/ansible-dev-tools#693)) [@cidrblock](https://github.com/cidrblock)
- fix: update base image to Fedora 42 as Fedora 41 is EOL ([#672](ansible/ansible-dev-tools#672)) [@dmzoneill](https://github.com/dmzoneill)

#### Maintenance

- chore: improve adt server execution during testing ([#691](ansible/ansible-dev-tools#691)) [@ssbarnea](https://github.com/ssbarnea)
- chore(deps): update pep621 ([#690](ansible/ansible-dev-tools#690)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore: update test deps ([#689](ansible/ansible-dev-tools#689)) [@ssbarnea](https://github.com/ssbarnea)
- chore: update pytest config ([#685](ansible/ansible-dev-tools#685)) [@ssbarnea](https://github.com/ssbarnea)
- chore: fix devel pipeline loop (chardet regression) ([#687](ansible/ansible-dev-tools#687)) [@ssbarnea](https://github.com/ssbarnea)
- chore: fix devspaces pipeline getting stuck (tox nested call) ([#681](ansible/ansible-dev-tools#681)) [@ssbarnea](https://github.com/ssbarnea)
- chore: migrate hooks from pre-commit to prek ([#678](ansible/ansible-dev-tools#678)) [@ssbarnea](https://github.com/ssbarnea)
- chore: add selenium-adt container for testing extension ([#677](ansible/ansible-dev-tools#677)) [@ssbarnea](https://github.com/ssbarnea)
- chore(deps): bump pillow from 12.1.0 to 12.1.1 in the uv group across 1 directory ([#674](ansible/ansible-dev-tools#674)) @[dependabot\[bot\]](https://github.com/apps/dependabot)
- chore(deps): bump cryptography from 46.0.4 to 46.0.5 in the uv group across 1 directory ([#673](ansible/ansible-dev-tools#673)) @[dependabot\[bot\]](https://github.com/apps/dependabot)
- chore(deps): update dependencies \[security] ([#669](ansible/ansible-dev-tools#669)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore(deps): update all dependencies ([#668](ansible/ansible-dev-tools#668)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore(deps): update all dependencies ([#667](ansible/ansible-dev-tools#667)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore(deps): update all dependencies ([#666](ansible/ansible-dev-tools#666)) @[renovate\[bot\]](https://github.com/apps/renovate)
- chore(deps): update all dependencies ([#664](ansible/ansible-dev-tools#664)) @[renovate\[bot\]](https://github.com/apps/renovate)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

3 participants