[HORIZONDB] az horizondb create | show | delete: Introduce commands for Azure HorizonDB#9840
[HORIZONDB] az horizondb create | show | delete: Introduce commands for Azure HorizonDB#9840nasc17 wants to merge 5 commits intoAzure:mainfrom
az horizondb create | show | delete: Introduce commands for Azure HorizonDB#9840Conversation
|
Validation for Breaking Change Starting...
Thanks for your contribution! |
|
Hi @nasc17, |
|
Advised by @necusjz to close Azure/azure-cli#33281 and restart within extensions repo. |
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds a new Azure CLI extension module (horizondb) for public preview, including a vendored management SDK and initial CLI commands to manage HorizonDB clusters.
Changes:
- Introduces
az horizondb create | show | deletecommand group wiring, params, help, and scenario tests. - Adds a vendored (generated) HorizonDB management SDK (sync + async clients, models, ops, serialization utils).
- Adds extension packaging scaffolding (
setup.py,setup.cfg, metadata, docs/history).
Reviewed changes
Copilot reviewed 43 out of 45 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| src/horizondb/setup.py | Extension packaging metadata and wheel hook wiring. |
| src/horizondb/setup.cfg | Wheel build configuration. |
| src/horizondb/linter_exclusions.yml | Linter exclusions scaffold for the extension. |
| src/horizondb/README.md | Extension readme with install and command list. |
| src/horizondb/HISTORY.rst | Initial release notes. |
| src/horizondb/azext_horizondb/azext_metadata.json | Declares minimum CLI core version for the extension. |
| src/horizondb/azext_horizondb/init.py | Registers the command loader, help, and argument context. |
| src/horizondb/azext_horizondb/_help.py | Help entries and examples for horizondb commands. |
| src/horizondb/azext_horizondb/_params.py | CLI argument definitions for create/delete/show. |
| src/horizondb/azext_horizondb/_client_factory.py | Creates mgmt client + overrides for testing. |
| src/horizondb/azext_horizondb/cluster_commands.py | Command table wiring for horizondb group. |
| src/horizondb/azext_horizondb/commands/custom_commands.py | Custom implementations for create/delete/list. |
| src/horizondb/azext_horizondb/utils/_context.py | Custom AzArgumentContext behavior for validator composition. |
| src/horizondb/azext_horizondb/utils/validators.py | Password prompting and combined validator logic. |
| src/horizondb/azext_horizondb/utils/_transformers.py | Table transformers for command output. |
| src/horizondb/azext_horizondb/tests/latest/test_horizondb_commands.py | Scenario test for create/show/delete. |
| src/horizondb/azext_horizondb/tests/latest/constants.py | Scenario test constants. |
| src/horizondb/azext_horizondb/tests/init.py | Test package init. |
| src/horizondb/azext_horizondb/tests/latest/init.py | Latest test package init. |
| src/horizondb/azext_horizondb/utils/init.py | Utils package init. |
| src/horizondb/azext_horizondb/commands/init.py | Commands package init. |
| src/horizondb/azext_horizondb/vendored_sdks/init.py | Vendored SDK package entrypoint. |
| src/horizondb/azext_horizondb/vendored_sdks/_client.py | Generated synchronous mgmt client. |
| src/horizondb/azext_horizondb/vendored_sdks/_configuration.py | Generated sync configuration. |
| src/horizondb/azext_horizondb/vendored_sdks/_patch.py | Generated patch hook placeholder. |
| src/horizondb/azext_horizondb/vendored_sdks/_version.py | Generated SDK version constant. |
| src/horizondb/azext_horizondb/vendored_sdks/aio/init.py | Vendored async SDK package entrypoint. |
| src/horizondb/azext_horizondb/vendored_sdks/aio/_client.py | Generated asynchronous mgmt client. |
| src/horizondb/azext_horizondb/vendored_sdks/aio/_configuration.py | Generated async configuration. |
| src/horizondb/azext_horizondb/vendored_sdks/aio/_patch.py | Generated async patch hook placeholder. |
| src/horizondb/azext_horizondb/vendored_sdks/aio/operations/init.py | Generated async operations exports. |
| src/horizondb/azext_horizondb/vendored_sdks/aio/operations/_patch.py | Generated async operations patch hook placeholder. |
| src/horizondb/azext_horizondb/vendored_sdks/operations/init.py | Generated sync operations exports. |
| src/horizondb/azext_horizondb/vendored_sdks/operations/_patch.py | Generated sync operations patch hook placeholder. |
| src/horizondb/azext_horizondb/vendored_sdks/models/init.py | Generated models exports and patch hook. |
| src/horizondb/azext_horizondb/vendored_sdks/models/_models.py | Generated REST models for HorizonDB RP. |
| src/horizondb/azext_horizondb/vendored_sdks/models/_enums.py | Generated enums used by models/ops. |
| src/horizondb/azext_horizondb/vendored_sdks/models/_patch.py | Generated models patch hook placeholder. |
| src/horizondb/azext_horizondb/vendored_sdks/_utils/init.py | Vendored SDK utils package init. |
| src/horizondb/azext_horizondb/vendored_sdks/_utils/model_base.py | Generated model base + rest_field serialization logic. |
| src/horizondb/azext_horizondb/vendored_sdks/_utils/serialization.py | Generated serializer/deserializer utilities. |
| src/horizondb/azext_horizondb/vendored_sdks/py.typed | PEP 561 marker for typing support. |
Comments suppressed due to low confidence (2)
src/horizondb/setup.cfg:1
universal=1declares a “universal” (py2/py3) wheel, but the extension is clearly Python 3-only (and Azure CLI itself is Python 3-only). Setuniversal=0(or remove this section) to avoid misleading wheel metadata.
src/horizondb/setup.py:1cmdclassis imported but never passed intosetup(...), so the bdist wheel hook won’t actually be applied even whenazure_bdist_wheelis available. Passcmdclass=cmdclassintosetup(...)when the import succeeds, or remove the import/try-except if the hook is not needed.
| if not arg: # when the argument context scope is N/A | ||
| return | ||
|
|
||
| self.validators.append(arg.settings['validator']) |
There was a problem hiding this comment.
arg.settings['validator'] can be None (or missing), which will later be invoked in get_combined_validator and fail at runtime (TypeError: 'NoneType' object is not callable). Filter out non-callables when collecting validators (e.g., only append if callable(...)), and consider using arg.settings.get('validator') to avoid a KeyError.
| self.validators.append(arg.settings['validator']) | |
| validator = arg.settings.get('validator') | |
| if callable(validator): | |
| self.validators.append(validator) |
|
Thank you for your contribution! We will review the pull request and get back to you soon. |
|
The git hooks are available for azure-cli and azure-cli-extensions repos. They could help you run required checks before creating the PR. Please sync the latest code with latest dev branch (for azure-cli) or main branch (for azure-cli-extensions). pip install azdev --upgrade
azdev setup -c <your azure-cli repo path> -r <your azure-cli-extensions repo path>
|
|
Co-authored-by: Copilot <copilot@github.com>
|
/azp run |
|
Azure Pipelines successfully started running 2 pipeline(s). |
Related command
az horizondb createaz horizondb showaz horizondb deleteDescription
Onboarding Horizon DB commands for public preview.
Azure/azure-cli#33267
Testing Guide
Manual
..\azure-cli-extensions\src\horizondb\azext_horizondb\tests\latest\test_horizondb_commands.py::HorizonDBClusterMgmtScenarioTest::test_horizondb_cluster_mgmt
[gw0] [100%] PASSED ..\azure-cli-extensions\src\horizondb\azext_horizondb\tests\latest\test_horizondb_commands.py::HorizonDBClusterMgmtScenarioTest::test_horizondb_cluster_mgmt
-------------------------------------- generated xml file: C:\Users\nasc.azdev\env_config\Users\nasc\azure-cli\env\test_results.xml --------------------------------------
=========================================================================== 1 passed in 11.46s
History Notes
[Component Name 1] BREAKING CHANGE:
az command a: Make some customer-facing breaking change[Component Name 2]
az command b: Add some customer-facing featureThis checklist is used to make sure that common guidelines for a pull request are followed.
The PR title and description has followed the guideline in Submitting Pull Requests.
I adhere to the Command Guidelines.
I adhere to the Error Handling Guidelines.