-
Notifications
You must be signed in to change notification settings - Fork 3.3k
[App Service] az appservice plan: Add features for managed instance app service plans
#32344
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[App Service] az appservice plan: Add features for managed instance app service plans
#32344
Conversation
️✔️AzureCLI-FullTest
|
|
| rule | cmd_name | rule_message | suggest_message |
|---|---|---|---|
| appservice plan | sub group appservice plan updated property sub_groups from {} to {'appservice plan managed-instance': {'name': 'appservice plan managed-instance', 'commands': {}, 'sub_groups': {'appservice plan managed-instance instance': {'name': 'appservice plan managed-instance instance', 'commands': {'appservice plan managed-instance instance list': {'name': 'appservice plan managed-instance instance list', 'is_aaz': True, 'parameters': [{'name': 'name', 'options': ['--name'], 'required': True, 'aaz_type': 'string', 'type': 'string'}, {'name': 'resource_group', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True, 'aaz_type': 'string', 'type': 'string'}]}, 'appservice plan managed-instance instance connect': {'name': 'appservice plan managed-instance instance connect', 'is_aaz': True, 'is_preview': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'instance_name', 'options': ['--instance-name'], 'required': True}, {'name': 'bastion_name', 'options': ['--bastion-name'], 'required': True}, {'name': 'bastion_resource_group_name', 'options': ['--bastion-resource-group']}]}, 'appservice plan managed-instance instance recycle': {'name': 'appservice plan managed-instance instance recycle', 'is_aaz': True, 'is_preview': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'instance_name', 'options': ['--instance-name'], 'required': True}]}}, 'sub_groups': {}}, 'appservice plan managed-instance install-script': {'name': 'appservice plan managed-instance install-script', 'commands': {'appservice plan managed-instance install-script list': {'name': 'appservice plan managed-instance install-script list', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'has_completer': True}]}, 'appservice plan managed-instance install-script add': {'name': 'appservice plan managed-instance install-script add', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'install_script_name', 'options': ['--install-script-name'], 'required': True}, {'name': 'source_uri', 'options': ['--source-uri'], 'required': True}, {'name': 'install_script_type', 'options': ['--type'], 'required': True, 'choices': ['PlatformStorage', 'RemoteAzureBlob']}]}, 'appservice plan managed-instance install-script remove': {'name': 'appservice plan managed-instance install-script remove', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'install_script_name', 'options': ['--install-script-name'], 'required': True}]}}, 'sub_groups': {}}, 'appservice plan managed-instance storage-mount': {'name': 'appservice plan managed-instance storage-mount', 'commands': {'appservice plan managed-instance storage-mount list': {'name': 'appservice plan managed-instance storage-mount list', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'has_completer': True}]}, 'appservice plan managed-instance storage-mount add': {'name': 'appservice plan managed-instance storage-mount add', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'mount_name', 'options': ['--mount-name'], 'required': True}, {'name': 'mount_type', 'options': ['--type'], 'required': True, 'choices': ['AzureFiles', 'FileShare', 'LocalStorage']}, {'name': 'destination_path', 'options': ['--destination-path'], 'required': True}, {'name': 'source', 'options': ['--source']}, {'name': 'credentials_secret_uri', 'options': ['--credentials-secret-uri']}]}, 'appservice plan managed-instance storage-mount remove': {'name': 'appservice plan managed-instance storage-mount remove', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'mount_name', 'options': ['--mount-name'], 'required': True}]}}, 'sub_groups': {}}, 'appservice plan managed-instance registry-adapter': {'name': 'appservice plan managed-instance registry-adapter', 'commands': {'appservice plan managed-instance registry-adapter list': {'name': 'appservice plan managed-instance registry-adapter list', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'has_completer': True}]}, 'appservice plan managed-instance registry-adapter add': {'name': 'appservice plan managed-instance registry-adapter add', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'registry_key', 'options': ['--registry-key'], 'required': True}, {'name': 'adapter_type', 'options': ['--type'], 'required': True, 'choices': ['Binary', 'DWord', 'Expand_String', 'Multi_String', 'QWord', 'String']}, {'name': 'secret_uri', 'options': ['--secret-uri'], 'required': True}]}, 'appservice plan managed-instance registry-adapter remove': {'name': 'appservice plan managed-instance registry-adapter remove', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'registry_key', 'options': ['--registry-key'], 'required': True}]}}, 'sub_groups': {}}, 'appservice plan managed-instance network': {'name': 'appservice plan managed-instance network', 'commands': {'appservice plan managed-instance network show': {'name': 'appservice plan managed-instance network show', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}]}, 'appservice plan managed-instance network add': {'name': 'appservice plan managed-instance network add', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'vnet', 'options': ['--vnet']}, {'name': 'subnet', 'options': ['--subnet']}]}, 'appservice plan managed-instance network remove': {'name': 'appservice plan managed-instance network remove', 'is_aaz': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}]}}, 'sub_groups': {}}}}, 'appservice plan identity': {'name': 'appservice plan identity', 'commands': {'appservice plan identity show': {'name': 'appservice plan identity show', 'is_aaz': True, 'is_preview': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}]}, 'appservice plan identity assign': {'name': 'appservice plan identity assign', 'is_aaz': True, 'is_preview': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'system_assigned', 'options': ['--system-assigned']}, {'name': 'user_assigned', 'options': ['--user-assigned'], 'nargs': '+'}]}, 'appservice plan identity remove': {'name': 'appservice plan identity remove', 'is_aaz': True, 'is_preview': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'system_assigned', 'options': ['--system-assigned']}, {'name': 'user_assigned', 'options': ['--user-assigned'], 'nargs': '*'}]}, 'appservice plan identity set-default': {'name': 'appservice plan identity set-default', 'is_aaz': True, 'is_preview': True, 'parameters': [{'name': 'resource_group_name', 'options': ['--resource-group', '-g'], 'required': True, 'id_part': 'resource_group', 'has_completer': True}, {'name': 'name', 'options': ['--name', '-n'], 'required': True, 'id_part': 'name', 'has_completer': True}, {'name': 'identity', 'options': ['--identity']}]}}, 'sub_groups': {}}} |
||
| appservice plan create | cmd appservice plan create added parameter default_identity |
||
| appservice plan create | cmd appservice plan create added parameter install_scripts |
||
| appservice plan create | cmd appservice plan create added parameter is_managed_instance |
||
| appservice plan create | cmd appservice plan create added parameter mi_system_assigned |
||
| appservice plan create | cmd appservice plan create added parameter mi_user_assigned |
||
| appservice plan create | cmd appservice plan create added parameter rdp_enabled |
||
| appservice plan create | cmd appservice plan create added parameter registry_adapters |
||
| appservice plan create | cmd appservice plan create added parameter storage_mounts |
||
| appservice plan create | cmd appservice plan create added parameter subnet |
||
| appservice plan create | cmd appservice plan create added parameter vnet |
||
| appservice plan update | cmd appservice plan update added parameter default_identity |
||
| appservice plan update | cmd appservice plan update added parameter install_scripts |
||
| appservice plan update | cmd appservice plan update added parameter rdp_enabled |
||
| appservice plan update | cmd appservice plan update added parameter registry_adapters |
||
| appservice plan update | cmd appservice plan update added parameter storage_mounts |
||
| appservice plan update | cmd appservice plan update added parameter subnet |
||
| appservice plan update | cmd appservice plan update added parameter vnet |
|
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>
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds comprehensive support for managed instance App Service plans, introducing new commands and functionality to manage custom mode App Service plans with additional configuration options.
- Introduces managed instance App Service plan support with RDP, identity, and network integration capabilities
- Adds new command groups for managing install scripts, storage mounts, registry adapters, and network configurations
- Implements identity management operations (assign, remove, show, set-default) for App Service plans
- Includes extensive test coverage with 720 lines of new test cases
Reviewed Changes
Copilot reviewed 24 out of 24 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| test_appservice_plan_managedinstance_commands.py | Comprehensive test suite covering all managed instance functionality |
| custom.py | Core implementation of managed instance operations and plan creation logic |
| commands.py | Command registration for new managed instance command groups |
| actions.py | New action classes for parsing complex argument structures |
| _params.py | Parameter definitions for managed instance commands |
| _help.py | Help documentation for new command groups |
| aaz/latest/appservice/plan/* | Auto-generated AAZ command implementations |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
906645a to
e4c05b2
Compare
|
/azp run |
|
Commenter does not have sufficient privileges for PR 32344 in repo Azure/azure-cli |
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
…ate create/update param descriptions
…/ storage mount / install script
This reverts commit 29fdec0.
… a couple flaky live tests
23b61e6 to
fccd2be
Compare
src/azure-cli/azure/cli/command_modules/appservice/aaz/latest/appservice/plan/_create.py
Show resolved
Hide resolved
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
Related command
az appservice plan create/updateaz appservice plan identity assign/remove/list/set-defaultaz appservice plan managed-instance install-script list/add/removeaz appservice plan managed-instance storage-mount list/add/removeaz appservice plan managed-instance registry-adapter list/add/removeaz appservice plan managed-instance network show/add/removeaz appservice plan managed-instance instance list/recycle/connectDescription
Managed Instances on App Service is a special kind of App Service Plan (Microsoft.Web/serverFarms) resource. It is characterized by setting the property
isCustomMode: true.These types of app service plan support several new features, including:
Testing Guide
Description and examples of these commands can be found in
src/azure-cli/azure/cli/command_modules/appservice/_help.py.Specifically for
az appservice plan createchanges:az appservice plan create -n MyAppServicePlan -g MyResourceGroup --number-of-workers 1 --sku P1V4 --location eastus2euap --is-managed-instance --mi-system-assigned --mi-user-assigned "<my MI resource id>" --default-identity "[system]" --rdp-enabled --subnet MySubnetResourceId --registry-adapter registry-key="HKEY_LOCAL_MACHINE/Software/App1/Key1" type="String" secret-uri="https://myvault.vault.azure.net/secrets/mysecret/myversion" --install-script name="Script1" source-uri="https://mystorageaccount.blob.core.windows.net/scripts/script1.ps1" --storage-mount mount-name="Mount1" source="\\mystorageaccount.file.core.windows.net\share1" destination-path="D:\mount1" secret-uri=https://myvault.vault.azure.net/secrets/mystoragemountsecret/myversionThis creates an Managed Instance App Service plan using flag
--is-managed-instance. It:--mi-system-assignedand user assigned identity through--mi-user-assigned--default-identity-rdp-enabled--subnet--registry-adapter--install-script--storage-mountTested all other commands as well in private test subscription and created integration tests with coverage across all new commands and arguments. Verified and re-recorded tests as necessary with
azdev test appservice.This 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.