feat: Add appnet-preview extension for Azure Kubernetes Application Network resources#9652
Conversation
|
Validation for Breaking Change Starting...
Thanks for your contribution! |
|
Hi @german1608, |
|
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>
|
CodeGen Tools Feedback CollectionThank you for using our CodeGen tool. We value your feedback, and we would like to know how we can improve our product. Please take a few minutes to fill our codegen survey |
|
cad2736 to
09fa4c4
Compare
e96896b to
ae87ba1
Compare
There was a problem hiding this comment.
Pull request overview
Adds a new appnet-preview Azure CLI extension implementing az appnet and az appnet member command groups (preview) for managing Azure Kubernetes Application Network resources.
Changes:
- Adds new
appnet-previewextension package (AAZ-generated commands + minimal customizations). - Adds scenario tests & recordings for core
appnetandappnet memberflows. - Registers the
az appnetservice mapping entry.
Reviewed changes
Copilot reviewed 39 out of 41 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/service_name.json | Adds service mapping for az appnet. |
| src/appnet-preview/setup.py | Defines packaging metadata for the new extension. |
| src/appnet-preview/setup.cfg | Adds placeholder setup.cfg. |
| src/appnet-preview/azext_appnet_preview/tests/latest/test_appnet_preview.py | Adds scenario tests for appnet and appnet member. |
| src/appnet-preview/azext_appnet_preview/tests/latest/recordings/test_appnet_list_versions.yaml | Recording for appnet list-versions. |
| src/appnet-preview/azext_appnet_preview/tests/latest/recordings/test_appnet_list_no_resources.yaml | Recording for appnet list empty result. |
| src/appnet-preview/azext_appnet_preview/tests/latest/recordings/test_appnet_delete.yaml | Recording for appnet delete. |
| src/appnet-preview/azext_appnet_preview/tests/latest/recordings/test_appnet_create.yaml | Recording for appnet create + show. |
| src/appnet-preview/azext_appnet_preview/tests/latest/custom_preparers.py | Adds custom RG preparer for AKS scenarios. |
| src/appnet-preview/azext_appnet_preview/tests/latest/init.py | Test package init. |
| src/appnet-preview/azext_appnet_preview/tests/init.py | Test package init. |
| src/appnet-preview/azext_appnet_preview/custom.py | Adds pre-operation validation for member join args. |
| src/appnet-preview/azext_appnet_preview/commands.py | Overrides appnet member join with custom class. |
| src/appnet-preview/azext_appnet_preview/azext_metadata.json | Marks extension as preview + min CLI core version. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/member/_wait.py | Adds AAZ appnet member wait. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/member/_update.py | Adds AAZ appnet member update. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/member/_show.py | Adds AAZ appnet member show. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/member/_remove.py | Adds AAZ appnet member remove. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/member/_list.py | Adds AAZ appnet member list. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/member/_join.py | Adds AAZ appnet member join. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/member/init.py | Exposes member commands. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/member/__cmd_group.py | Registers appnet member command group. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/_wait.py | Adds AAZ appnet wait. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/_update.py | Adds AAZ appnet update. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/_show.py | Adds AAZ appnet show. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/_list_versions.py | Adds AAZ appnet list-versions. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/_list.py | Adds AAZ appnet list. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/_delete.py | Adds AAZ appnet delete. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/_create.py | Adds AAZ appnet create. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/init.py | Exposes appnet commands. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/appnet/__cmd_group.py | Registers appnet command group. |
| src/appnet-preview/azext_appnet_preview/aaz/latest/init.py | AAZ latest init. |
| src/appnet-preview/azext_appnet_preview/aaz/init.py | AAZ package init. |
| src/appnet-preview/azext_appnet_preview/_params.py | Extension arg loading hook (currently empty). |
| src/appnet-preview/azext_appnet_preview/_help.py | Extension help hook (currently empty). |
| src/appnet-preview/azext_appnet_preview/_format.py | Adds table transformers for list outputs. |
| src/appnet-preview/azext_appnet_preview/init.py | Extension command loader and transformer registration. |
| src/appnet-preview/README.md | Adds extension usage documentation. |
| src/appnet-preview/HISTORY.rst | Adds initial release history. |
Comments suppressed due to low confidence (3)
src/appnet-preview/azext_appnet_preview/tests/latest/test_appnet_preview.py:1
- The backslashes (
\) here are literal characters passed intoself.cmd(...)(this isn’t a shell), which can break parsing of the command and cause the test to fail. Build the command string without shell line-continuation characters (e.g., concatenate strings inside parentheses or use a single-line command).
src/service_name.json:1 - The new service mapping entry has an empty
URL. This file is typically used for command-to-docs mapping, so the URL should point to the relevant Learn documentation page (or omit the entry until a stable doc URL exists).
src/appnet-preview/setup.cfg:1 - This
setup.cfgdoesn’t define any configuration and is effectively a placeholder. It’s clearer to either remove it (if unused) or populate it with the intended setuptools/config (e.g., wheel/universal settings, lint config, etc.) to avoid confusion for maintainers.
| def load_command_table(self, _): # pylint: disable=unused-argument | ||
| from .custom import MemberJoin | ||
| with self.command_group('appnet member'): | ||
| self.command_table["appnet member join"] = MemberJoin(loader=self) |
There was a problem hiding this comment.
Manually assigning into self.command_table (especially inside a command_group context manager that isn’t used to register anything) is brittle and can bypass normal command registration behaviors (help, preview flags, command metadata). Prefer registering the custom command via the command group’s standard registration APIs (e.g., using the group object) or re-registering the subclass with AAZ’s registration mechanism so metadata remains consistent.
| 'kubernetesVersion': base_info['kubernetesVersion'], | ||
| 'mode': 'FullyManaged', | ||
| 'releaseChannel': channel.get('releaseChannel', 'N/A'), | ||
| 'version': channel.get('version', 'N/A'), |
There was a problem hiding this comment.
appnet_list_versions_table_format produces rows with different keys depending on mode (self-managed rows include availableUpgrades, fully-managed rows don’t). This can lead to inconsistent table columns/blank fields. Consider adding availableUpgrades (e.g., 'N/A') to the fully-managed rows so the output schema is consistent.
| 'version': channel.get('version', 'N/A'), | |
| 'version': channel.get('version', 'N/A'), | |
| 'availableUpgrades': 'N/A', |
| @@ -0,0 +1,54 @@ | |||
| # Azure CLI AppnetPreview Extension # | |||
There was a problem hiding this comment.
The README title uses AppnetPreview (camel-cased) while the extension name is appnet-preview. Consider aligning the README heading with the published extension name to reduce confusion (e.g., “Azure CLI appnet-preview Extension”).
| # Azure CLI AppnetPreview Extension # | |
| # Azure CLI appnet-preview Extension # |
|
[Release] Update index.json for extension [ appnet-preview-1.0.0b1 ] : https://dev.azure.com/msazure/One/_build/results?buildId=155664561&view=results |
This checklist is used to make sure that common guidelines for a pull request are followed.
Related command
Adds
az appnetcommands:...and
az appnet membergroup:General Guidelines
azdev style <YOUR_EXT>locally? (pip install azdevrequired)python scripts/ci/test_index.py -qlocally? (pip install wheel==0.30.0required)For new extensions:
About Extension Publish
There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update
src/index.jsonautomatically.You only need to update the version information in file setup.py and historical information in file HISTORY.rst in your PR but do not modify
src/index.json.