diff --git a/src/acrtransfer/HISTORY.rst b/src/acrtransfer/HISTORY.rst index 530658b9421..29ad3e4ae6e 100644 --- a/src/acrtransfer/HISTORY.rst +++ b/src/acrtransfer/HISTORY.rst @@ -2,6 +2,10 @@ Release History =============== +1.1.1b1 ++++++++ +* Add: Breaking change announcement for new required parameter --storage-access-mode for acr export-pipeline create and acr import-pipeline create commands. + 1.1.0 ++++++ * Add: New command acr pipeline-run clean - Bulk deletes failed pipeline-runs. diff --git a/src/acrtransfer/azext_acrtransfer/__init__.py b/src/acrtransfer/azext_acrtransfer/__init__.py index 3b38e4b61e2..813e12296ec 100644 --- a/src/acrtransfer/azext_acrtransfer/__init__.py +++ b/src/acrtransfer/azext_acrtransfer/__init__.py @@ -5,6 +5,7 @@ from azure.cli.core import AzCommandsLoader from azext_acrtransfer._help import helps # pylint: disable=unused-import +import azext_acrtransfer._breaking_change # pylint: disable=unused-import class AcrtransferCommandsLoader(AzCommandsLoader): diff --git a/src/acrtransfer/azext_acrtransfer/_breaking_change.py b/src/acrtransfer/azext_acrtransfer/_breaking_change.py new file mode 100644 index 00000000000..4513e7c996f --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/_breaking_change.py @@ -0,0 +1,17 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +from azure.cli.core.breaking_change import register_logic_breaking_change + +register_logic_breaking_change('acr export-pipeline create', 'Add required parameter --storage-access-mode', + detail='A new required parameter `--storage-access-mode` will be added. ' + 'Allowed values: `entra-mi-auth`, `storage-sas-token`.', + doc_link="https://aka.ms/acr/transfer") + + +register_logic_breaking_change('acr import-pipeline create', 'Add required parameter --storage-access-mode', + detail='A new required parameter `--storage-access-mode` will be added. ' + 'Allowed values: `entra-mi-auth`, `storage-sas-token`.', + doc_link="https://aka.ms/acr/transfer") diff --git a/src/acrtransfer/azext_acrtransfer/_client_factory.py b/src/acrtransfer/azext_acrtransfer/_client_factory.py index dd3bd91f456..839b3bf3d44 100644 --- a/src/acrtransfer/azext_acrtransfer/_client_factory.py +++ b/src/acrtransfer/azext_acrtransfer/_client_factory.py @@ -7,5 +7,5 @@ def cf_acrtransfer(cli_ctx, *_): from azure.cli.core.commands.client_factory import get_mgmt_service_client - from azext_acrtransfer.vendored_sdks.containerregistry.v2019_12_01_preview._container_registry_management_client import ContainerRegistryManagementClient + from azext_acrtransfer.vendored_sdks.containerregistry.v2025_06_01_preview._container_registry_management_client import ContainerRegistryManagementClient return get_mgmt_service_client(cli_ctx, ContainerRegistryManagementClient) diff --git a/src/acrtransfer/azext_acrtransfer/_help.py b/src/acrtransfer/azext_acrtransfer/_help.py index fd343595ab6..8531a52842c 100644 --- a/src/acrtransfer/azext_acrtransfer/_help.py +++ b/src/acrtransfer/azext_acrtransfer/_help.py @@ -26,10 +26,14 @@ type: command short-summary: Create an import pipeline. examples: - - name: Create an import pipeline. - text: az acr import-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer - - name: Create an import pipeline with a user-assigned identity, all available options, and source trigger disabled. - text: az acr import-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer --options DeleteSourceBlobOnSuccess OverwriteTags ContinueOnErrors --assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity --source-trigger-enabled False + - name: Create an import pipeline with SAS token authentication. + text: az acr import-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --storage-access-mode storage-sas-token --secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer + - name: Create an import pipeline with system-assigned managed identity (automatic provisioning). + text: az acr import-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --storage-access-mode entra-mi-auth --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer + - name: Create an import pipeline with explicit system-assigned managed identity. + text: az acr import-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --storage-access-mode entra-mi-auth --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer --assign-identity [system] + - name: Create an import pipeline with user-assigned managed identity and all available options. + text: az acr import-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --storage-access-mode entra-mi-auth --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer --options DeleteSourceBlobOnSuccess OverwriteTags ContinueOnErrors --assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity --source-trigger-enabled False """ helps['acr import-pipeline list'] = """ @@ -60,10 +64,14 @@ type: command short-summary: Create an export pipeline. examples: - - name: Create an export pipeline. - text: az acr export-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer - - name: Create an export pipeline with a user-assigned identity and all available options. - text: az acr export-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer --options OverwriteBlobs ContinueOnErrors --assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity + - name: Create an export pipeline with SAS token authentication. + text: az acr export-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --storage-access-mode storage-sas-token --secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer + - name: Create an export pipeline with system-assigned managed identity (automatic provisioning). + text: az acr export-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --storage-access-mode entra-mi-auth --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer + - name: Create an export pipeline with explicit system-assigned managed identity. + text: az acr export-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --storage-access-mode entra-mi-auth --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer --assign-identity [system] + - name: Create an export pipeline with user-assigned managed identity and all available options. + text: az acr export-pipeline create --resource-group $MyRG --registry $MyReg --name $MyPipeline --storage-access-mode entra-mi-auth --storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer --options OverwriteBlobs ContinueOnErrors --assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity """ helps['acr export-pipeline list'] = """ diff --git a/src/acrtransfer/azext_acrtransfer/_params.py b/src/acrtransfer/azext_acrtransfer/_params.py index 69fef318aa1..366c4f63a2b 100644 --- a/src/acrtransfer/azext_acrtransfer/_params.py +++ b/src/acrtransfer/azext_acrtransfer/_params.py @@ -4,7 +4,7 @@ # -------------------------------------------------------------------------------------------- # pylint: disable=line-too-long -from ._validators import validate_export_options, validate_import_options, validate_keyvault_secret_uri, validate_pipeline_type, validate_storage_account_container_uri, validate_user_assigned_identity_resource_id, validate_top +from ._validators import validate_export_options, validate_import_options, validate_keyvault_secret_uri, validate_pipeline_type, validate_storage_access_mode_and_secret_uri, validate_storage_account_container_uri, validate_user_assigned_identity_resource_id, validate_top def load_arguments(self, _): @@ -16,8 +16,9 @@ def load_arguments(self, _): c.argument('location', validator=get_default_location_from_resource_group) c.argument('registry_name', options_list=['--registry', '-r'], help='Name of registry.') c.argument('storage_account_container_uri', options_list=['--storage-container-uri', '-c'], validator=validate_storage_account_container_uri, help='Storage account container URI of the source or target storage account container of the form https://$MyStorageAccount.blob.core.windows.net/$MyContainer. Note that the URI may be different outside of AzureCloud.') - c.argument('keyvault_secret_uri', options_list=['--secret-uri', '-s'], validator=validate_keyvault_secret_uri, help='Keyvault secret URI containing a valid SAS token to the associated storage account of the form https://$MyKeyvault.vault.azure.net/secrets/$MySecret. Note that the URI may be different outside of AzureCloud.') - c.argument('user_assigned_identity_resource_id', options_list=['--assign-identity', '-i'], validator=validate_user_assigned_identity_resource_id, help='User assigned identity resource ID of the form /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity.') + c.argument('storage_access_mode', options_list=['--storage-access-mode', '-m'], validator=validate_storage_access_mode_and_secret_uri, help='Storage account access mode. Allowed values: entra-mi-auth, storage-sas-token. When using entra-mi-auth, a managed identity is required (use --assign-identity).') + c.argument('keyvault_secret_uri', options_list=['--secret-uri', '-s'], validator=validate_keyvault_secret_uri, help='Keyvault secret URI containing a valid SAS token to the associated storage account of the form https://$MyKeyvault.vault.azure.net/secrets/$MySecret. Note that the URI may be different outside of AzureCloud. Required when --storage-access-mode is storage-sas-token.') + c.argument('user_assigned_identity_resource_id', options_list=['--assign-identity', '-i'], validator=validate_user_assigned_identity_resource_id, help='Managed identity for the pipeline. Provide a user-assigned identity resource ID of the form /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity, or use [system] to provision a system-assigned identity. When using --storage-access-mode entra-mi-auth, if not specified or if [system] is used, a system-assigned managed identity will be automatically provisioned.') with self.argument_context('acr import-pipeline') as c: c.argument('options', options_list=['--options', '-z'], nargs='+', validator=validate_import_options, help='Space-separated list of options. May only contain the following options: DeleteSourceBlobOnSuccess,OverwriteTags,ContinueOnErrors,DisableSourceTrigger.') diff --git a/src/acrtransfer/azext_acrtransfer/_validators.py b/src/acrtransfer/azext_acrtransfer/_validators.py index bd3ccbee6c5..bf3253f2613 100644 --- a/src/acrtransfer/azext_acrtransfer/_validators.py +++ b/src/acrtransfer/azext_acrtransfer/_validators.py @@ -25,6 +25,9 @@ def validate_keyvault_secret_uri(namespace): uri = namespace.keyvault_secret_uri valid = True + if uri is None: + return + if "https://" not in uri or "/secrets/" not in uri: valid = False @@ -32,6 +35,28 @@ def validate_keyvault_secret_uri(namespace): logger.warning("Invalid keyvault secret URI. Please provide a keyvault secret URI of the form https://$MyKeyvault.vault.azure.net/secrets/$MySecret. Note - The exact URI form may be different outside of AzureCloud.") +def validate_storage_access_mode_and_secret_uri(namespace): + storage_access_mode = namespace.storage_access_mode + secret_uri = namespace.keyvault_secret_uri + + allowed_modes = ["entra-mi-auth", "storage-sas-token"] + + if storage_access_mode not in allowed_modes: + raise InvalidArgumentValueError(f"Invalid storage access mode '{storage_access_mode}'. Allowed values: {', '.join(allowed_modes)}") + + # Convert CLI values to API values + if storage_access_mode == "entra-mi-auth": + namespace.storage_access_mode = "ManagedIdentity" + # Reject secret-uri when using Managed Identity mode + if secret_uri is not None: + raise InvalidArgumentValueError("The '--secret-uri' flag cannot be supplied when 'entra-mi-auth' is chosen for the flag '--storage-access-mode'.") + elif storage_access_mode == "storage-sas-token": + namespace.storage_access_mode = "SasToken" + # Require secret-uri when using SasToken mode + if secret_uri is None: + raise InvalidArgumentValueError("--secret-uri is required when --storage-access-mode is storage-sas-token") + + def validate_user_assigned_identity_resource_id(namespace): identity_id = namespace.user_assigned_identity_resource_id valid = True @@ -39,11 +64,16 @@ def validate_user_assigned_identity_resource_id(namespace): if identity_id is None: return + # Handle [system] keyword for system-assigned identity + if identity_id.lower() == "[system]": + namespace.user_assigned_identity_resource_id = None + return + if "/providers/Microsoft.ManagedIdentity/userAssignedIdentities/" not in identity_id: valid = False if not valid: - logger.warning("Invalid user assigned identity resource ID. Please provide a user assigned identity resource ID of the form /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity.") + logger.warning("Invalid user assigned identity resource ID. Please provide a user assigned identity resource ID of the form /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity or use [system] for system-assigned identity.") def validate_import_options(namespace): diff --git a/src/acrtransfer/azext_acrtransfer/commands.py b/src/acrtransfer/azext_acrtransfer/commands.py index 48ddbbbb7e6..e5d931bfef0 100644 --- a/src/acrtransfer/azext_acrtransfer/commands.py +++ b/src/acrtransfer/azext_acrtransfer/commands.py @@ -11,21 +11,21 @@ def load_command_table(self, _): importpipeline_sdk = CliCommandType( - operations_tmpl='azext_acrtransfer.vendored_sdks.containerregistry.v2019_12_01_preview.operations#ImportPipelinesOperations.{}', + operations_tmpl='azext_acrtransfer.vendored_sdks.containerregistry.v2025_06_01_preview.operations#ImportPipelinesOperations.{}', client_factory=cf_acrtransfer, - min_api='2019-12-01-preview' + min_api='2025-06-01-preview' ) exportpipeline_sdk = CliCommandType( - operations_tmpl='azext_acrtransfer.vendored_sdks.containerregistry.v2019_12_01_preview.operations#ExportPipelinesOperations.{}', + operations_tmpl='azext_acrtransfer.vendored_sdks.containerregistry.v2025_06_01_preview.operations#ExportPipelinesOperations.{}', client_factory=cf_acrtransfer, - min_api='2019-12-01-preview' + min_api='2025-06-01-preview' ) pipelinerun_sdk = CliCommandType( - operations_tmpl='azext_acrtransfer.vendored_sdks.containerregistry.v2019_12_01_preview.operations#PipelineRunsOperations.{}', + operations_tmpl='azext_acrtransfer.vendored_sdks.containerregistry.v2025_06_01_preview.operations#PipelineRunsOperations.{}', client_factory=cf_acrtransfer, - min_api='2019-12-01-preview' + min_api='2025-06-01-preview' ) with self.command_group('acr import-pipeline', importpipeline_sdk, table_transformer=import_pipeline_output_format, is_preview=True) as g: diff --git a/src/acrtransfer/azext_acrtransfer/exportpipeline.py b/src/acrtransfer/azext_acrtransfer/exportpipeline.py index 6047d832efb..21301b3e158 100644 --- a/src/acrtransfer/azext_acrtransfer/exportpipeline.py +++ b/src/acrtransfer/azext_acrtransfer/exportpipeline.py @@ -5,19 +5,77 @@ # pylint: disable=line-too-long from azure.cli.core.azclierror import ResourceNotFoundError -from .vendored_sdks.containerregistry.v2019_12_01_preview.models._models_py3 import ExportPipeline, ExportPipelineTargetProperties -from .vendored_sdks.containerregistry.v2019_12_01_preview.models._container_registry_management_client_enums import PipelineSourceType +from knack.log import get_logger +from .vendored_sdks.containerregistry.v2025_06_01_preview.models._models_py3 import ExportPipeline, ExportPipelineTargetProperties +from .vendored_sdks.containerregistry.v2025_06_01_preview.models._container_registry_management_client_enums import PipelineSourceType from .utility_functions import create_identity_properties +logger = get_logger(__name__) -def create_exportpipeline(client, resource_group_name, registry_name, export_pipeline_name, keyvault_secret_uri, storage_account_container_uri, options=None, user_assigned_identity_resource_id=None): + +def _extract_storage_account_resource_id(subscription_id, resource_group_name, container_uri): + """Extract storage account resource ID from container URI. + Expected format: https://.blob.core.windows.net/ + """ + try: + # Parse the URI to get storage account name + from urllib.parse import urlparse + parsed = urlparse(container_uri) + storage_account_name = parsed.hostname.split('.')[0] + return f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}" + except Exception: + return "" + + +def _extract_keyvault_resource_id(subscription_id, resource_group_name, keyvault_secret_uri): + """Extract key vault resource ID from secret URI. + Expected format: https://.vault.azure.net/secrets/ + """ + try: + from urllib.parse import urlparse + parsed = urlparse(keyvault_secret_uri) + keyvault_name = parsed.hostname.split('.')[0] + return f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.KeyVault/vaults/{keyvault_name}" + except Exception: + return "" + + +def _display_permission_guidance(pipeline_type, storage_access_mode, principal_id, subscription_id, resource_group_name, container_uri, keyvault_secret_uri=None): + """Display permission guidance for the managed identity.""" + storage_resource_id = _extract_storage_account_resource_id(subscription_id, resource_group_name, container_uri) + + if storage_access_mode == 'ManagedIdentity': + # For export pipeline, need write access (Contributor) + # For import pipeline, need read access (Reader) + role = "Storage Blob Data Contributor" if pipeline_type == "export" else "Storage Blob Data Reader" + + logger.warning("") + logger.warning("Please ensure that the Managed Identity of the pipeline (Object ID: %s) has the necessary permissions to access the Storage Account Blob Container.", principal_id) + logger.warning("Please run:") + logger.warning(" az role assignment create --assignee \"%s\" --role \"%s\" --scope \"%s\"", principal_id, role, storage_resource_id) + logger.warning("Note: If the Storage Account is in a different resource group, update the --scope parameter accordingly.") + logger.warning("") + elif storage_access_mode == 'SasToken' and keyvault_secret_uri: + keyvault_resource_id = _extract_keyvault_resource_id(subscription_id, resource_group_name, keyvault_secret_uri) + + logger.warning("") + logger.warning("Please ensure that the Managed Identity of the pipeline (Object ID: %s) has the necessary permissions to access the Key Vault Secret containing the Storage Account SAS Key.", principal_id) + logger.warning("Please run:") + logger.warning(" az role assignment create --assignee \"%s\" --role \"Key Vault Secrets User\" --scope \"%s\"", principal_id, keyvault_resource_id) + logger.warning("Note: If the Key Vault is in a different resource group, update the --scope parameter accordingly.") + logger.warning("") + + +def create_exportpipeline(client, resource_group_name, registry_name, export_pipeline_name, storage_account_container_uri, storage_access_mode, keyvault_secret_uri=None, options=None, user_assigned_identity_resource_id=None): '''Create an export pipeline.''' - keyvault_secret_uri = keyvault_secret_uri.lower() storage_account_container_uri = storage_account_container_uri.lower() + if keyvault_secret_uri: + keyvault_secret_uri = keyvault_secret_uri.lower() export_pipeline_target_type = PipelineSourceType.AZURE_STORAGE_BLOB_CONTAINER - export_pipeline_target_properties = ExportPipelineTargetProperties(key_vault_uri=keyvault_secret_uri, + export_pipeline_target_properties = ExportPipelineTargetProperties(storage_access_mode=storage_access_mode, + key_vault_uri=keyvault_secret_uri, uri=storage_account_container_uri, type=export_pipeline_target_type) @@ -31,9 +89,39 @@ def create_exportpipeline(client, resource_group_name, registry_name, export_pip export_pipeline_name=export_pipeline_name, export_pipeline_create_parameters=export_pipeline) - return client.export_pipelines.get(resource_group_name=resource_group_name, - registry_name=registry_name, - export_pipeline_name=export_pipeline_name) + result = client.export_pipelines.get(resource_group_name=resource_group_name, + registry_name=registry_name, + export_pipeline_name=export_pipeline_name) + + # Display permission guidance + if result.identity: + principal_id = None + # For system-assigned identity, principal_id is at the top level + if result.identity.principal_id: + principal_id = result.identity.principal_id + # For user-assigned identity, extract principal_id from userAssignedIdentities + elif result.identity.user_assigned_identities: + # Get the first (and typically only) user-assigned identity + for identity_resource_id, identity_info in result.identity.user_assigned_identities.items(): + if identity_info and identity_info.principal_id: + principal_id = identity_info.principal_id + break + + if principal_id: + from azure.cli.core.commands.client_factory import get_subscription_id + from azure.cli.core import get_default_cli + subscription_id = get_subscription_id(get_default_cli()) + _display_permission_guidance( + pipeline_type="export", + storage_access_mode=storage_access_mode, + principal_id=principal_id, + subscription_id=subscription_id, + resource_group_name=resource_group_name, + container_uri=storage_account_container_uri, + keyvault_secret_uri=keyvault_secret_uri + ) + + return result def get_exportpipeline(client, resource_group_name, registry_name, export_pipeline_name): diff --git a/src/acrtransfer/azext_acrtransfer/importpipeline.py b/src/acrtransfer/azext_acrtransfer/importpipeline.py index 85e01ee076d..7214239cc69 100644 --- a/src/acrtransfer/azext_acrtransfer/importpipeline.py +++ b/src/acrtransfer/azext_acrtransfer/importpipeline.py @@ -5,18 +5,77 @@ # pylint: disable=line-too-long from azure.cli.core.azclierror import ResourceNotFoundError -from .vendored_sdks.containerregistry.v2019_12_01_preview.models._models_py3 import ImportPipeline, ImportPipelineSourceProperties, PipelineTriggerProperties, PipelineSourceTriggerProperties +from knack.log import get_logger +from .vendored_sdks.containerregistry.v2025_06_01_preview.models._models_py3 import ImportPipeline, ImportPipelineSourceProperties, PipelineTriggerProperties, PipelineSourceTriggerProperties from .utility_functions import create_identity_properties +logger = get_logger(__name__) -def create_importpipeline(client, resource_group_name, registry_name, import_pipeline_name, keyvault_secret_uri, storage_account_container_uri, options=None, user_assigned_identity_resource_id=None, source_trigger_enabled=True): + +def _extract_storage_account_resource_id(subscription_id, resource_group_name, container_uri): + """Extract storage account resource ID from container URI. + Expected format: https://.blob.core.windows.net/ + """ + try: + # Parse the URI to get storage account name + from urllib.parse import urlparse + parsed = urlparse(container_uri) + storage_account_name = parsed.hostname.split('.')[0] + return f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.Storage/storageAccounts/{storage_account_name}" + except Exception: + return "" + + +def _extract_keyvault_resource_id(subscription_id, resource_group_name, keyvault_secret_uri): + """Extract key vault resource ID from secret URI. + Expected format: https://.vault.azure.net/secrets/ + """ + try: + from urllib.parse import urlparse + parsed = urlparse(keyvault_secret_uri) + keyvault_name = parsed.hostname.split('.')[0] + return f"/subscriptions/{subscription_id}/resourceGroups/{resource_group_name}/providers/Microsoft.KeyVault/vaults/{keyvault_name}" + except Exception: + return "" + + +def _display_permission_guidance(pipeline_type, storage_access_mode, principal_id, subscription_id, resource_group_name, container_uri, keyvault_secret_uri=None): + """Display permission guidance for the managed identity.""" + storage_resource_id = _extract_storage_account_resource_id(subscription_id, resource_group_name, container_uri) + + if storage_access_mode == 'ManagedIdentity': + # For export pipeline, need write access (Contributor) + # For import pipeline, need read access (Reader) + role = "Storage Blob Data Contributor" if pipeline_type == "export" else "Storage Blob Data Reader" + + logger.warning("") + logger.warning("Please ensure that the Managed Identity of the pipeline (Object ID: %s) has the necessary permissions to access the Storage Account Blob Container.", principal_id) + logger.warning("Please run:") + logger.warning(" az role assignment create --assignee \"%s\" --role \"%s\" --scope \"%s\"", principal_id, role, storage_resource_id) + logger.warning("Note: If the Storage Account is in a different resource group, update the --scope parameter accordingly.") + logger.warning("") + elif storage_access_mode == 'SasToken' and keyvault_secret_uri: + keyvault_resource_id = _extract_keyvault_resource_id(subscription_id, resource_group_name, keyvault_secret_uri) + + logger.warning("") + logger.warning("Please ensure that the Managed Identity of the pipeline (Object ID: %s) has the necessary permissions to access the Key Vault Secret containing the Storage Account SAS Key.", principal_id) + logger.warning("Please run:") + logger.warning(" az role assignment create --assignee \"%s\" --role \"Key Vault Secrets User\" --scope \"%s\"", principal_id, keyvault_resource_id) + logger.warning("Note: If the Key Vault is in a different resource group, update the --scope parameter accordingly.") + logger.warning("") + + +def create_importpipeline(client, resource_group_name, registry_name, import_pipeline_name, storage_account_container_uri, storage_access_mode, keyvault_secret_uri=None, options=None, user_assigned_identity_resource_id=None, source_trigger_enabled=True): '''Create an import pipeline.''' - keyvault_secret_uri = keyvault_secret_uri.lower() storage_account_container_uri = storage_account_container_uri.lower() + if keyvault_secret_uri: + keyvault_secret_uri = keyvault_secret_uri.lower() identity_properties = create_identity_properties(user_assigned_identity_resource_id) - import_pipeline_source_properties = ImportPipelineSourceProperties(key_vault_uri=keyvault_secret_uri, uri=storage_account_container_uri) + import_pipeline_source_properties = ImportPipelineSourceProperties(storage_access_mode=storage_access_mode, + key_vault_uri=keyvault_secret_uri, + uri=storage_account_container_uri) source_trigger_status = "Enabled" if source_trigger_enabled else "Disabled" pipeline_source_trigger_properties = PipelineSourceTriggerProperties(status=source_trigger_status) @@ -31,9 +90,39 @@ def create_importpipeline(client, resource_group_name, registry_name, import_pip import_pipeline_name=import_pipeline_name, import_pipeline_create_parameters=import_pipeline) - return client.import_pipelines.get(resource_group_name=resource_group_name, - registry_name=registry_name, - import_pipeline_name=import_pipeline_name) + result = client.import_pipelines.get(resource_group_name=resource_group_name, + registry_name=registry_name, + import_pipeline_name=import_pipeline_name) + + # Display permission guidance + if result.identity: + principal_id = None + # For system-assigned identity, principal_id is at the top level + if result.identity.principal_id: + principal_id = result.identity.principal_id + # For user-assigned identity, extract principal_id from userAssignedIdentities + elif result.identity.user_assigned_identities: + # Get the first (and typically only) user-assigned identity + for identity_resource_id, identity_info in result.identity.user_assigned_identities.items(): + if identity_info and identity_info.principal_id: + principal_id = identity_info.principal_id + break + + if principal_id: + from azure.cli.core.commands.client_factory import get_subscription_id + from azure.cli.core import get_default_cli + subscription_id = get_subscription_id(get_default_cli()) + _display_permission_guidance( + pipeline_type="import", + storage_access_mode=storage_access_mode, + principal_id=principal_id, + subscription_id=subscription_id, + resource_group_name=resource_group_name, + container_uri=storage_account_container_uri, + keyvault_secret_uri=keyvault_secret_uri + ) + + return result def get_importpipeline(client, resource_group_name, registry_name, import_pipeline_name): diff --git a/src/acrtransfer/azext_acrtransfer/pipelinerun.py b/src/acrtransfer/azext_acrtransfer/pipelinerun.py index 1f178dbb30e..ceb1776f976 100644 --- a/src/acrtransfer/azext_acrtransfer/pipelinerun.py +++ b/src/acrtransfer/azext_acrtransfer/pipelinerun.py @@ -7,7 +7,7 @@ import time from knack.log import get_logger from azure.cli.core.azclierror import ResourceNotFoundError, RequiredArgumentMissingError, ClientRequestError, AzureConnectionError, AzureResponseError, AzureInternalError -from .vendored_sdks.containerregistry.v2019_12_01_preview.models._models_py3 import PipelineRun, PipelineRunRequest, PipelineRunSourceProperties, PipelineRunTargetProperties +from .vendored_sdks.containerregistry.v2025_06_01_preview.models._models_py3 import PipelineRun, PipelineRunRequest, PipelineRunSourceProperties, PipelineRunTargetProperties logger = get_logger(__name__) @@ -23,6 +23,13 @@ def create_pipelinerun(client, resource_group_name, registry_name, pipeline_name except Exception as e: raise ResourceNotFoundError(f'Import pipeline {pipeline_name} not found on registry {registry_name} in the {resource_group_name} resource group.') from e + # Display authentication method + storage_access_mode = raw_result.source.storage_access_mode if raw_result.source else None + if storage_access_mode == 'ManagedIdentity': + logger.warning("Authenticating to Storage Account using Entra Managed Identity.") + elif storage_access_mode == 'SasToken': + logger.warning("Authenticating to Storage Account using Storage SAS Token.") + pipeline_resource_id = raw_result.id pipeline_run_source = PipelineRunSourceProperties(name=storage_blob_name) pipeline_run_request = PipelineRunRequest(pipeline_resource_id=pipeline_resource_id, source=pipeline_run_source) @@ -35,6 +42,13 @@ def create_pipelinerun(client, resource_group_name, registry_name, pipeline_name except Exception as e: raise ResourceNotFoundError(f'Export pipeline {pipeline_name} not found on registry {registry_name} in the {resource_group_name} resource group.') from e + # Display authentication method + storage_access_mode = raw_result.target.storage_access_mode if raw_result.target else None + if storage_access_mode == 'ManagedIdentity': + logger.warning("Authenticating to Storage Account using Entra Managed Identity.") + elif storage_access_mode == 'SasToken': + logger.warning("Authenticating to Storage Account using Storage SAS Token.") + pipeline_resource_id = raw_result.id if artifacts is None: raise RequiredArgumentMissingError("artifacts cannot be null for Export PipelineRuns. Please provide a space-separated list of container images to be exported in the form REPOSITORY:TAG or REPOSITORY@sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042.") @@ -59,9 +73,35 @@ def create_pipelinerun(client, resource_group_name, registry_name, pipeline_name def get_pipelinerun(client, resource_group_name, registry_name, pipeline_run_name): '''Get a pipeline run.''' - return client.pipeline_runs.get(resource_group_name=resource_group_name, - registry_name=registry_name, - pipeline_run_name=pipeline_run_name) + result = client.pipeline_runs.get(resource_group_name=resource_group_name, + registry_name=registry_name, + pipeline_run_name=pipeline_run_name) + + # Display authentication method used during pipeline run + if result.request and result.request.pipeline_resource_id: + try: + pipeline_resource_id = result.request.pipeline_resource_id + storage_access_mode = None + + # Parse resource ID and fetch pipeline based on type + if '/exportPipelines/' in pipeline_resource_id: + pipeline_name = pipeline_resource_id.split('/exportPipelines/')[-1] + pipeline = client.export_pipelines.get(resource_group_name, registry_name, pipeline_name) + storage_access_mode = pipeline.target.storage_access_mode if pipeline.target else None + elif '/importPipelines/' in pipeline_resource_id: + pipeline_name = pipeline_resource_id.split('/importPipelines/')[-1] + pipeline = client.import_pipelines.get(resource_group_name, registry_name, pipeline_name) + storage_access_mode = pipeline.source.storage_access_mode if pipeline.source else None + + # Display diagnostic messages + if storage_access_mode == 'ManagedIdentity': + logger.warning("Authenticating to Storage Account using Entra Managed Identity.") + elif storage_access_mode == 'SasToken': + logger.warning("Authenticating to Storage Account using Storage SAS Token.") + except Exception: + pass + + return result def delete_pipelinerun(client, resource_group_name, registry_name, pipeline_run_name): diff --git a/src/acrtransfer/azext_acrtransfer/tests/__init__ b/src/acrtransfer/azext_acrtransfer/tests/__init__.py similarity index 100% rename from src/acrtransfer/azext_acrtransfer/tests/__init__ rename to src/acrtransfer/azext_acrtransfer/tests/__init__.py diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/__init__ b/src/acrtransfer/azext_acrtransfer/tests/latest/__init__.py similarity index 100% rename from src/acrtransfer/azext_acrtransfer/tests/latest/__init__ rename to src/acrtransfer/azext_acrtransfer/tests/latest/__init__.py diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_no_identity.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_no_identity.yaml new file mode 100644 index 00000000000..fbdd4050938 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_no_identity.yaml @@ -0,0 +1,709 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_mi_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001","name":"cli_test_acr_transfer_export_mi_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_export_pipeline_entra_mi_auth_no_identity","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '437' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:42 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 76E5AB9915104738BF582DE2A4C65ACD Ref B: MWH011020809040 Ref C: 2026-01-20T15:49:42Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.5160047+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.5160047+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.5160047Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:55.6275127+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:55.6275546+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a1f78f8b-f617-11f0-bdc5-002248b6daac?api-version=2025-03-01-preview&t=639045209957816545&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=lSZPW5V8IjuwQa9yElPV2vrAooZjh3_B__hoyCy7ylUGOfNryjmUYJvwBH7_EaCXTsaCBqW1V8NOKbFqXKRwrNFwcBQ3bbZPG4YNP9N7G8nIh3ALTceGOcUG0h8wE56oa4tiem9ZLJRUl50Ux_E7OfGkb4lcm6Gt5BxuH9T_AbtuVld7JWLBd07K0hXx0WQQn3Xv7w_FD62n1BoV4tlIFxq6EKlP7NHTqylC8sf-v4qx9nI1NMe0dBni_qxYrky3L0VCUB37xCLR2EunAiCqQyCj4iqvL6l3Y95UToE-0MOSt_kg0uBgDiIS8okek5rvAa1NAadkei43UeRJNTftpg&h=zkzaMryzvuVi65RH_VBwEz5REy0C5R58JHn3gtoMJr8 + cache-control: + - no-cache + content-length: + - '1560' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:55 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/b1e5c93a-2825-412d-a79b-c64964829ba2 + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: 92D2215213554557B081458D6A9E1C23 Ref B: MWH011020808023 Ref C: 2026-01-20T15:49:43Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a1f78f8b-f617-11f0-bdc5-002248b6daac?api-version=2025-03-01-preview&t=639045209957816545&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=lSZPW5V8IjuwQa9yElPV2vrAooZjh3_B__hoyCy7ylUGOfNryjmUYJvwBH7_EaCXTsaCBqW1V8NOKbFqXKRwrNFwcBQ3bbZPG4YNP9N7G8nIh3ALTceGOcUG0h8wE56oa4tiem9ZLJRUl50Ux_E7OfGkb4lcm6Gt5BxuH9T_AbtuVld7JWLBd07K0hXx0WQQn3Xv7w_FD62n1BoV4tlIFxq6EKlP7NHTqylC8sf-v4qx9nI1NMe0dBni_qxYrky3L0VCUB37xCLR2EunAiCqQyCj4iqvL6l3Y95UToE-0MOSt_kg0uBgDiIS8okek5rvAa1NAadkei43UeRJNTftpg&h=zkzaMryzvuVi65RH_VBwEz5REy0C5R58JHn3gtoMJr8 + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a1f78f8b-f617-11f0-bdc5-002248b6daac?api-version=2025-03-01-preview&t=639045209964814486&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=YWxqEpDRQ8LjZLQI7fqWovLYME9w-1YKJqnLNj_l7taD5KaPrIJTMrwHeQJHHb8M--8U4XbznSKd65vewNsrL1Vizd3q0myOWz6DkUstFjlnTIFEGljUKUnpeIC8ZYsKKLbdfo2mUTr-J-fA3hv5RgNxypjcmz-8Luge-bR8bt0CH1EHHbvse4XZCUUT5jb2uY57oV1Ne_prcqHbj--yjwGVW-fZpOLw3jetRxiUu1m1Wi4ecYkBMlS10VoqPQyAys1bNCBVdx0RH-pohp5b6kOR6gY_O9sOPMiq5K7gFgmiEuUySuK7GBUUYJf2z4Y94uNjwUSDmL75l0rcPzKbEA&h=-drJMqc8QO7I4Kejr8NE18EYeYlN2bEygJQ4WfP8HwM + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:56 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/edc5626a-7246-4ccd-879d-3ac7d3fac50f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: FCD8DA4CA5D041F193ADCA68392DA8C1 Ref B: MWH011020808034 Ref C: 2026-01-20T15:49:56Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.5160047+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.5160047+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.5160047Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:55.6275127+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:55.6275546+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1561' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:56 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 144AADBCE2D047E695CA176440A3C729 Ref B: MWH011020806036 Ref C: 2026-01-20T15:49:56Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_v3pmgfh3mc56mxxogbhgdoreo3avnp5lbo3odxv4ss/providers/Microsoft.Storage/storageAccounts/acrtransfer2kf3pzn2hjkid","name":"acrtransfer2kf3pzn2hjkid","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4126611Z","key2":"2026-01-20T15:49:19.4126611Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.1782049Z","primaryEndpoints":{"dfs":"https://acrtransfer2kf3pzn2hjkid.dfs.core.windows.net/","web":"https://acrtransfer2kf3pzn2hjkid.z22.web.core.windows.net/","blob":"https://acrtransfer2kf3pzn2hjkid.blob.core.windows.net/","queue":"https://acrtransfer2kf3pzn2hjkid.queue.core.windows.net/","table":"https://acrtransfer2kf3pzn2hjkid.table.core.windows.net/","file":"https://acrtransfer2kf3pzn2hjkid.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_kkk3gbzfe4x2ix3b2h5g557t6jm7icqokj2uqr4s4u/providers/Microsoft.Storage/storageAccounts/acrtransfer55nlykjdfziyy","name":"acrtransfer55nlykjdfziyy","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2563281Z","primaryEndpoints":{"dfs":"https://acrtransfer55nlykjdfziyy.dfs.core.windows.net/","web":"https://acrtransfer55nlykjdfziyy.z22.web.core.windows.net/","blob":"https://acrtransfer55nlykjdfziyy.blob.core.windows.net/","queue":"https://acrtransfer55nlykjdfziyy.queue.core.windows.net/","table":"https://acrtransfer55nlykjdfziyy.table.core.windows.net/","file":"https://acrtransfer55nlykjdfziyy.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4438964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4438964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2094542Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_ovgwomuy63wflqjxcaqflapx6a4vbwz74owqyiycej/providers/Microsoft.Storage/storageAccounts/acrtransferbokzmctlf4amn","name":"acrtransferbokzmctlf4amn","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:20.1625933Z","key2":"2026-01-20T15:49:20.1625933Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:20.1625933Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:20.1625933Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.9595165Z","primaryEndpoints":{"dfs":"https://acrtransferbokzmctlf4amn.dfs.core.windows.net/","web":"https://acrtransferbokzmctlf4amn.z22.web.core.windows.net/","blob":"https://acrtransferbokzmctlf4amn.blob.core.windows.net/","queue":"https://acrtransferbokzmctlf4amn.queue.core.windows.net/","table":"https://acrtransferbokzmctlf4amn.table.core.windows.net/","file":"https://acrtransferbokzmctlf4amn.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_xfoq3p2ykdz4qjh5duhuaqm27dca63dknijj4s4ky3f/providers/Microsoft.Storage/storageAccounts/acrtransferlunk6mhsf6omi","name":"acrtransferlunk6mhsf6omi","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2250778Z","key2":"2026-01-20T15:49:19.2250778Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2250778Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2250778Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0375793Z","primaryEndpoints":{"dfs":"https://acrtransferlunk6mhsf6omi.dfs.core.windows.net/","web":"https://acrtransferlunk6mhsf6omi.z22.web.core.windows.net/","blob":"https://acrtransferlunk6mhsf6omi.blob.core.windows.net/","queue":"https://acrtransferlunk6mhsf6omi.queue.core.windows.net/","table":"https://acrtransferlunk6mhsf6omi.table.core.windows.net/","file":"https://acrtransferlunk6mhsf6omi.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_5ah774x5cbepa2csi6crbqtvdrxdd2pdv7sjqcxsmz/providers/Microsoft.Storage/storageAccounts/acrtransferps6bexl4ncwrs","name":"acrtransferps6bexl4ncwrs","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2094542Z","key2":"2026-01-20T15:49:19.2094542Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0219547Z","primaryEndpoints":{"dfs":"https://acrtransferps6bexl4ncwrs.dfs.core.windows.net/","web":"https://acrtransferps6bexl4ncwrs.z22.web.core.windows.net/","blob":"https://acrtransferps6bexl4ncwrs.blob.core.windows.net/","queue":"https://acrtransferps6bexl4ncwrs.queue.core.windows.net/","table":"https://acrtransferps6bexl4ncwrs.table.core.windows.net/","file":"https://acrtransferps6bexl4ncwrs.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '13527' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:57 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - 567eb8bf-494b-4f64-8aac-b4de04639404 + - f09574c2-179d-416b-8db9-12bc5d23f102 + - 38fe2af0-dc12-4eb9-87dd-9c530799a41f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 03780221C740472E8EB949FC063E45C8 Ref B: MWH011020809031 Ref C: 2026-01-20T15:49:58Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T15:49:19.4438964Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T15:49:19.4438964Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 15:49:58 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/f82a8c9b-edda-40bc-9418-86a9fbce51db + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: 3BAAB14E092F4B739EA9406D39EB4EA5 Ref B: MWH011020809031 Ref C: 2026-01-20T15:49:58Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 15:49:58 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/export-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:49:59 GMT + etag: + - '"0x8DE583B912C4B81"' + last-modified: + - Tue, 20 Jan 2026 15:49:59 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +- request: + body: '{"identity": {"type": "SystemAssigned"}, "properties": {"target": {"type": + "AzureStorageBlobContainer", "uri": "https://acrtransfer000002.blob.core.windows.net/export-container", + "storageAccessMode": "ManagedIdentity"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline create + Connection: + - keep-alive + Content-Length: + - '220' + Content-Type: + - application/json + ParameterSetName: + - -g -r -n --storage-access-mode --storage-container-uri + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"principalId":"1326e454-8eaf-48bc-b12e-35c87829e6d2","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:00.4597739+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:00.4597739+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","storageAccessMode":"ManagedIdentity"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '874' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:02 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/06c7e316-427e-488e-a7eb-4039169234e5 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 4CA941AE755E4DFD9CC08CC77CE8C837 Ref B: CO6AA3150218033 Ref C: 2026-01-20T15:50:00Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline create + Connection: + - keep-alive + ParameterSetName: + - -g -r -n --storage-access-mode --storage-container-uri + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"principalId":"1326e454-8eaf-48bc-b12e-35c87829e6d2","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:00.4597739+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:00.4597739+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","storageAccessMode":"ManagedIdentity"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '874' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:02 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/3253021b-b576-4110-be79-eb4392ac6fe0 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 85BF2709A8E147B7B7D230ADC8C9BA8F Ref B: CO6AA3150219031 Ref C: 2026-01-20T15:50:02Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline delete + Connection: + - keep-alive + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"principalId":"1326e454-8eaf-48bc-b12e-35c87829e6d2","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:00.4597739+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:00.4597739+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","storageAccessMode":"ManagedIdentity"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '874' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:03 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/fc5236d8-fdca-4260-ba24-5aa1d07743ad + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 2967E8AC4068454281F8156B17778F24 Ref B: CO6AA3150220011 Ref C: 2026-01-20T15:50:03Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/ad985733-86fc-4caf-b57d-5094f4244dcb + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 22898845ADBB4FA988554638754220CA Ref B: CO6AA3150220045 Ref C: 2026-01-20T15:50:04Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.5160047+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.5160047+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.5160047Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:55.6275127+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:55.6275546+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1560' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:05 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-affd3b54-f617-11f0-a5cc-002248b6daac?api-version=2025-03-01-preview&t=639045210057631422&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=JYwFonJPOKczwpEKvx1H9AKylSL55tf_UVArJzh1JISpD00_UDOEzEOT950GQa87w8y3d3slfbDhb3mrnKABARIN4-8euMNktYAFX8EkIWakFF1cQuulZjDy9nf7mxD_q99vOhDONlUcUaWdPT9SKhlzK-OWaWgvLu1EyvbvlGqCIEHwJ599qRhNijhim6Xd1cpKkkZW_vj69I_g2fVQBV4SzN-KuoMPhCV7JeFjCmR8WAq2HlKYMV-ACeYXuJSA6wRMiHLhl22mzNOAvf7-JVPOwa1zKWwhCW77pmJmVgQaqONG7p_PF_5JF09D4EjQtIXxbK1e779ulyPTJAU3rA&h=XRy9fgjNQ_qgZ9N4UDRTvOsNM0WRTtm9zkOhyyOrCqI + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/f7f11472-9046-4d92-8118-0ad64bad3187 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: E77E1D9EAB884B22AB2F2C1AC8BF2FC4 Ref B: MWH011020807023 Ref C: 2026-01-20T15:50:05Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-affd3b54-f617-11f0-a5cc-002248b6daac?api-version=2025-03-01-preview&t=639045210057631422&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=JYwFonJPOKczwpEKvx1H9AKylSL55tf_UVArJzh1JISpD00_UDOEzEOT950GQa87w8y3d3slfbDhb3mrnKABARIN4-8euMNktYAFX8EkIWakFF1cQuulZjDy9nf7mxD_q99vOhDONlUcUaWdPT9SKhlzK-OWaWgvLu1EyvbvlGqCIEHwJ599qRhNijhim6Xd1cpKkkZW_vj69I_g2fVQBV4SzN-KuoMPhCV7JeFjCmR8WAq2HlKYMV-ACeYXuJSA6wRMiHLhl22mzNOAvf7-JVPOwa1zKWwhCW77pmJmVgQaqONG7p_PF_5JF09D4EjQtIXxbK1e779ulyPTJAU3rA&h=XRy9fgjNQ_qgZ9N4UDRTvOsNM0WRTtm9zkOhyyOrCqI + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:06 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-affd3b54-f617-11f0-a5cc-002248b6daac?api-version=2025-03-01-preview&t=639045210064922119&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=mLcgsKs-Q2LhRBv0R4XcIy74XEPVc4BTw8W9z2oLRYcwtLbLkM3KSrwFL7q328oNrcxXqptpNbb9nd96d1ITQlqrccn6Rn8_tDlsjKIVYpXmMmZkPzEPoKCQfHIO7ka_YEHoFLC_u59-2XH5gnpYKpNkrdiNbo8_y_RqKxZZWy4RTVJcDDKGYD4nPHg0pZdbRgAiA_8elUwNMiexYSocUfaUNMaxfKmvCWlmIDiDW9UTEZ1fT3NGwT7ZXW80vPnEsLXR9TVhrov4FaMeTthTj3EtmZ3yeh0-L_Jj2pKLuinnTwWqPy9zH-KkZMCS58ExR83HH9PcPaV2XAB2A2SHMQ&h=0gWVqPl5homr6XFKiGA_rCzJkJ2YYEXxhNAbyHjgSFw + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/786b57d4-455b-4e74-b86d-c9ba56bf5ff6 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 35D302A810284E048D3E3C04FBD3A6E2 Ref B: MWH011020808023 Ref C: 2026-01-20T15:50:06Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-affd3b54-f617-11f0-a5cc-002248b6daac?api-version=2025-03-01-preview&t=639045210064922119&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=mLcgsKs-Q2LhRBv0R4XcIy74XEPVc4BTw8W9z2oLRYcwtLbLkM3KSrwFL7q328oNrcxXqptpNbb9nd96d1ITQlqrccn6Rn8_tDlsjKIVYpXmMmZkPzEPoKCQfHIO7ka_YEHoFLC_u59-2XH5gnpYKpNkrdiNbo8_y_RqKxZZWy4RTVJcDDKGYD4nPHg0pZdbRgAiA_8elUwNMiexYSocUfaUNMaxfKmvCWlmIDiDW9UTEZ1fT3NGwT7ZXW80vPnEsLXR9TVhrov4FaMeTthTj3EtmZ3yeh0-L_Jj2pKLuinnTwWqPy9zH-KkZMCS58ExR83HH9PcPaV2XAB2A2SHMQ&h=0gWVqPl5homr6XFKiGA_rCzJkJ2YYEXxhNAbyHjgSFw + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:16 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/d5167225-8f93-4381-a195-e4fb8f4f85bb + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B1B2CC81B6C8495DA9C5C1F736F972B8 Ref B: CO6AA3150217025 Ref C: 2026-01-20T15:50:17Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_user_assigned.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_user_assigned.yaml new file mode 100644 index 00000000000..fa2a9c406bf --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_user_assigned.yaml @@ -0,0 +1,862 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_uai_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001","name":"cli_test_acr_transfer_export_uai_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_export_pipeline_entra_mi_auth_user_assigned","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '441' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:43 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B3F592855734434F824F9C18512C6D25 Ref B: MWH011020807034 Ref C: 2026-01-20T15:49:43Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:44.3701277+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:44.3701277+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:44.3701277Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:51.4510411+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:51.4510815+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2440c22-f617-11f0-848b-002248b6daac?api-version=2025-03-01-preview&t=639045209916362813&c=MIIHhzCCBm-gAwIBAgITfAldUuOkqyWaFWVmdAAACV1S4zANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjUxMDIxMDgxMjA1WhcNMjYwNDE5MDgxMjA1WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6VhHo7SMnPI07xSUC0EKrS_gaAU3t2sorvXTakEJppgrr-M5q-yAFDicwNGCe2zSU9ZvGBPI46D9PesTntz4RhQO5-Dkx5G8vC9lZ0WV6mem5Hsnf78kDXgYxzLyAaMKv9WjuZNcTaFQKdrPAx-ZS-2EebUB404VhX1yJ3S4C3QHTpXASyoAbFfGV8tHPGM7q2s_Qr9qBJ5RUnI0t_oD0IJ_dyn_wQvIsgBjpGMentNk7AKNnJ7dWOCU76BFL9ZQAP9lNuU68JHjdsD1lABOX7Jtcv8FrW2zWgZn6TOHf9rY990h8zyuY_EBAr0xrbFD0i_O184Iy9gHWqScS_2CkCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBTUpdRlqz5GkJ77fs3HRMz2Z_W49DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAGQmJdPitlGjIwFSf4WsFmLr4W3CmkUpm4HxfZATnxnP9vV2uH5f01rfg_lA-Q0s4GMqkftMAVNRm0Ta6w_NRSLRZO2GWa65KrQ8ITCuGR12jMTYPqYgqEIaBQAqqxvtTisw6-_rDdMBbWwvTo6h0yR_Rw0GGgX1C4WUYhFJq-o90nFF2qZEFQJht7ni8RYQonaxB281z64rp0rlXCz8r3rJXIR2RLC48IA1los4mZYaxAv_Y_LPYwZUQ_V0_YrSGK5KMJp6exPToKF_DePs6j27AncGilbWo9t96F-yKBPD57WulOVgbYwNKAZ_Klbw0ur-YLdTdCaIbUiNhmGTDvY&s=MmVyRfd00Uuzt_7hoeOkSUZf6fx573g-NBd6_rnnP0sE7OQjbBq2lOi3_q0FHzrLLDeBO6noreJ01bYoShg4Pn-N-ZzeN9O8whE3TAHl8FbW-8NQAGbfL9BLsB5mH3byPrZ_p-90hTu8y_anBrwLMRkT1STsoOK1rXnoUm7beSML9hPrBAR8RHR0ATXGVl2eeixWIferNT3kCzE6jWQhlvSqtDb1QCPn6OSfAYEYsqdYjji3omTFwJ3RHbXR9ZnVe1ewyCnzb8g9OZk0znBcdGVI1P4LkaU-8fhkFC703YW-PLNSMpCcWCPHTcYT96tbgJVVN3LIADQYmwLONH1zJw&h=vUPsWDKa2bdmxX26CKknBOgMzF8U7vnYQW1GDoVBlJY + cache-control: + - no-cache + content-length: + - '1561' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:51 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/f4b58602-04cd-41e2-9df7-36dbade3da43 + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: DA50FE21DE6E4211A0609279A3EBB108 Ref B: MWH011020809052 Ref C: 2026-01-20T15:49:43Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2440c22-f617-11f0-848b-002248b6daac?api-version=2025-03-01-preview&t=639045209916362813&c=MIIHhzCCBm-gAwIBAgITfAldUuOkqyWaFWVmdAAACV1S4zANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjUxMDIxMDgxMjA1WhcNMjYwNDE5MDgxMjA1WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6VhHo7SMnPI07xSUC0EKrS_gaAU3t2sorvXTakEJppgrr-M5q-yAFDicwNGCe2zSU9ZvGBPI46D9PesTntz4RhQO5-Dkx5G8vC9lZ0WV6mem5Hsnf78kDXgYxzLyAaMKv9WjuZNcTaFQKdrPAx-ZS-2EebUB404VhX1yJ3S4C3QHTpXASyoAbFfGV8tHPGM7q2s_Qr9qBJ5RUnI0t_oD0IJ_dyn_wQvIsgBjpGMentNk7AKNnJ7dWOCU76BFL9ZQAP9lNuU68JHjdsD1lABOX7Jtcv8FrW2zWgZn6TOHf9rY990h8zyuY_EBAr0xrbFD0i_O184Iy9gHWqScS_2CkCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBTUpdRlqz5GkJ77fs3HRMz2Z_W49DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAGQmJdPitlGjIwFSf4WsFmLr4W3CmkUpm4HxfZATnxnP9vV2uH5f01rfg_lA-Q0s4GMqkftMAVNRm0Ta6w_NRSLRZO2GWa65KrQ8ITCuGR12jMTYPqYgqEIaBQAqqxvtTisw6-_rDdMBbWwvTo6h0yR_Rw0GGgX1C4WUYhFJq-o90nFF2qZEFQJht7ni8RYQonaxB281z64rp0rlXCz8r3rJXIR2RLC48IA1los4mZYaxAv_Y_LPYwZUQ_V0_YrSGK5KMJp6exPToKF_DePs6j27AncGilbWo9t96F-yKBPD57WulOVgbYwNKAZ_Klbw0ur-YLdTdCaIbUiNhmGTDvY&s=MmVyRfd00Uuzt_7hoeOkSUZf6fx573g-NBd6_rnnP0sE7OQjbBq2lOi3_q0FHzrLLDeBO6noreJ01bYoShg4Pn-N-ZzeN9O8whE3TAHl8FbW-8NQAGbfL9BLsB5mH3byPrZ_p-90hTu8y_anBrwLMRkT1STsoOK1rXnoUm7beSML9hPrBAR8RHR0ATXGVl2eeixWIferNT3kCzE6jWQhlvSqtDb1QCPn6OSfAYEYsqdYjji3omTFwJ3RHbXR9ZnVe1ewyCnzb8g9OZk0znBcdGVI1P4LkaU-8fhkFC703YW-PLNSMpCcWCPHTcYT96tbgJVVN3LIADQYmwLONH1zJw&h=vUPsWDKa2bdmxX26CKknBOgMzF8U7vnYQW1GDoVBlJY + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2440c22-f617-11f0-848b-002248b6daac?api-version=2025-03-01-preview&t=639045209923371823&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=vZRCH5nHwbsYLgHBoC5KoSrjSpDX-IhKeoHNVTSfEG4Jyf-hevH3AMuO88p6SwmK2GW0qWb7Eq-CtDt5OX6GMMI1VPpQJaflAsI8ztRKU02b29wTRepkLLUmDhI-XRy55ca-0Vx93ABiTp07tyPnxJC02cpSc_JrQITY4EQhHekfr1D1xQyLlIgGkoGiyF82Q_njuvBvG3t2rAjNtP3dh6mVQM8q7Q2wThK4G2rjZ8cGdk7FC7lR7K90k8f3g3UQeIf1zsou7aOEKwzkqBJbDrwzgUF_JStQwF2n2kEGI0AwTJzld8GbRmBgz4eMnhQjIm5dSZBPMHlqaP-obRD09g&h=4NEhr_2qId6ll_wNMEJzAlP5NH2ZOhaSqxSMWrmSw2Q + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:51 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/a799df29-daa6-4e5c-a5b3-9056b75ed51a + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B14B6758A4D24F16BCB1BCDAACFD5DB2 Ref B: CO6AA3150219035 Ref C: 2026-01-20T15:49:52Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:44.3701277+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:44.3701277+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:44.3701277Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:51.4510411+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:51.4510815+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1562' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:52 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 444456C1BFD44AD78F41DE9143B78620 Ref B: MWH011020806054 Ref C: 2026-01-20T15:49:52Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - identity create + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_uai_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001","name":"cli_test_acr_transfer_export_uai_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_export_pipeline_entra_mi_auth_user_assigned","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '441' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:53 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 5EA21BDF7EF94EFAA0BBDE5B64ABDA3E Ref B: CO6AA3150218017 Ref C: 2026-01-20T15:49:53Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - identity create + Connection: + - keep-alive + Content-Length: + - '22' + Content-Type: + - application/json + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005?api-version=2024-11-30 + response: + body: + string: '{"location":"westus","tags":{},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005","name":"identity000005","type":"Microsoft.ManagedIdentity/userAssignedIdentities","properties":{"isolationScope":"None","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","principalId":"ec0515ac-0b8a-4e35-908a-ed7f8997deb1","clientId":"95e4aafe-5477-4c0b-8021-67ebda5f4e3d"}}' + headers: + cache-control: + - no-cache + content-length: + - '493' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:55 GMT + expires: + - '-1' + location: + - /subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005 + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/dee35ac7-e30f-4ea1-9f55-b908e21a6285 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 3170AD82E033465487CDCFA858DCF3EE Ref B: CO6AA3150218011 Ref C: 2026-01-20T15:49:54Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_v3pmgfh3mc56mxxogbhgdoreo3avnp5lbo3odxv4ss/providers/Microsoft.Storage/storageAccounts/acrtransfer2kf3pzn2hjkid","name":"acrtransfer2kf3pzn2hjkid","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4126611Z","key2":"2026-01-20T15:49:19.4126611Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.1782049Z","primaryEndpoints":{"dfs":"https://acrtransfer2kf3pzn2hjkid.dfs.core.windows.net/","web":"https://acrtransfer2kf3pzn2hjkid.z22.web.core.windows.net/","blob":"https://acrtransfer2kf3pzn2hjkid.blob.core.windows.net/","queue":"https://acrtransfer2kf3pzn2hjkid.queue.core.windows.net/","table":"https://acrtransfer2kf3pzn2hjkid.table.core.windows.net/","file":"https://acrtransfer2kf3pzn2hjkid.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_kkk3gbzfe4x2ix3b2h5g557t6jm7icqokj2uqr4s4u/providers/Microsoft.Storage/storageAccounts/acrtransfer55nlykjdfziyy","name":"acrtransfer55nlykjdfziyy","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2563281Z","primaryEndpoints":{"dfs":"https://acrtransfer55nlykjdfziyy.dfs.core.windows.net/","web":"https://acrtransfer55nlykjdfziyy.z22.web.core.windows.net/","blob":"https://acrtransfer55nlykjdfziyy.blob.core.windows.net/","queue":"https://acrtransfer55nlykjdfziyy.queue.core.windows.net/","table":"https://acrtransfer55nlykjdfziyy.table.core.windows.net/","file":"https://acrtransfer55nlykjdfziyy.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_4mrjigta76ajseogsxbc6fjue34kkvfhuczutb77myz/providers/Microsoft.Storage/storageAccounts/acrtransfer6bvzkqzu32fqb","name":"acrtransfer6bvzkqzu32fqb","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4438964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4438964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2094542Z","primaryEndpoints":{"dfs":"https://acrtransfer6bvzkqzu32fqb.dfs.core.windows.net/","web":"https://acrtransfer6bvzkqzu32fqb.z22.web.core.windows.net/","blob":"https://acrtransfer6bvzkqzu32fqb.blob.core.windows.net/","queue":"https://acrtransfer6bvzkqzu32fqb.queue.core.windows.net/","table":"https://acrtransfer6bvzkqzu32fqb.table.core.windows.net/","file":"https://acrtransfer6bvzkqzu32fqb.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:20.1625933Z","key2":"2026-01-20T15:49:20.1625933Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:20.1625933Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:20.1625933Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.9595165Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_xfoq3p2ykdz4qjh5duhuaqm27dca63dknijj4s4ky3f/providers/Microsoft.Storage/storageAccounts/acrtransferlunk6mhsf6omi","name":"acrtransferlunk6mhsf6omi","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2250778Z","key2":"2026-01-20T15:49:19.2250778Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2250778Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2250778Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0375793Z","primaryEndpoints":{"dfs":"https://acrtransferlunk6mhsf6omi.dfs.core.windows.net/","web":"https://acrtransferlunk6mhsf6omi.z22.web.core.windows.net/","blob":"https://acrtransferlunk6mhsf6omi.blob.core.windows.net/","queue":"https://acrtransferlunk6mhsf6omi.queue.core.windows.net/","table":"https://acrtransferlunk6mhsf6omi.table.core.windows.net/","file":"https://acrtransferlunk6mhsf6omi.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_5ah774x5cbepa2csi6crbqtvdrxdd2pdv7sjqcxsmz/providers/Microsoft.Storage/storageAccounts/acrtransferps6bexl4ncwrs","name":"acrtransferps6bexl4ncwrs","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2094542Z","key2":"2026-01-20T15:49:19.2094542Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0219547Z","primaryEndpoints":{"dfs":"https://acrtransferps6bexl4ncwrs.dfs.core.windows.net/","web":"https://acrtransferps6bexl4ncwrs.z22.web.core.windows.net/","blob":"https://acrtransferps6bexl4ncwrs.blob.core.windows.net/","queue":"https://acrtransferps6bexl4ncwrs.queue.core.windows.net/","table":"https://acrtransferps6bexl4ncwrs.table.core.windows.net/","file":"https://acrtransferps6bexl4ncwrs.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '13528' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:56 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - 26028e73-6d27-4a25-8a24-ea63e9f05e91 + - 44fa8f47-9864-4823-b9ec-1cfa1451532a + - 15e9691b-0032-4f7b-b7f2-a16e21a64994 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 2F0F831A37B64BD69C7FDD6C1E08437C Ref B: MWH011020806025 Ref C: 2026-01-20T15:49:56Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T15:49:20.1625933Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T15:49:20.1625933Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 15:49:56 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/aac0d890-3539-462c-8d24-5c3ab051eecc + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: DCC1CC1AA79B445E88AC65ADA82C8283 Ref B: CO6AA3150219017 Ref C: 2026-01-20T15:49:57Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 15:49:57 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/export-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:49:57 GMT + etag: + - '"0x8DE583B90633AB2"' + last-modified: + - Tue, 20 Jan 2026 15:49:58 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +- request: + body: '{"identity": {"type": "UserAssigned", "userAssignedIdentities": {"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005": + {}}}, "properties": {"target": {"type": "AzureStorageBlobContainer", "uri": + "https://acrtransfer000002.blob.core.windows.net/export-container", "storageAccessMode": + "ManagedIdentity"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline create + Connection: + - keep-alive + Content-Length: + - '434' + Content-Type: + - application/json + ParameterSetName: + - -g -r -n --storage-access-mode --storage-container-uri --assign-identity + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"type":"userAssigned","userAssignedIdentities":{"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005":{"principalId":"ec0515ac-0b8a-4e35-908a-ed7f8997deb1","clientId":"95e4aafe-5477-4c0b-8021-67ebda5f4e3d"}}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:59.3860464+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:59.3860464+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","storageAccessMode":"ManagedIdentity"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '1085' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:59 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/28330ef5-e00a-4cc4-9244-fa0201f652f7 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 4F879E0F0F404D5DAB86AA72FA9FC719 Ref B: CO6AA3150219031 Ref C: 2026-01-20T15:49:59Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline create + Connection: + - keep-alive + ParameterSetName: + - -g -r -n --storage-access-mode --storage-container-uri --assign-identity + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"type":"userAssigned","userAssignedIdentities":{"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005":{"principalId":"ec0515ac-0b8a-4e35-908a-ed7f8997deb1","clientId":"95e4aafe-5477-4c0b-8021-67ebda5f4e3d"}}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:59.3860464+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:59.3860464+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","storageAccessMode":"ManagedIdentity"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '1085' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:00 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/6e83c1a7-768e-4ac7-b664-25e6e482ec0d + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 464B1BF8ECBF43748A065140D32E118E Ref B: CO6AA3150218045 Ref C: 2026-01-20T15:50:00Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline delete + Connection: + - keep-alive + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"type":"userAssigned","userAssignedIdentities":{"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005":{"principalId":"ec0515ac-0b8a-4e35-908a-ed7f8997deb1","clientId":"95e4aafe-5477-4c0b-8021-67ebda5f4e3d"}}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:59.3860464+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:59.3860464+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","storageAccessMode":"ManagedIdentity"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '1085' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/b736c6f0-d112-4d98-9755-1ea3c6208519 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 74CFAB8FF0A64FE7B5BF46850FC6BF0E Ref B: CO6AA3150218017 Ref C: 2026-01-20T15:50:01Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/339572cf-3951-44d8-a4f7-c90451c917ed + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 2FF6A684EF9C45378957B452314BC513 Ref B: CO6AA3150217051 Ref C: 2026-01-20T15:50:01Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:44.3701277+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:44.3701277+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:44.3701277Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:51.4510411+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:51.4510815+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1561' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:02 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-ae99b36e-f617-11f0-bee2-002248b6daac?api-version=2025-03-01-preview&t=639045210033278978&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=HPyWh6mfrppp-uLkpjl5YbW8eaQAoBIPRSJTB6lgewG0_PqqXKhWQPfvT3rT2B8NKQUuakB7qsjjSWdCpAaxQAsLoqz1awF2HtwM0K2snMuYoBtZFnWjEselYMreOe4NV68BqeNsmVYTp-ErOSGCwdWiPJhuG_PbdCWzn3a8Bf2q_6xSYKSTeesaTGS1uAm39tnMO_6v3UsiIK6dTGiNmDchwidHiLi-dyYvlprLpn6mTr_VNzu9o96oYiI7YVi6eopC8as2vvi-0u10ZBKeP38gLZS8bl46c64ZbukNs72C5QYsXjsvguWCnPLfQU7bzHz61Hxh8L-Pm5_jucnh9w&h=f1JEchN1TqQtSXG6LVp_4TA_sFizyxNlFA0XZXavVTI + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/7d94d76b-bdeb-463d-9011-8de2d1284e4e + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: AC30FCF2EDA54CBEAE60E1CF1EA00BFF Ref B: MWH011020808031 Ref C: 2026-01-20T15:50:02Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-ae99b36e-f617-11f0-bee2-002248b6daac?api-version=2025-03-01-preview&t=639045210033278978&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=HPyWh6mfrppp-uLkpjl5YbW8eaQAoBIPRSJTB6lgewG0_PqqXKhWQPfvT3rT2B8NKQUuakB7qsjjSWdCpAaxQAsLoqz1awF2HtwM0K2snMuYoBtZFnWjEselYMreOe4NV68BqeNsmVYTp-ErOSGCwdWiPJhuG_PbdCWzn3a8Bf2q_6xSYKSTeesaTGS1uAm39tnMO_6v3UsiIK6dTGiNmDchwidHiLi-dyYvlprLpn6mTr_VNzu9o96oYiI7YVi6eopC8as2vvi-0u10ZBKeP38gLZS8bl46c64ZbukNs72C5QYsXjsvguWCnPLfQU7bzHz61Hxh8L-Pm5_jucnh9w&h=f1JEchN1TqQtSXG6LVp_4TA_sFizyxNlFA0XZXavVTI + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:03 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-ae99b36e-f617-11f0-bee2-002248b6daac?api-version=2025-03-01-preview&t=639045210040970010&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=a4kGaRxfmlf0dR-mVNGGsnsM_NEZiGw7wLPfoQhgiWx4J4OGSdxblTcjZ0zBBNR24D5HKz7L35R7aX3xnPuHz4sy02cgs-XPZ6o4yM6ZUBk2h5wjiGN6xu5Z306qPb8CyBPLJ9AudNd1nNqMFXmuKgaGAbEyEC2QApuCpoI4xERugFLr8MXZhW5dIAHbzcDfZiD2SNL5J_CLnsucjea4PnP-ELcrJUuTMoFsmh9ouw1np1VnBbDVTIwmMK4-C9aCDHMfSS5FKC0hUM0_SD4xBQA4VdyXajfhHefDBko4UePeTECFIuvUCqQZdv6bIHNULCeRT2bK3SbfOsxXrozO1A&h=hQsPJKRF2Y4Fqs-LM79l-xQRLFJl5165A9flgYd4gDg + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/c6423412-c1b2-42f7-b0f3-ef77e578e05b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: F3E72BC8D9984233ABB5A9F32F68A9D8 Ref B: MWH011020808031 Ref C: 2026-01-20T15:50:03Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-ae99b36e-f617-11f0-bee2-002248b6daac?api-version=2025-03-01-preview&t=639045210040970010&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=a4kGaRxfmlf0dR-mVNGGsnsM_NEZiGw7wLPfoQhgiWx4J4OGSdxblTcjZ0zBBNR24D5HKz7L35R7aX3xnPuHz4sy02cgs-XPZ6o4yM6ZUBk2h5wjiGN6xu5Z306qPb8CyBPLJ9AudNd1nNqMFXmuKgaGAbEyEC2QApuCpoI4xERugFLr8MXZhW5dIAHbzcDfZiD2SNL5J_CLnsucjea4PnP-ELcrJUuTMoFsmh9ouw1np1VnBbDVTIwmMK4-C9aCDHMfSS5FKC0hUM0_SD4xBQA4VdyXajfhHefDBko4UePeTECFIuvUCqQZdv6bIHNULCeRT2bK3SbfOsxXrozO1A&h=hQsPJKRF2Y4Fqs-LM79l-xQRLFJl5165A9flgYd4gDg + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:13 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/26fe5eae-cd24-4ce1-a529-1ad0d90879e1 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 8A84066275C74C2BA0823BD9661B0A76 Ref B: CO6AA3150220053 Ref C: 2026-01-20T15:50:14Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - identity delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005?api-version=2024-11-30 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/a6de6b11-5da9-48d6-bc6b-b97f8c22386e + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 16AB9A585DE74E788F912BFF8A681341 Ref B: MWH011020807054 Ref C: 2026-01-20T15:50:15Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_with_secret_uri_fails.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_with_secret_uri_fails.yaml new file mode 100644 index 00000000000..e1fda0b18c5 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_entra_mi_auth_with_secret_uri_fails.yaml @@ -0,0 +1,499 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_mi_invalid_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001","name":"cli_test_acr_transfer_export_mi_invalid_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_export_pipeline_entra_mi_auth_with_secret_uri_fails","date":"2026-01-20T16:48:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '463' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:37 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 6134C815CBB64BE886B301A862985DD8 Ref B: MWH011020808036 Ref C: 2026-01-20T16:48:37Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:48:38.8736779+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:48:38.8736779+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:48:38.8736779Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:48:45.457267+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:48:45.4573121+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-dd9b44b4-f61f-11f0-9ac5-002248b6daac?api-version=2025-03-01-preview&t=639045245262956592&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=CjQVC71JawZeN2S_t2b0U24_jwh4jWbQpFZxrmzP1h5lyOxvjAiOq_uNgidt7ROwmXM3k72XIyyFOGjf-FSlveOSBZ7fPZJd6gsJJnv10uqj_2zaMbsnX6YMEmrv_jmfhEDoNpLeOyzB2kPtFoAMHA1XHuKbLWnedvSAJeb5kNnpXLXE0uP2FfrXk_eUNpGQ1TLdhjyn2XLc6A5fFk0XpKCl5bczciJdGQKtWN-fRkXFDxNKT3J4V6anxIjvsA3gtE0qcnUfFKT0AYcH4aX5Bp3Q3NVLYbf-j0W3j7t-hoisXvmpd0CB0VayFr3vP4hWTkX9RZIQBjscSEkG58k28w&h=8-XkucVU2p5G6HSxW6C3HHxq2dcqhBQRiIHCXAZ7yh4 + cache-control: + - no-cache + content-length: + - '1567' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:46 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/aa24e659-89d1-4ff1-b3eb-2beeb0ada592 + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: E175F20ECFA9485883B7739F006406B6 Ref B: CO6AA3150219035 Ref C: 2026-01-20T16:48:38Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-dd9b44b4-f61f-11f0-9ac5-002248b6daac?api-version=2025-03-01-preview&t=639045245262956592&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=CjQVC71JawZeN2S_t2b0U24_jwh4jWbQpFZxrmzP1h5lyOxvjAiOq_uNgidt7ROwmXM3k72XIyyFOGjf-FSlveOSBZ7fPZJd6gsJJnv10uqj_2zaMbsnX6YMEmrv_jmfhEDoNpLeOyzB2kPtFoAMHA1XHuKbLWnedvSAJeb5kNnpXLXE0uP2FfrXk_eUNpGQ1TLdhjyn2XLc6A5fFk0XpKCl5bczciJdGQKtWN-fRkXFDxNKT3J4V6anxIjvsA3gtE0qcnUfFKT0AYcH4aX5Bp3Q3NVLYbf-j0W3j7t-hoisXvmpd0CB0VayFr3vP4hWTkX9RZIQBjscSEkG58k28w&h=8-XkucVU2p5G6HSxW6C3HHxq2dcqhBQRiIHCXAZ7yh4 + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-dd9b44b4-f61f-11f0-9ac5-002248b6daac?api-version=2025-03-01-preview&t=639045245271168259&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=XX9R2M0KutrRRoKrJKMhyzN2UQbeIJYYb743-Z4M9sxraBumA5eeyMHVhGoZL3UlTdeQzEJW29Dag1zSMALHDRnygAyNwLtt-6UMqboKVzz9H7Z-o2OU40nreMM_Vj61wbutOmClf-it9q4aJCfeV-TmITeNswKhHVmcUbV7VcUC8kv7bGdqJ3js3IiQdHdmnGQqTxEUqNL_5YWmWN2GXhSsI6aZf_nlyL3ZM8Kkcfbp1lY8XuOhX6N2myiE5vp0m0cgaXOCaVMVTMLTpkUd2ahR1eWUXIi6YuFNGP86SGtg9OXClyOlc3wNrxxZprp9vkPGuMgBojXMT18I2wx0qQ&h=WO82x5n3I2lK0nfjMO7gESJ6oqemaEy-YFydmI31zYQ + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/b69060f4-e60b-4563-af4d-b8b3a48375a4 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B68ACE5AD004478BBCB3F6E0E13B6A31 Ref B: MWH011020809040 Ref C: 2026-01-20T16:48:46Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:48:38.8736779+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:48:38.8736779+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:48:38.8736779Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:48:45.457267+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:48:45.4573121+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1568' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 26A86F9D0A95458F8D84DA218ABDA6C1 Ref B: MWH011020806036 Ref C: 2026-01-20T16:48:47Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_tqvlltiwk676pfhz4tfydx2fxavvxqlbxfw/providers/Microsoft.Storage/storageAccounts/acrtransfer7yau4yzhdj56o","name":"acrtransfer7yau4yzhdj56o","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T16:48:13.3703440Z","key2":"2026-01-20T16:48:13.3703440Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:48:13.3703440Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:48:13.3703440Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T16:48:13.1672654Z","primaryEndpoints":{"dfs":"https://acrtransfer7yau4yzhdj56o.dfs.core.windows.net/","web":"https://acrtransfer7yau4yzhdj56o.z22.web.core.windows.net/","blob":"https://acrtransfer7yau4yzhdj56o.blob.core.windows.net/","queue":"https://acrtransfer7yau4yzhdj56o.queue.core.windows.net/","table":"https://acrtransfer7yau4yzhdj56o.table.core.windows.net/","file":"https://acrtransfer7yau4yzhdj56o.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T16:48:13.1048271Z","key2":"2026-01-20T16:48:13.1048271Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:48:13.1048271Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:48:13.1048271Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T16:48:12.9016358Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '6991' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:48 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - 2f5720e0-543b-4bf4-823b-c82aa001f264 + - 8d7ee52e-5c32-4fcd-8c13-ea3ca06a1935 + - 65a3cf85-c7b3-4ee6-bc8b-6f83e47bb47b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B824A35A7DAD4F72AEB2B17BB3E4DD54 Ref B: MWH011020806025 Ref C: 2026-01-20T16:48:49Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T16:48:13.1048271Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T16:48:13.1048271Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 16:48:49 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/0e8bfd65-39ec-4e96-adb7-139082d15b08 + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: 94B5283FCEF847498163BEB1671B5BEB Ref B: CO6AA3150217035 Ref C: 2026-01-20T16:48:49Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 16:48:49 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/export-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 16:48:50 GMT + etag: + - '"0x8DE5843C9C13973"' + last-modified: + - Tue, 20 Jan 2026 16:48:50 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:48:38.8736779+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:48:38.8736779+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:48:38.8736779Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:48:45.457267+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:48:45.4573121+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1567' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:51 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-e5b5e0c8-f61f-11f0-996f-002248b6daac?api-version=2025-03-01-preview&t=639045245322843640&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=LzaEDcepc3vMQxa5wVbtShsZspt1O3t1Mes8H47usBx7ScUMqz92WT83foADztmaU9daws10bptJmr9UZte_7OMmIEgiNPJfQhCQpZIbV7nV6Up4Ab_EZfGwzuGJ5M21GyzOUtmUUOHt8pJ6B82emc92yaE_TJz5sLjGldEehD8cg5XK01lA70EQrIXYUeTHKzzR3Tv4IfLbT6C2l-VseNg81W0kZ2FlJhxqjSmREl9nmh_398smWXk883AL92_MwXT7R3iHvKkzergfXVtAfRpDZygxN0a3U2z_xjAuhcOAKu9p_skGcINrxVODck7OLcI1NkcedKgFn0sp39CzuQ&h=mzQ-7OKZwH1hM4QAPztf2UBg1aBh8H-5xT5lcN0HqNU + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/a314e5ea-f0ae-4fbc-8333-d6534e73d1a8 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 7ED4CA48D1384AA886AAB5F0F3387398 Ref B: MWH011020806060 Ref C: 2026-01-20T16:48:51Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-e5b5e0c8-f61f-11f0-996f-002248b6daac?api-version=2025-03-01-preview&t=639045245322843640&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=LzaEDcepc3vMQxa5wVbtShsZspt1O3t1Mes8H47usBx7ScUMqz92WT83foADztmaU9daws10bptJmr9UZte_7OMmIEgiNPJfQhCQpZIbV7nV6Up4Ab_EZfGwzuGJ5M21GyzOUtmUUOHt8pJ6B82emc92yaE_TJz5sLjGldEehD8cg5XK01lA70EQrIXYUeTHKzzR3Tv4IfLbT6C2l-VseNg81W0kZ2FlJhxqjSmREl9nmh_398smWXk883AL92_MwXT7R3iHvKkzergfXVtAfRpDZygxN0a3U2z_xjAuhcOAKu9p_skGcINrxVODck7OLcI1NkcedKgFn0sp39CzuQ&h=mzQ-7OKZwH1hM4QAPztf2UBg1aBh8H-5xT5lcN0HqNU + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 16:48:52 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-e5b5e0c8-f61f-11f0-996f-002248b6daac?api-version=2025-03-01-preview&t=639045245330108330&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=aHACVFSzMS3LV5GDSWJRMGYeZCWS5NnhEnAYTyc5jdwMf1xWyQOIvEvT4QvXsY5DtfgZQg1VaDGGY94kURsiO5A2SVZ_vzfUpxyGRxVH3u93pusSx2aPMw6lgdY8xrdoqRYPPQDyJlTvtyUvnK9cgy05xIJusEy1nQ1Zx3G3O8izWSZelWNQTuG5tBoZLus_0WrQFp1e9Zci16vG9nzXS2AaGOq0seK7fyXymRQoJsG8fGx9igZsV3dwS1jKC_ERmnFieH76ZHZN-ZX_oOFtJZ_Weg-fq6B9jmoZDRHgLYrqhoEXnHPKlTwcy6K_pUpo-7iU_xkwV53SNucUINeCuQ&h=X7bYWU6hCC4HhMjNXdRPQcKXgnOTsZK-ZrPt4PocqWA + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/065b0518-6acf-4375-a095-18d4c8456698 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C56A7D31EE694A4CBD569B6EC83F884D Ref B: CO6AA3150217021 Ref C: 2026-01-20T16:48:52Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-e5b5e0c8-f61f-11f0-996f-002248b6daac?api-version=2025-03-01-preview&t=639045245330108330&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=aHACVFSzMS3LV5GDSWJRMGYeZCWS5NnhEnAYTyc5jdwMf1xWyQOIvEvT4QvXsY5DtfgZQg1VaDGGY94kURsiO5A2SVZ_vzfUpxyGRxVH3u93pusSx2aPMw6lgdY8xrdoqRYPPQDyJlTvtyUvnK9cgy05xIJusEy1nQ1Zx3G3O8izWSZelWNQTuG5tBoZLus_0WrQFp1e9Zci16vG9nzXS2AaGOq0seK7fyXymRQoJsG8fGx9igZsV3dwS1jKC_ERmnFieH76ZHZN-ZX_oOFtJZ_Weg-fq6B9jmoZDRHgLYrqhoEXnHPKlTwcy6K_pUpo-7iU_xkwV53SNucUINeCuQ&h=X7bYWU6hCC4HhMjNXdRPQcKXgnOTsZK-ZrPt4PocqWA + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 16:49:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/4aec7d4c-46ca-4ecf-b800-521a8c276015 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: EC2F60FA4E66407DA571A11036A5111D Ref B: MWH011020809042 Ref C: 2026-01-20T16:49:05Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_sas_token.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_sas_token.yaml new file mode 100644 index 00000000000..e3c3fe737d5 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_sas_token.yaml @@ -0,0 +1,1276 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_sas_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001","name":"cli_test_acr_transfer_export_sas_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_export_pipeline_sas_token","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '423' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:41 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 50F0D9186B9D40C8A012A17842C55D97 Ref B: MWH011020809054 Ref C: 2026-01-20T15:49:42Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.4603026+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.4603026+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.4603026Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.92733+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.9273791+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a20fc204-f617-11f0-b0ce-002248b6daac?api-version=2025-03-01-preview&t=639045209910544365&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=lV66WuNqyZtTQH84JtEULD7EoR48E61Y2tHwP1pTOazDcSElikvv1C8YTJ_H6VVtqL_beNuAF4ogMMLUQe52LpEn9h05TDhLotWV4rDVM1K-RxjCl29OSkFMD5xxMOIKXUmYqUBwxdFr4ETcrtZnQsrcJzehf49IeU5Tp-QdqauWNVpLWGvRgwvypUGqa4rGf9MAcqfjOf6Gmp1ozGOByx6RdmjCSRnvDZBSlZwjcuL9-hQR_G8feiXHKSUPNDHxyEGT9wdutwZ6wU9eqWPEDSC9kKDfJYgmY9zTOOBk6BfL6Efdgzj8MsqouIN2lydUPm1Z4CAa_2K65QFCJUgWrA&h=Z5oIfWZY3AkYA-zmiGuqn9FPHIwdsKzsLfghH2Z8upU + cache-control: + - no-cache + content-length: + - '1559' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:50 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/79e25f4d-6e91-4f03-82d3-921aed31d2f0 + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: 9128E4BDAEB448E89E5036BDB47F3D95 Ref B: MWH011020806054 Ref C: 2026-01-20T15:49:43Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a20fc204-f617-11f0-b0ce-002248b6daac?api-version=2025-03-01-preview&t=639045209910544365&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=lV66WuNqyZtTQH84JtEULD7EoR48E61Y2tHwP1pTOazDcSElikvv1C8YTJ_H6VVtqL_beNuAF4ogMMLUQe52LpEn9h05TDhLotWV4rDVM1K-RxjCl29OSkFMD5xxMOIKXUmYqUBwxdFr4ETcrtZnQsrcJzehf49IeU5Tp-QdqauWNVpLWGvRgwvypUGqa4rGf9MAcqfjOf6Gmp1ozGOByx6RdmjCSRnvDZBSlZwjcuL9-hQR_G8feiXHKSUPNDHxyEGT9wdutwZ6wU9eqWPEDSC9kKDfJYgmY9zTOOBk6BfL6Efdgzj8MsqouIN2lydUPm1Z4CAa_2K65QFCJUgWrA&h=Z5oIfWZY3AkYA-zmiGuqn9FPHIwdsKzsLfghH2Z8upU + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a20fc204-f617-11f0-b0ce-002248b6daac?api-version=2025-03-01-preview&t=639045209921896382&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=lJwM4mnqbfSiOm_aculLDxhD4zQ_LpLL5WQYc9M7qaHkibqczHNQu0bYubwQhr7slZEisi6CXjkViA6dRIi8o-Iny_M57iF7jbPrPWk9QiWoPNqvTFj7FOeHIgufBnlYQ5t3KIx0hAMV9GB9TwpTIFtGiePaQH5fnKwZhuIJGvD3g1NxUfbJbEjgTmrsX4-oSJ_bJoNx6Rx5ixY5Ihm7zv5AHckG2L6B7RceaHUbwOqy7c2bWr_Pb8ne1ayHL3HJ0xHPbOx8e1Hnc4sI4KR5mnR6X18lpCjP4BbRpzVkhaXc5IRHaI7qsA8KKeiTPGVeZCq_ifL38WVw-HQkMAJ2rg&h=7jNhZ7RdyHeO3AOvAxbI_FEcyywm5NdRikB2dC1e2BQ + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:52 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/fb002d23-7a48-4bd9-bc8c-9ab34db0c767 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 8F0B87CD496A4D509A4B9BEF7F081D18 Ref B: CO6AA3150217053 Ref C: 2026-01-20T15:49:51Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.4603026+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.4603026+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.4603026Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.92733+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.9273791+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1560' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:52 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: DB383B2A05094AE6AD121FC168440A13 Ref B: CO6AA3150220023 Ref C: 2026-01-20T15:49:52Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_sas_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001","name":"cli_test_acr_transfer_export_sas_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_export_pipeline_sas_token","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '423' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:54 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: EBAD1F5BD6C0405186659023661A9AD8 Ref B: CO6AA3150219023 Ref C: 2026-01-20T15:49:55Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '{"error":{"code":"ResourceNotFound","message":"The Resource ''Microsoft.KeyVault/vaults/kv000005'' + under resource group ''cli_test_acr_transfer_export_sas_000001'' was not found. + For more details please go to https://aka.ms/ARMResourceNotFoundFix"}}' + headers: + cache-control: + - no-cache + content-length: + - '245' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:55 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-failure-cause: + - gateway + x-msedge-ref: + - 'Ref A: 842A778FF41A4AECAE3865A628E3FBF0 Ref B: CO6AA3150218047 Ref C: 2026-01-20T15:49:55Z' + status: + code: 404 + message: Not Found +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - python/3.12.10 (Windows-11-10.0.26100-SP0) AZURECLI/2.82.0 + method: GET + uri: https://graph.microsoft.com/v1.0/me + response: + body: + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users/$entity","businessPhones":[],"displayName":"Mai + Nguyen","givenName":"Mai","jobTitle":"SOFTWARE ENGINEER","mail":"test@example.com","mobilePhone":null,"officeLocation":"Home + Office","preferredLanguage":null,"surname":"Nguyen","userPrincipalName":"test@example.com","id":"55d6af6c-b4d5-4614-93ee-9417c506c9f1"}' + headers: + cache-control: + - no-cache + content-length: + - '376' + content-type: + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:58 GMT + odata-version: + - '4.0' + request-id: + - c2433514-629d-48ef-935e-34ef26246b4d + strict-transport-security: + - max-age=31536000 + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-ms-ags-diagnostic: + - '{"ServerInfo":{"DataCenter":"West US 2","Slice":"E","Ring":"4","ScaleUnit":"005","RoleInstance":"MWH0EPF000B7AA0"}}' + x-ms-gateway-esc: + - '200' + x-ms-resource-unit: + - '1' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "properties": {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", + "sku": {"name": "standard", "family": "A"}, "accessPolicies": [{"tenantId": + "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": "55d6af6c-b4d5-4614-93ee-9417c506c9f1", + "permissions": {"keys": ["all"], "secrets": ["all"], "certificates": ["all"], + "storage": ["all"]}}], "enableRbacAuthorization": false, "softDeleteRetentionInDays": + 90, "networkAcls": {"bypass": "AzureServices", "defaultAction": "Allow"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + Content-Length: + - '496' + Content-Type: + - application/json + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005","name":"kv000005","type":"Microsoft.KeyVault/vaults","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:59.275Z","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:59.275Z"},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"55d6af6c-b4d5-4614-93ee-9417c506c9f1","permissions":{"keys":["all"],"secrets":["all"],"certificates":["all"],"storage":["all"]}}],"enabledForDeployment":false,"enabledForDiskEncryption":false,"enabledForTemplateDeployment":false,"enableSoftDelete":true,"softDeleteRetentionInDays":90,"enableRbacAuthorization":false,"vaultUri":"https://kv000005.vault.azure.net","provisioningState":"RegisteringDns","publicNetworkAccess":"Enabled"}}' + headers: + cache-control: + - no-cache + content-length: + - '1075' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:00 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-keyvault-service-version: + - 2.2.564.0 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/2480a334-b0dd-4663-a44d-747f67b6be2a + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: F533C6B7A9C74CE2A5B8E4A51A3FB3BD Ref B: CO6AA3150219039 Ref C: 2026-01-20T15:49:58Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005","name":"kv000005","type":"Microsoft.KeyVault/vaults","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:59.275Z","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:59.275Z"},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"55d6af6c-b4d5-4614-93ee-9417c506c9f1","permissions":{"keys":["all"],"secrets":["all"],"certificates":["all"],"storage":["all"]}}],"enabledForDeployment":false,"enabledForDiskEncryption":false,"enabledForTemplateDeployment":false,"enableSoftDelete":true,"softDeleteRetentionInDays":90,"enableRbacAuthorization":false,"vaultUri":"https://kv000005.vault.azure.net/","provisioningState":"RegisteringDns","publicNetworkAccess":"Enabled"}}' + headers: + cache-control: + - no-cache + content-length: + - '1076' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-keyvault-service-version: + - 2.2.564.0 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C795DD62E82F4E459BB57FC202AFEA9E Ref B: CO6AA3150218049 Ref C: 2026-01-20T15:50:01Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005","name":"kv000005","type":"Microsoft.KeyVault/vaults","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:59.275Z","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:59.275Z"},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"55d6af6c-b4d5-4614-93ee-9417c506c9f1","permissions":{"keys":["all"],"secrets":["all"],"certificates":["all"],"storage":["all"]}}],"enabledForDeployment":false,"enabledForDiskEncryption":false,"enabledForTemplateDeployment":false,"enableSoftDelete":true,"softDeleteRetentionInDays":90,"enableRbacAuthorization":false,"vaultUri":"https://kv000005.vault.azure.net/","provisioningState":"Succeeded","publicNetworkAccess":"Enabled"}}' + headers: + cache-control: + - no-cache + content-length: + - '1071' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:32 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-keyvault-service-version: + - 2.2.564.0 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E5484C05FDF441E5B939EA197ABB276C Ref B: MWH011020807031 Ref C: 2026-01-20T15:50:32Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container generate-sas + Connection: + - keep-alive + ParameterSetName: + - --account-name --name --permissions --expiry -o + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4126611Z","key2":"2026-01-20T15:49:19.4126611Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.1782049Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_kkk3gbzfe4x2ix3b2h5g557t6jm7icqokj2uqr4s4u/providers/Microsoft.Storage/storageAccounts/acrtransfer55nlykjdfziyy","name":"acrtransfer55nlykjdfziyy","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2563281Z","primaryEndpoints":{"dfs":"https://acrtransfer55nlykjdfziyy.dfs.core.windows.net/","web":"https://acrtransfer55nlykjdfziyy.z22.web.core.windows.net/","blob":"https://acrtransfer55nlykjdfziyy.blob.core.windows.net/","queue":"https://acrtransfer55nlykjdfziyy.queue.core.windows.net/","table":"https://acrtransfer55nlykjdfziyy.table.core.windows.net/","file":"https://acrtransfer55nlykjdfziyy.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_5ah774x5cbepa2csi6crbqtvdrxdd2pdv7sjqcxsmz/providers/Microsoft.Storage/storageAccounts/acrtransferps6bexl4ncwrs","name":"acrtransferps6bexl4ncwrs","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2094542Z","key2":"2026-01-20T15:49:19.2094542Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0219547Z","primaryEndpoints":{"dfs":"https://acrtransferps6bexl4ncwrs.dfs.core.windows.net/","web":"https://acrtransferps6bexl4ncwrs.z22.web.core.windows.net/","blob":"https://acrtransferps6bexl4ncwrs.blob.core.windows.net/","queue":"https://acrtransferps6bexl4ncwrs.queue.core.windows.net/","table":"https://acrtransferps6bexl4ncwrs.table.core.windows.net/","file":"https://acrtransferps6bexl4ncwrs.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '8620' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:32 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - e85ad3fa-9bc7-4994-92ad-5cf33a8c260d + - 6d8265c0-cd00-4967-9117-a67ade81cb4d + - aea5c425-c7fd-497f-944d-0db5c63ec898 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 06910E757289410E873781B933ADEA13 Ref B: MWH011020806060 Ref C: 2026-01-20T15:50:33Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container generate-sas + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --account-name --name --permissions --expiry -o + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T15:49:19.4126611Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T15:49:19.4126611Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 15:50:33 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/9e6c6cf8-2905-4b8d-8590-f0bad9ed5243 + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: 394993ED351844D4A877AAD4B41AEC2C Ref B: MWH011020806052 Ref C: 2026-01-20T15:50:33Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault secret set + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + ParameterSetName: + - --vault-name -n --value + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://kv000005.vault.azure.net/secrets/sas-token-secret?api-version=7.4 + response: + body: + string: '{"error":{"code":"Unauthorized","message":"AKV10000: Request is missing + a Bearer or PoP token."}}' + headers: + cache-control: + - no-cache + content-length: + - '97' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:34 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000;includeSubDomains + www-authenticate: + - Bearer authorization="https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47", + resource="https://vault.azure.net" + x-content-type-options: + - nosniff + x-ms-keyvault-network-info: + - conn_type=Ipv4;addr=70.37.26.40;act_addr_fam=InterNetwork; + x-ms-keyvault-region: + - westus + x-ms-keyvault-service-version: + - 1.9.2984.2 + status: + code: 401 + message: Unauthorized +- request: + body: '{"value": "se=2026-02-19T15%3A50Z&sp=racwdl&sv=2026-02-06&sr=c&sig=tD7ngSBqErOZF%2B58X24Vggjbp2ZUrYHGW8LjoX7sicw%3D", + "tags": {"file-encoding": "utf-8"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault secret set + Connection: + - keep-alive + Content-Length: + - '153' + Content-Type: + - application/json + ParameterSetName: + - --vault-name -n --value + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://kv000005.vault.azure.net/secrets/sas-token-secret?api-version=7.4 + response: + body: + string: '{"value":"se=2026-02-19T15%3A50Z&sp=racwdl&sv=2026-02-06&sr=c&sig=tD7ngSBqErOZF%2B58X24Vggjbp2ZUrYHGW8LjoX7sicw%3D","id":"https://kv000005.vault.azure.net/secrets/sas-token-secret/7742692fc3a94f8e9d3d10225adffed8","attributes":{"enabled":true,"created":1768924235,"updated":1768924235,"recoveryLevel":"Recoverable+Purgeable","recoverableDays":90},"tags":{"file-encoding":"utf-8"}}' + headers: + cache-control: + - no-cache + content-length: + - '380' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:35 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000;includeSubDomains + x-content-type-options: + - nosniff + x-ms-keyvault-network-info: + - conn_type=Ipv4;addr=70.37.26.40;act_addr_fam=InterNetwork; + x-ms-keyvault-region: + - westus + x-ms-keyvault-service-version: + - 1.9.2984.2 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4126611Z","key2":"2026-01-20T15:49:19.4126611Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.1782049Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_kkk3gbzfe4x2ix3b2h5g557t6jm7icqokj2uqr4s4u/providers/Microsoft.Storage/storageAccounts/acrtransfer55nlykjdfziyy","name":"acrtransfer55nlykjdfziyy","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2563281Z","primaryEndpoints":{"dfs":"https://acrtransfer55nlykjdfziyy.dfs.core.windows.net/","web":"https://acrtransfer55nlykjdfziyy.z22.web.core.windows.net/","blob":"https://acrtransfer55nlykjdfziyy.blob.core.windows.net/","queue":"https://acrtransfer55nlykjdfziyy.queue.core.windows.net/","table":"https://acrtransfer55nlykjdfziyy.table.core.windows.net/","file":"https://acrtransfer55nlykjdfziyy.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_5ah774x5cbepa2csi6crbqtvdrxdd2pdv7sjqcxsmz/providers/Microsoft.Storage/storageAccounts/acrtransferps6bexl4ncwrs","name":"acrtransferps6bexl4ncwrs","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2094542Z","key2":"2026-01-20T15:49:19.2094542Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0219547Z","primaryEndpoints":{"dfs":"https://acrtransferps6bexl4ncwrs.dfs.core.windows.net/","web":"https://acrtransferps6bexl4ncwrs.z22.web.core.windows.net/","blob":"https://acrtransferps6bexl4ncwrs.blob.core.windows.net/","queue":"https://acrtransferps6bexl4ncwrs.queue.core.windows.net/","table":"https://acrtransferps6bexl4ncwrs.table.core.windows.net/","file":"https://acrtransferps6bexl4ncwrs.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '8620' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:36 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - 4fd1b7f8-87ff-44b2-9596-4a7c8eef90fa + - 212b4f71-021f-45fa-bb78-603f8369484d + - 53a6c5d6-0ae8-4b79-b3ea-fe43258bad5c + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: A840F5AF60D8443B9443BD8A822E144A Ref B: MWH011020806023 Ref C: 2026-01-20T15:50:36Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T15:49:19.4126611Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T15:49:19.4126611Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 15:50:37 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/c5f65680-90a3-4649-bba8-240ffb36c40c + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: 987A5D9E86A44ADF88BD5827969BFE75 Ref B: MWH011020808034 Ref C: 2026-01-20T15:50:37Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 15:50:37 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/export-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:37 GMT + etag: + - '"0x8DE583BA806B350"' + last-modified: + - Tue, 20 Jan 2026 15:50:37 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +- request: + body: '{"identity": {"type": "SystemAssigned"}, "properties": {"target": {"type": + "AzureStorageBlobContainer", "uri": "https://acrtransfer000002.blob.core.windows.net/export-container", + "storageAccessMode": "SasToken", "keyVaultUri": "https://kv000005.vault.azure.net/secrets/sas-token-secret"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline create + Connection: + - keep-alive + Content-Length: + - '289' + Content-Type: + - application/json + ParameterSetName: + - -g -r -n --storage-access-mode --secret-uri --storage-container-uri + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"principalId":"d5a9ae8e-1e69-43c4-a9e8-0fba69ea3cc7","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:38.7923174+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:38.7923174+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","keyVaultUri":"https://kv000005.vault.azure.net/secrets/sas-token-secret","storageAccessMode":"SasToken"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '942' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:39 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/cb285285-d18c-4a64-8c2e-d7787172f0f9 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 4A9EFD00CD434D4AB832C2E36469284C Ref B: MWH011020806023 Ref C: 2026-01-20T15:50:38Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline create + Connection: + - keep-alive + ParameterSetName: + - -g -r -n --storage-access-mode --secret-uri --storage-container-uri + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"principalId":"d5a9ae8e-1e69-43c4-a9e8-0fba69ea3cc7","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:38.7923174+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:38.7923174+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","keyVaultUri":"https://kv000005.vault.azure.net/secrets/sas-token-secret","storageAccessMode":"SasToken"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '942' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:40 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/centralus/684fe35a-e6af-4834-acab-d39f9ae88695 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: DBC83F589B5549958DF3712F60850290 Ref B: CO6AA3150219029 Ref C: 2026-01-20T15:50:40Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline delete + Connection: + - keep-alive + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/exportPipelines","identity":{"principalId":"d5a9ae8e-1e69-43c4-a9e8-0fba69ea3cc7","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:38.7923174+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:38.7923174+00:00"},"properties":{"target":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/export-container","keyVaultUri":"https://kv000005.vault.azure.net/secrets/sas-token-secret","storageAccessMode":"SasToken"},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '942' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:41 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/aecb31b9-b431-4baa-bf8c-92a7c7685f72 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: F1D8BCEC7D6045F3BFF4CA3AB7AE6CE8 Ref B: MWH011020807052 Ref C: 2026-01-20T15:50:41Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr export-pipeline delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/exportPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:41 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/fc3ec80b-cf0e-4f37-bfa1-b6cb5339555f + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 67819627562B4290AE085FE7B352B41C Ref B: CO6AA3150220053 Ref C: 2026-01-20T15:50:42Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.4603026+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.4603026+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.4603026Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.92733+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.9273791+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1559' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:43 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-c6bd8977-f617-11f0-b36b-002248b6daac?api-version=2025-03-01-preview&t=639045210440273061&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=Q2gI7HGt7f9I2jSYjeVzHeZnxisw5ZafXykKF3EavLKmRPRI0DnzkW9KNA213N1XJ5vGdX7FtJ6h5XqpmIZCRGD_lKj_cBov0TMTl1C0BVCWzjSlFS-nmI9t3uWu3Wm-WIUF8FPxlZLArsICCY8ocLM6Q_H5fwFGgefnr1yIbm_Au__A3VkWIsOtRohXwpUTUNEJqCOkrgeT2zHjpeZB8uuJBIEvfyU4-NtXamvrQ3dSmxJDdg1gz6ZUxnR1tA3xOinlFpzGER-H5-3j3ypNtVyF8G6aGUBJBRxOZSEQhbUSc3g6Qj3uqrdwDUCtCetBe3lOP3n1Mhx6BD2knkfloQ&h=Nd4P70O1TywvJhaxyelTM94EHYPoOYKlnKh64PekNws + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/e59a0ceb-0d3b-40f5-a354-67c1137eed9f + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: FD1A292028A54D5088FC1E7055B4616F Ref B: CO6AA3150220025 Ref C: 2026-01-20T15:50:43Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-c6bd8977-f617-11f0-b36b-002248b6daac?api-version=2025-03-01-preview&t=639045210440273061&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=Q2gI7HGt7f9I2jSYjeVzHeZnxisw5ZafXykKF3EavLKmRPRI0DnzkW9KNA213N1XJ5vGdX7FtJ6h5XqpmIZCRGD_lKj_cBov0TMTl1C0BVCWzjSlFS-nmI9t3uWu3Wm-WIUF8FPxlZLArsICCY8ocLM6Q_H5fwFGgefnr1yIbm_Au__A3VkWIsOtRohXwpUTUNEJqCOkrgeT2zHjpeZB8uuJBIEvfyU4-NtXamvrQ3dSmxJDdg1gz6ZUxnR1tA3xOinlFpzGER-H5-3j3ypNtVyF8G6aGUBJBRxOZSEQhbUSc3g6Qj3uqrdwDUCtCetBe3lOP3n1Mhx6BD2knkfloQ&h=Nd4P70O1TywvJhaxyelTM94EHYPoOYKlnKh64PekNws + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:44 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-c6bd8977-f617-11f0-b36b-002248b6daac?api-version=2025-03-01-preview&t=639045210447185905&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=WdEsydMuLKPZaZb2kGArDEGNwhhg9T-FWnDmUc_ktNWlgSWxnRuLrpmOKSJKvIz1xTiuXghjzxTiNajvVzYlpBofwYIU5kgwaneJE35nSj7S5Nt1NfzFDO_xzjJZZ-84qDs7-PzbQjFaijvuLBBWzcOb5EC6Am7XktDVrHVg6bGDsJm3-WiCe3axEzoChRxCApPoPrlBKpTEd1VBxVonJhzvdZHZrBvsADJ2EGB3c1XuDU9A_cCrDS2YZtTdJv8ehsR3tX9PWwdosNunluDQBJ9Q5RVGlzbOBY5iM25G8gWnVsG4pMUXDcczPkdgnCGt-BCn7Yd41kvBOyhcykSwxQ&h=XBQ64J4jvAoizBhilD3IsoRyUD05AnxmknRnhUN6lYs + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/3e07f654-11a6-4f2e-87a1-900e0b9b27a5 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: DEB4F0646511436E844CB5D83DB5A2ED Ref B: CO6AA3150217045 Ref C: 2026-01-20T15:50:44Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-c6bd8977-f617-11f0-b36b-002248b6daac?api-version=2025-03-01-preview&t=639045210447185905&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=WdEsydMuLKPZaZb2kGArDEGNwhhg9T-FWnDmUc_ktNWlgSWxnRuLrpmOKSJKvIz1xTiuXghjzxTiNajvVzYlpBofwYIU5kgwaneJE35nSj7S5Nt1NfzFDO_xzjJZZ-84qDs7-PzbQjFaijvuLBBWzcOb5EC6Am7XktDVrHVg6bGDsJm3-WiCe3axEzoChRxCApPoPrlBKpTEd1VBxVonJhzvdZHZrBvsADJ2EGB3c1XuDU9A_cCrDS2YZtTdJv8ehsR3tX9PWwdosNunluDQBJ9Q5RVGlzbOBY5iM25G8gWnVsG4pMUXDcczPkdgnCGt-BCn7Yd41kvBOyhcykSwxQ&h=XBQ64J4jvAoizBhilD3IsoRyUD05AnxmknRnhUN6lYs + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:55 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/e6215747-d86f-41db-acf0-bc2d3d18d6f9 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E5CD2061433B4ACC9E6EA4E815D58EE3 Ref B: MWH011020809025 Ref C: 2026-01-20T15:50:55Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:58 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-keyvault-service-version: + - 2.2.564.0 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/d2d574d9-baea-4d3b-80bd-5610deadd402 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: B963305E01A44DD19A28B4A8C70E0112 Ref B: CO6AA3150217023 Ref C: 2026-01-20T15:50:56Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_without_storage_access_mode_fails.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_without_storage_access_mode_fails.yaml new file mode 100644 index 00000000000..7b0d55e2023 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_export_pipeline_without_storage_access_mode_fails.yaml @@ -0,0 +1,349 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_export_no_mode_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001","name":"cli_test_acr_transfer_export_no_mode_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_export_pipeline_without_storage_access_mode_fails","date":"2026-01-20T16:50:16Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '455' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:23 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 31905DB110AE444A98A504392F010A73 Ref B: CO6AA3150217009 Ref C: 2026-01-20T16:51:23Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:51:24.7761487+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:51:24.7761487+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:51:24.7761487Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:51:27.292817+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:51:27.2928592+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-4032c26a-f620-11f0-a737-002248b6daac?api-version=2025-03-01-preview&t=639045246876199262&c=MIIHpTCCBo2gAwIBAgITfwaGLL2P4u6FqACCuQAEBoYsvTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDIwHhcNMjYwMTE0MDc1MjU0WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOukFAJ-xKc1wqHcYeWufGY68yfC6uiWBosImAAzsfabs-4kk_9b1_6xHrcgojxlFRPdFRRxP75x-HEVS2NYkwmh6UbMaCkglDeeZI5qLNce-Q3Mg9MzlrefsqGefc_rCzGjC3V030ST2yj7q50qfMhTwBVX65hksU_bnzRfXNWNjSiUjHN6HT1Gd5qkKAG0jpbjH5WzNC16Bb1xjzzyf_FwCRA1Z3s90_oGSiW3wVW3o_LJNGJQtcW3P16BPUQ4-0OX6ChFoDiXiI5tVm1wGGry_5gUP7LawdTne9Weusd_K0zAWD-Xxz3t3iNSy2s8qk6pDXhiFaXNHtu8HXR3UMUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMig0KS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAyKDQpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMig0KS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3J0MB0GA1UdDgQWBBTbNMI68hs50KW5I4MzcpfB7kHRJzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBSuecJrXSWIEwb2BwnDl3x7l48dVTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAEOZye8-mNvxee7ICgDiw6ZdmlS2bCbJuAgz72PWM6mnMnePERnsa4xiFnbPLYiyGy4PTXi7JE_X1dagd6ULWXk1R9nuOltYnhtoZ1ichrv8VIGYbqpZtRFnDKx11q6AT72GKho9jEs66yi18Um-pV9chdTeyevYsraqX8LIxRlERlDs3LXsUA1ezUdHWxN18CeVkiTHAaDgw7piDxZh_6mpo0eBo-vqlqg-2a6Fypb7YuOqFlNJcaQ5jBwRRoYUUbIf6a_IliCqQ8R2c9jAdbe59XhnKUsvn6DJ3S4juunOCtzhQCLPr6mAWO1__Ips0JqmbZBPPA9Kunt-GfgxRu0&s=DH1JP5pAeqgnYa-EH3eAbtP2jusTJoaatiW3hEDcwoBj5XhMHkqUDgTL5yB0KplelYycEEAfzzO-SPy0YlGQbWVaYz3FAqkrd2ps6l-hKik4NX7sLleIrKqoT0PrpPGhWrpx6LoCSGaZOlCRQMgY666veszC-rHKsPpsmjPClg8nfYd0MrvQIvshQqOcD0-7ZqjcQ7We9Zl9paWKb8v3wQtuRMNt15jc-0LM8e3omUuG2fCwOyj2l_1AQIc69abqfkqrPQplApyYNCb74RnxRGeCHDyzgxyPx2nUDMN5qoHcyYQxWHW-aycVSkgavcSGEKsMKdSo9xA_p2wRYuKmWA&h=Z-IXgkt3dZfZ2S9APRzfhc8WJBxBa1mYkYLadYfGLM0 + cache-control: + - no-cache + content-length: + - '1564' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:27 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/centralus/e40e08da-7b96-4993-a07c-90ca3fc819e3 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: F4A98BF7F3FF49548062650AA8785896 Ref B: MWH011020809031 Ref C: 2026-01-20T16:51:23Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-4032c26a-f620-11f0-a737-002248b6daac?api-version=2025-03-01-preview&t=639045246876199262&c=MIIHpTCCBo2gAwIBAgITfwaGLL2P4u6FqACCuQAEBoYsvTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDIwHhcNMjYwMTE0MDc1MjU0WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOukFAJ-xKc1wqHcYeWufGY68yfC6uiWBosImAAzsfabs-4kk_9b1_6xHrcgojxlFRPdFRRxP75x-HEVS2NYkwmh6UbMaCkglDeeZI5qLNce-Q3Mg9MzlrefsqGefc_rCzGjC3V030ST2yj7q50qfMhTwBVX65hksU_bnzRfXNWNjSiUjHN6HT1Gd5qkKAG0jpbjH5WzNC16Bb1xjzzyf_FwCRA1Z3s90_oGSiW3wVW3o_LJNGJQtcW3P16BPUQ4-0OX6ChFoDiXiI5tVm1wGGry_5gUP7LawdTne9Weusd_K0zAWD-Xxz3t3iNSy2s8qk6pDXhiFaXNHtu8HXR3UMUCAwEAAaOCBJIwggSOMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHaBggrBgEFBQcBAQSCAcwwggHIMGYGCCsGAQUFBzAChlpodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQkwyUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMig0KS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3J0MFYGCCsGAQUFBzAChkpodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9CTDJQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDAyKDQpLmNydDBWBggrBgEFBQcwAoZKaHR0cDovL2NybDMuYW1lLmdibC9haWEvQkwyUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwMig0KS5jcnQwVgYIKwYBBQUHMAKGSmh0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0JMMlBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3J0MB0GA1UdDgQWBBTbNMI68hs50KW5I4MzcpfB7kHRJzAOBgNVHQ8BAf8EBAMCBaAwggE1BgNVHR8EggEsMIIBKDCCASSgggEgoIIBHIZCaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JshjRodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JshjRodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JshjRodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JshjRodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDIoNCkuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBSuecJrXSWIEwb2BwnDl3x7l48dVTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAEOZye8-mNvxee7ICgDiw6ZdmlS2bCbJuAgz72PWM6mnMnePERnsa4xiFnbPLYiyGy4PTXi7JE_X1dagd6ULWXk1R9nuOltYnhtoZ1ichrv8VIGYbqpZtRFnDKx11q6AT72GKho9jEs66yi18Um-pV9chdTeyevYsraqX8LIxRlERlDs3LXsUA1ezUdHWxN18CeVkiTHAaDgw7piDxZh_6mpo0eBo-vqlqg-2a6Fypb7YuOqFlNJcaQ5jBwRRoYUUbIf6a_IliCqQ8R2c9jAdbe59XhnKUsvn6DJ3S4juunOCtzhQCLPr6mAWO1__Ips0JqmbZBPPA9Kunt-GfgxRu0&s=DH1JP5pAeqgnYa-EH3eAbtP2jusTJoaatiW3hEDcwoBj5XhMHkqUDgTL5yB0KplelYycEEAfzzO-SPy0YlGQbWVaYz3FAqkrd2ps6l-hKik4NX7sLleIrKqoT0PrpPGhWrpx6LoCSGaZOlCRQMgY666veszC-rHKsPpsmjPClg8nfYd0MrvQIvshQqOcD0-7ZqjcQ7We9Zl9paWKb8v3wQtuRMNt15jc-0LM8e3omUuG2fCwOyj2l_1AQIc69abqfkqrPQplApyYNCb74RnxRGeCHDyzgxyPx2nUDMN5qoHcyYQxWHW-aycVSkgavcSGEKsMKdSo9xA_p2wRYuKmWA&h=Z-IXgkt3dZfZ2S9APRzfhc8WJBxBa1mYkYLadYfGLM0 + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-4032c26a-f620-11f0-a737-002248b6daac?api-version=2025-03-01-preview&t=639045246882270180&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=ieXZ_b2AtQDw4tUH_q1IGKXNt0Ap3BdHyzc86MlYgzQELqCF41nyGxaNMT-N8etJoDiwsow-eriovkatkiHggFrP7xxYaHiFmgzzk4WTR0jzpdr3lA9czu-1gxKKFp67_Uulq7KFiZq8aegUZg9TbhQoqdXvfCzoMzHzn9WEuuhAUqD4z5LRiB7PfgrpjKR0OuRZOYtnB7iTllfFebs7H5OLdiLukNwDcY1aOs_gGZ6NCb6ntuwknT-bSKFBk4XludE3UIrv6BnQ5YJTJPdxcmrBWyrWCs1EGJYo2p4_7GBa8ro01obfpy9dfLmYfj-kdDlIaEGbC7ngYxQk2ceI6Q&h=jm5eLKOJV_6qwPhBRgnA9pxHrYR037PN9jCzTDL1G0U + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:27 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/c6a7fb8c-184b-4ecb-b332-1cf455c245d4 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C011991CD83F40FA90DA20DC0DB20103 Ref B: MWH011020809034 Ref C: 2026-01-20T16:51:28Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:51:24.7761487+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:51:24.7761487+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:51:24.7761487Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:51:27.292817+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:51:27.2928592+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1565' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:28 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 2540ABF0E32C44138D4693594CD766C0 Ref B: MWH011020809040 Ref C: 2026-01-20T16:51:28Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T16:50:57.5481181Z","key2":"2026-01-20T16:50:57.5481181Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:50:57.5636983Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:50:57.5636983Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T16:50:57.3293177Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '5352' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:29 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - 4e96f4bb-1edc-4711-9392-4866b988fa52 + - c7a9d0b6-37ca-4ea4-ab11-2cc57500ce73 + - 9f50bf1d-ba24-40cc-ac83-5a045fda576d + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: A19AD6DA91B742F58FA3942CC1939734 Ref B: CO6AA3150218011 Ref C: 2026-01-20T16:51:29Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T16:50:57.5481181Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T16:50:57.5481181Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 16:51:30 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/e7e43a35-9d03-4075-b748-458a20d01d23 + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: 84DEAB684FDC4D8EBD78777F2C6700BD Ref B: CO6AA3150220027 Ref C: 2026-01-20T16:51:30Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 16:51:30 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/export-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 16:51:30 GMT + etag: + - '"0x8DE5844298FAD45"' + last-modified: + - Tue, 20 Jan 2026 16:51:31 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_no_identity.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_no_identity.yaml new file mode 100644 index 00000000000..70c6af475b4 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_no_identity.yaml @@ -0,0 +1,762 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_mi_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001","name":"cli_test_acr_transfer_import_mi_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_import_pipeline_entra_mi_auth_no_identity","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '437' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:41 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 196340383D7C42138389491B954FCED6 Ref B: MWH011020806029 Ref C: 2026-01-20T15:49:42Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.4824124+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.4824124+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.4824124Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.0996378+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.0996978+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a1d57f5c-f617-11f0-8014-002248b6daac?api-version=2025-03-01-preview&t=639045209902168945&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=mGYEmLfxTOqxaxB4tIiw6bRlIrKkK4_qDWOe8LXettUO22infTPYNXyt7Q-Xsh7O7gImTMyWk19rgqFD1TXvLWTM35CWZru-PBy9zMQQzIqLxTyGFO2min9T9mwdxqGTckGwMhaOYOqJxUzHwNZYKWTkmKi9oT1a6eqSFbNxoKiumupuC6uj87ITvXLcjlSVdtY3HAS-Porz-0mnNpNF2ILKRPwDaHwdvucl5vH-zp7UVjcq-IiZPxCsLXJ3dIEFN44ZtShblUeP-5_ejT0zRpHq2oN2cXkBKu4W_BEZwE4q53SuyZ9K6IDIC3GMbuY-AMxrAzn4g_d1hoSxk8LE7w&h=-dplHj5ZXzXoITqKV8dabYGpEIxCQQIRyO_Cr3Bzqug + cache-control: + - no-cache + content-length: + - '1560' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:49 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/4afe3847-850c-430b-989f-86bd4c66f918 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: E36D6C651E5B479D8029948197364B23 Ref B: CO6AA3150217023 Ref C: 2026-01-20T15:49:43Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a1d57f5c-f617-11f0-8014-002248b6daac?api-version=2025-03-01-preview&t=639045209902168945&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=mGYEmLfxTOqxaxB4tIiw6bRlIrKkK4_qDWOe8LXettUO22infTPYNXyt7Q-Xsh7O7gImTMyWk19rgqFD1TXvLWTM35CWZru-PBy9zMQQzIqLxTyGFO2min9T9mwdxqGTckGwMhaOYOqJxUzHwNZYKWTkmKi9oT1a6eqSFbNxoKiumupuC6uj87ITvXLcjlSVdtY3HAS-Porz-0mnNpNF2ILKRPwDaHwdvucl5vH-zp7UVjcq-IiZPxCsLXJ3dIEFN44ZtShblUeP-5_ejT0zRpHq2oN2cXkBKu4W_BEZwE4q53SuyZ9K6IDIC3GMbuY-AMxrAzn4g_d1hoSxk8LE7w&h=-dplHj5ZXzXoITqKV8dabYGpEIxCQQIRyO_Cr3Bzqug + response: + body: + string: '{"status":"Creating"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a1d57f5c-f617-11f0-8014-002248b6daac?api-version=2025-03-01-preview&t=639045209908952330&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=mI_smRrC5jXPUq4fWmoteiLGHrLrocZxgvwlrBqvhUlCmM2aQsp4V_w7hQIvIr7B_MZmP_B6tevqHQwvLQDk672dHMXn5pwmrM13Eoc6kZlBDhx7RjMPzMEWqKw4-0NfmheUzh_kGpxTNymmzKePHnbPDBuWA7YGkB1ZXxyAS0mTwXqmARixW5Ot23qTxz4T6xbiPAMQhHPJdXfN4ZzsElkg7KRk484p4jFWPprTzTn5cL0inXnsqYkUT2FtFmZGJiE4wMe6h1MvXvSCBljOSS7LS2G51dKLLPFJquEN1Ecg6rpr5rb4aI2U6P1dLsjNSpNEeWT4meW808_YYS0rNw&h=kXkt4slKHiFvmMHyOcJwCGie10lArXpMjtv6DLawMuw + cache-control: + - no-cache + content-length: + - '21' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:49 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/5407800a-59af-48b3-b422-785f2419ae43 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: A7FA087CC4D841E19A0E097082DA77CD Ref B: CO6AA3150217009 Ref C: 2026-01-20T15:49:50Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a1d57f5c-f617-11f0-8014-002248b6daac?api-version=2025-03-01-preview&t=639045209902168945&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=mGYEmLfxTOqxaxB4tIiw6bRlIrKkK4_qDWOe8LXettUO22infTPYNXyt7Q-Xsh7O7gImTMyWk19rgqFD1TXvLWTM35CWZru-PBy9zMQQzIqLxTyGFO2min9T9mwdxqGTckGwMhaOYOqJxUzHwNZYKWTkmKi9oT1a6eqSFbNxoKiumupuC6uj87ITvXLcjlSVdtY3HAS-Porz-0mnNpNF2ILKRPwDaHwdvucl5vH-zp7UVjcq-IiZPxCsLXJ3dIEFN44ZtShblUeP-5_ejT0zRpHq2oN2cXkBKu4W_BEZwE4q53SuyZ9K6IDIC3GMbuY-AMxrAzn4g_d1hoSxk8LE7w&h=-dplHj5ZXzXoITqKV8dabYGpEIxCQQIRyO_Cr3Bzqug + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a1d57f5c-f617-11f0-8014-002248b6daac?api-version=2025-03-01-preview&t=639045210016726300&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=ERdpF5dic7VeReToXNy_5VXZelB3ymN5mgjA3SlqYNA18qVNdHtxNpScdSYYP3dqBpJf0vdNz7JPFkNjMA2ay5ptTZS8t8sp9QzuNWODyB-I1Bshg-D1ZIXKVSbMQs7Rj8zm-KNklZMv4jEC0JuXZ2iWLSeNppkcfvNF1Y4aP_9EpeHd3K-ndiBrDyPR7BBMTvbojE2QGVCNoDhZpLkrML5wF5ViSgc466lqFB4_JKM8y7Tt2zYX--JWJbCJG9mp0AsGjLYftOu5Dl4X6tkTMTWt6b-oK7ouKZyCdss_MQzp0kq-cjazYpHjC30fOwgR4kl8lGKQ39SPUcdLd5Ga_A&h=GBBLzo6O7fxJP5hNoz1RzWyXeyZJGNEarZJPZ_5--rQ + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/f30d123e-979a-49c9-8878-a656ad7a088e + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 83AA62B82D8341699E8E431D78465EC3 Ref B: MWH011020806040 Ref C: 2026-01-20T15:50:01Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.4824124+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.4824124+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.4824124Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.0996378+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.0996978+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1561' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 01736BB36A754828BB4DD2C821B008A5 Ref B: MWH011020809054 Ref C: 2026-01-20T15:50:02Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_v3pmgfh3mc56mxxogbhgdoreo3avnp5lbo3odxv4ss/providers/Microsoft.Storage/storageAccounts/acrtransfer2kf3pzn2hjkid","name":"acrtransfer2kf3pzn2hjkid","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4126611Z","key2":"2026-01-20T15:49:19.4126611Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.1782049Z","primaryEndpoints":{"dfs":"https://acrtransfer2kf3pzn2hjkid.dfs.core.windows.net/","web":"https://acrtransfer2kf3pzn2hjkid.z22.web.core.windows.net/","blob":"https://acrtransfer2kf3pzn2hjkid.blob.core.windows.net/","queue":"https://acrtransfer2kf3pzn2hjkid.queue.core.windows.net/","table":"https://acrtransfer2kf3pzn2hjkid.table.core.windows.net/","file":"https://acrtransfer2kf3pzn2hjkid.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_kkk3gbzfe4x2ix3b2h5g557t6jm7icqokj2uqr4s4u/providers/Microsoft.Storage/storageAccounts/acrtransfer55nlykjdfziyy","name":"acrtransfer55nlykjdfziyy","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2563281Z","primaryEndpoints":{"dfs":"https://acrtransfer55nlykjdfziyy.dfs.core.windows.net/","web":"https://acrtransfer55nlykjdfziyy.z22.web.core.windows.net/","blob":"https://acrtransfer55nlykjdfziyy.blob.core.windows.net/","queue":"https://acrtransfer55nlykjdfziyy.queue.core.windows.net/","table":"https://acrtransfer55nlykjdfziyy.table.core.windows.net/","file":"https://acrtransfer55nlykjdfziyy.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_4mrjigta76ajseogsxbc6fjue34kkvfhuczutb77myz/providers/Microsoft.Storage/storageAccounts/acrtransfer6bvzkqzu32fqb","name":"acrtransfer6bvzkqzu32fqb","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4438964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4438964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2094542Z","primaryEndpoints":{"dfs":"https://acrtransfer6bvzkqzu32fqb.dfs.core.windows.net/","web":"https://acrtransfer6bvzkqzu32fqb.z22.web.core.windows.net/","blob":"https://acrtransfer6bvzkqzu32fqb.blob.core.windows.net/","queue":"https://acrtransfer6bvzkqzu32fqb.queue.core.windows.net/","table":"https://acrtransfer6bvzkqzu32fqb.table.core.windows.net/","file":"https://acrtransfer6bvzkqzu32fqb.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_ovgwomuy63wflqjxcaqflapx6a4vbwz74owqyiycej/providers/Microsoft.Storage/storageAccounts/acrtransferbokzmctlf4amn","name":"acrtransferbokzmctlf4amn","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:20.1625933Z","key2":"2026-01-20T15:49:20.1625933Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:20.1625933Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:20.1625933Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.9595165Z","primaryEndpoints":{"dfs":"https://acrtransferbokzmctlf4amn.dfs.core.windows.net/","web":"https://acrtransferbokzmctlf4amn.z22.web.core.windows.net/","blob":"https://acrtransferbokzmctlf4amn.blob.core.windows.net/","queue":"https://acrtransferbokzmctlf4amn.queue.core.windows.net/","table":"https://acrtransferbokzmctlf4amn.table.core.windows.net/","file":"https://acrtransferbokzmctlf4amn.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2250778Z","key2":"2026-01-20T15:49:19.2250778Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2250778Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2250778Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0375793Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_5ah774x5cbepa2csi6crbqtvdrxdd2pdv7sjqcxsmz/providers/Microsoft.Storage/storageAccounts/acrtransferps6bexl4ncwrs","name":"acrtransferps6bexl4ncwrs","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2094542Z","key2":"2026-01-20T15:49:19.2094542Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0219547Z","primaryEndpoints":{"dfs":"https://acrtransferps6bexl4ncwrs.dfs.core.windows.net/","web":"https://acrtransferps6bexl4ncwrs.z22.web.core.windows.net/","blob":"https://acrtransferps6bexl4ncwrs.blob.core.windows.net/","queue":"https://acrtransferps6bexl4ncwrs.queue.core.windows.net/","table":"https://acrtransferps6bexl4ncwrs.table.core.windows.net/","file":"https://acrtransferps6bexl4ncwrs.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '13527' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:03 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - 40e22d6b-646b-4bdf-967f-b7302cf504e6 + - 10dffa31-36df-40bb-9657-7c3324f9be32 + - d8b8dd0a-bc9e-440c-9149-01b9914251a7 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 2A6ECF8D17C0454C8F263B4B31D303F4 Ref B: CO6AA3150218047 Ref C: 2026-01-20T15:50:03Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T15:49:19.2250778Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T15:49:19.2250778Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 15:50:03 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/51192752-ebf0-43ba-8bbc-137cfae75d5f + x-ms-ratelimit-remaining-subscription-resource-requests: + - '798' + x-msedge-ref: + - 'Ref A: A61B3C7DB51A42BD925DF07190106B0B Ref B: MWH011020809034 Ref C: 2026-01-20T15:50:03Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 15:50:04 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/import-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:04 GMT + etag: + - '"0x8DE583B9445354D"' + last-modified: + - Tue, 20 Jan 2026 15:50:04 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +- request: + body: '{"identity": {"type": "SystemAssigned"}, "properties": {"source": {"type": + "AzureStorageBlobContainer", "uri": "https://acrtransfer000002.blob.core.windows.net/import-container", + "storageAccessMode": "ManagedIdentity"}, "trigger": {"sourceTrigger": {"status": + "Enabled"}}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline create + Connection: + - keep-alive + Content-Length: + - '273' + Content-Type: + - application/json + ParameterSetName: + - -g -r -n --storage-access-mode --storage-container-uri + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"principalId":"ecc27fb1-96de-4a31-a253-954243514118","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:05.7179396+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:05.7179396+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","storageAccessMode":"ManagedIdentity"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '923' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:06 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/f6c642da-d67e-4f71-887b-8b9250efb8c1 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: E85161688F2B4E5D8547782D62979259 Ref B: MWH011020809025 Ref C: 2026-01-20T15:50:05Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline create + Connection: + - keep-alive + ParameterSetName: + - -g -r -n --storage-access-mode --storage-container-uri + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"principalId":"ecc27fb1-96de-4a31-a253-954243514118","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:05.7179396+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:05.7179396+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","storageAccessMode":"ManagedIdentity"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '923' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/238e701a-821c-46b0-b88b-1dd0cabd832c + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 93CBED5299EF43D9B83AD555418B40C3 Ref B: CO6AA3150218039 Ref C: 2026-01-20T15:50:07Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline delete + Connection: + - keep-alive + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"principalId":"ecc27fb1-96de-4a31-a253-954243514118","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:05.7179396+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:05.7179396+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","storageAccessMode":"ManagedIdentity"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '923' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:08 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/centralus/2d36726e-54aa-4eca-931b-5d4f1dff2405 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 9679BC81A0BA466898DB3EEC75E6E6B2 Ref B: MWH011020808036 Ref C: 2026-01-20T15:50:08Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:08 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/1da08711-d36e-4a30-a7c5-5a8394008112 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 0F8144DF39CB4B5BB8F9A122CE2513E7 Ref B: MWH011020808029 Ref C: 2026-01-20T15:50:09Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.4824124+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.4824124+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.4824124Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.0996378+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.0996978+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1560' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:10 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-b2d7acb3-f617-11f0-9ba0-002248b6daac?api-version=2025-03-01-preview&t=639045210105723262&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=sdEq0GXMykFJUFO8yD32seWyQNHrTCsDP1QEVpdM5cSNRS_BB4c7un15jWfdJkVhhH_R55XcH74lh4aiyh5hwbhDuw69G9X6StyQhL3dKGCs-wcLNev2w1FUfOTI0QLAZN2tpzxEXAcTzw-oXgHX33VWyYspuSBAuwO_d49AjzCFPs0tMWxkOq8zhTsMClabp8CgPVbUaYSJWKEJ1MqioC0TQsnA70OKjiFVPYdZ2Ogq6C5VyETXL134LAHG4ElaYU5WKb2kPIvdBAxWsmBw14rbe6tjDFehh1aZiB68cd9xi_Ts0HdHuSBA0MIJ0Nl301j7I3mKrQcew-YUhhhqzg&h=1usWqbhpCD02Y5IHyhbIjseqTaKh13nauy5MFa7ymQ0 + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/b242d263-8182-402c-96d2-fcd1f3a31e45 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 4BFD17E613C04BAB813F441F0BB6BF12 Ref B: MWH011020808031 Ref C: 2026-01-20T15:50:09Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-b2d7acb3-f617-11f0-9ba0-002248b6daac?api-version=2025-03-01-preview&t=639045210105723262&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=sdEq0GXMykFJUFO8yD32seWyQNHrTCsDP1QEVpdM5cSNRS_BB4c7un15jWfdJkVhhH_R55XcH74lh4aiyh5hwbhDuw69G9X6StyQhL3dKGCs-wcLNev2w1FUfOTI0QLAZN2tpzxEXAcTzw-oXgHX33VWyYspuSBAuwO_d49AjzCFPs0tMWxkOq8zhTsMClabp8CgPVbUaYSJWKEJ1MqioC0TQsnA70OKjiFVPYdZ2Ogq6C5VyETXL134LAHG4ElaYU5WKb2kPIvdBAxWsmBw14rbe6tjDFehh1aZiB68cd9xi_Ts0HdHuSBA0MIJ0Nl301j7I3mKrQcew-YUhhhqzg&h=1usWqbhpCD02Y5IHyhbIjseqTaKh13nauy5MFa7ymQ0 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:10 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-b2d7acb3-f617-11f0-9ba0-002248b6daac?api-version=2025-03-01-preview&t=639045210112976566&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=hAsRdbwsRr6crnWT2An6f1_Esbn6a0GZCrOLPJsoxbVyHpUmlbphxOF_JrqTyw1256kVX2Lf72kJwXzQU2sbKt8FsmvY2Lpvb47Tq_uJ1-2hrI388nsFwqkKCqV6Fp1GukRjdoV3GKkfADhJZucjfIgy-6Y9jx6xM-Sv69-NbC3PRWJxS1vJh0V-WEq4FxxDNvZkYukYXJe35qF9DnI2XCRpFQ4-pRc_BeiEwlcmHXoVnDjcPf7BtKvDig6IfvsOqeBpmjAsg8rlePqIKgnZELr4KiB71jmM--9A-Cada8pyTLd4UGgiegX4-fK9mdtXuZKFlKPVwuNfifCP0UbAsw&h=X8ZrK6UE944ogEZaIDIhlO8RErdYGBDG2ZbM1hiKlYU + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/6f285f39-1abf-4975-ae37-ab41d2baddc3 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 39E462DF5A15421E803910B78CC8C350 Ref B: MWH011020807023 Ref C: 2026-01-20T15:50:11Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-b2d7acb3-f617-11f0-9ba0-002248b6daac?api-version=2025-03-01-preview&t=639045210112976566&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=hAsRdbwsRr6crnWT2An6f1_Esbn6a0GZCrOLPJsoxbVyHpUmlbphxOF_JrqTyw1256kVX2Lf72kJwXzQU2sbKt8FsmvY2Lpvb47Tq_uJ1-2hrI388nsFwqkKCqV6Fp1GukRjdoV3GKkfADhJZucjfIgy-6Y9jx6xM-Sv69-NbC3PRWJxS1vJh0V-WEq4FxxDNvZkYukYXJe35qF9DnI2XCRpFQ4-pRc_BeiEwlcmHXoVnDjcPf7BtKvDig6IfvsOqeBpmjAsg8rlePqIKgnZELr4KiB71jmM--9A-Cada8pyTLd4UGgiegX4-fK9mdtXuZKFlKPVwuNfifCP0UbAsw&h=X8ZrK6UE944ogEZaIDIhlO8RErdYGBDG2ZbM1hiKlYU + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:21 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/836d9343-03e9-4d3b-9b9a-53dc9c48aa47 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 3AE3C2AC3AD84BFDBA867058BFA7E63A Ref B: MWH011020806023 Ref C: 2026-01-20T15:50:21Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_user_assigned.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_user_assigned.yaml new file mode 100644 index 00000000000..9f925e9cd63 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_user_assigned.yaml @@ -0,0 +1,914 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_uai_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001","name":"cli_test_acr_transfer_import_uai_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_import_pipeline_entra_mi_auth_user_assigned","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '441' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:42 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 2395B857AA9B4CE4AEA0EA538B0F957B Ref B: MWH011020808052 Ref C: 2026-01-20T15:49:42Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.6761582+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.6761582+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.6761582Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.8336866+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.8337229+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2713338-f617-11f0-96e1-002248b6daac?api-version=2025-03-01-preview&t=639045209910356056&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=sTCbOm2jZSjF6sljKL8UI7I5yClT1YaIJnqnFDJkVo_9UOrWQUidxdYcjRpipJIUjL7ra-JybckLVk64DF0WCCkOgqF7sUTTwOEtiRmSUhKsXsqBJpqD9CA1xvsmjMQ2eOIATUXbNBV4MAACgeCqRY55uLsB2WrExxmzYEHAmLBkPFjEHjihitQc5umUI04r9_mjsCQunTe3l_OH7O4c4hgS6yGRlgBiwkIXNTZljcQYNUcMrnnz_WMHcs1IzJktXRvYHyoOZqwLsZhgMghJ1JbPt5zLzNgFWhVgBLMzWekyAuDw4Mux99Kc3T99Lo6C0UWT2zdHScOgD4o6CDrl4Q&h=KpOvgxpmGhSxBx9NKNyfu-Y7Lons81fYfxeN9pS5FtE + cache-control: + - no-cache + content-length: + - '1561' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:50 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/0adf1820-40bb-4bce-b6f1-36782fba9eb0 + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: FDBB96E1406D49C6A125570C79BF675F Ref B: MWH011020807023 Ref C: 2026-01-20T15:49:43Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2713338-f617-11f0-96e1-002248b6daac?api-version=2025-03-01-preview&t=639045209910356056&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=sTCbOm2jZSjF6sljKL8UI7I5yClT1YaIJnqnFDJkVo_9UOrWQUidxdYcjRpipJIUjL7ra-JybckLVk64DF0WCCkOgqF7sUTTwOEtiRmSUhKsXsqBJpqD9CA1xvsmjMQ2eOIATUXbNBV4MAACgeCqRY55uLsB2WrExxmzYEHAmLBkPFjEHjihitQc5umUI04r9_mjsCQunTe3l_OH7O4c4hgS6yGRlgBiwkIXNTZljcQYNUcMrnnz_WMHcs1IzJktXRvYHyoOZqwLsZhgMghJ1JbPt5zLzNgFWhVgBLMzWekyAuDw4Mux99Kc3T99Lo6C0UWT2zdHScOgD4o6CDrl4Q&h=KpOvgxpmGhSxBx9NKNyfu-Y7Lons81fYfxeN9pS5FtE + response: + body: + string: '{"status":"Creating"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2713338-f617-11f0-96e1-002248b6daac?api-version=2025-03-01-preview&t=639045209918942534&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=cdyd4Q0c3FZKLIYpIm2DPTvwnvv1V3dLb2YkihC_BI5Wy5ikF8C3BO89NRQuA3uQz-Zdk0ItCxnvph-uneQFL6pmebjzprHXoMUaWtQRYON9oNKUosAY6o-kxAnZRp2b3xXzevJqH1lXxYV1mrzNOI9C83_QnryHwHlKR50Ht235jLE9bv24daEXBwtTsPhwsqtEEczTQLv_wGbxY05NqtDr672op0dsyja9SjjxzNzjGuX1aRUqwHz0iJ8RpL2EDZRBRrX95V9kAczKff4RZGT8L4hsbhO3kvy0_QnyNNKIlMJT3mSy5T4H1Y4axOFL_iu8sWnht9R5PuWLKy9L2g&h=DeJjDZwOF_RgXrRk933RT6yBMYCDpGcHuCXLG4_5aqQ + cache-control: + - no-cache + content-length: + - '21' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:51 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/ee615813-e068-417d-b883-1006934ea706 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 11639DABA765496FBC96914448AB4A7D Ref B: MWH011020806029 Ref C: 2026-01-20T15:49:51Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2713338-f617-11f0-96e1-002248b6daac?api-version=2025-03-01-preview&t=639045209910356056&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=sTCbOm2jZSjF6sljKL8UI7I5yClT1YaIJnqnFDJkVo_9UOrWQUidxdYcjRpipJIUjL7ra-JybckLVk64DF0WCCkOgqF7sUTTwOEtiRmSUhKsXsqBJpqD9CA1xvsmjMQ2eOIATUXbNBV4MAACgeCqRY55uLsB2WrExxmzYEHAmLBkPFjEHjihitQc5umUI04r9_mjsCQunTe3l_OH7O4c4hgS6yGRlgBiwkIXNTZljcQYNUcMrnnz_WMHcs1IzJktXRvYHyoOZqwLsZhgMghJ1JbPt5zLzNgFWhVgBLMzWekyAuDw4Mux99Kc3T99Lo6C0UWT2zdHScOgD4o6CDrl4Q&h=KpOvgxpmGhSxBx9NKNyfu-Y7Lons81fYfxeN9pS5FtE + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2713338-f617-11f0-96e1-002248b6daac?api-version=2025-03-01-preview&t=639045210026966558&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=Hb71yK1j2B1VRYJrVspUhaVTJWmGUyFRLLKF6D8wisxwj6J6l9U6fwQcuuzuHfCySInePY6o0cjGxrHU8jW1Fs6l5FlVZcSCQjS0YQ5-bz2wOnnXpdK1G3Uyktnb6yq-yM5tfC1qBLyIglEyz5uibR-qVDJKwdbg9lbuuRE9r4yfXISOUU71_yL9pH10VVfoq9PAnw3qtbP6Ix1wnLpHEXoPQUUzCx3eQvqxQLmhpbbQmsmZFY51guvxubRi4PqBTK4qwlQL-uQFf4M8CoqIWNvKV6OLjE-cdocHwAGm8WYXDptgmTT2B48020Ae-Q1wk-8oBhdnevvSXNgxJmoy5A&h=2yjI1CWN2zYs8xdVFh6qgjRLJUwPPy3pdIORjhjzFhU + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:02 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/ef7f0fd3-8b5d-4733-883d-b0fc3ff97309 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B5534454A4934F7DA7C53CCD9B1CE658 Ref B: MWH011020808062 Ref C: 2026-01-20T15:50:02Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.6761582+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.6761582+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.6761582Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.8336866+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.8337229+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1562' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:03 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: C458A13D321148AEB00D201C9406934C Ref B: CO6AA3150220045 Ref C: 2026-01-20T15:50:03Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - identity create + Connection: + - keep-alive + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_uai_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001","name":"cli_test_acr_transfer_import_uai_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_import_pipeline_entra_mi_auth_user_assigned","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '441' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 173B99F3BAD64D9D997F55456389FF03 Ref B: CO6AA3150217017 Ref C: 2026-01-20T15:50:04Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus"}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - identity create + Connection: + - keep-alive + Content-Length: + - '22' + Content-Type: + - application/json + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005?api-version=2024-11-30 + response: + body: + string: '{"location":"westus","tags":{},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005","name":"identity000005","type":"Microsoft.ManagedIdentity/userAssignedIdentities","properties":{"isolationScope":"None","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","principalId":"48ee5be7-6e8e-4226-811e-b6f8800763a3","clientId":"6aa49b94-cee5-4d3b-a7a2-21a98428c55d"}}' + headers: + cache-control: + - no-cache + content-length: + - '493' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:05 GMT + expires: + - '-1' + location: + - /subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005 + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/88c87e96-3459-4262-91eb-af51392f03da + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: FCEDF72D169B4139AB9ABDF56B0C5F93 Ref B: MWH011020808034 Ref C: 2026-01-20T15:50:04Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_v3pmgfh3mc56mxxogbhgdoreo3avnp5lbo3odxv4ss/providers/Microsoft.Storage/storageAccounts/acrtransfer2kf3pzn2hjkid","name":"acrtransfer2kf3pzn2hjkid","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4126611Z","key2":"2026-01-20T15:49:19.4126611Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.1782049Z","primaryEndpoints":{"dfs":"https://acrtransfer2kf3pzn2hjkid.dfs.core.windows.net/","web":"https://acrtransfer2kf3pzn2hjkid.z22.web.core.windows.net/","blob":"https://acrtransfer2kf3pzn2hjkid.blob.core.windows.net/","queue":"https://acrtransfer2kf3pzn2hjkid.queue.core.windows.net/","table":"https://acrtransfer2kf3pzn2hjkid.table.core.windows.net/","file":"https://acrtransfer2kf3pzn2hjkid.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_kkk3gbzfe4x2ix3b2h5g557t6jm7icqokj2uqr4s4u/providers/Microsoft.Storage/storageAccounts/acrtransfer55nlykjdfziyy","name":"acrtransfer55nlykjdfziyy","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2563281Z","primaryEndpoints":{"dfs":"https://acrtransfer55nlykjdfziyy.dfs.core.windows.net/","web":"https://acrtransfer55nlykjdfziyy.z22.web.core.windows.net/","blob":"https://acrtransfer55nlykjdfziyy.blob.core.windows.net/","queue":"https://acrtransfer55nlykjdfziyy.queue.core.windows.net/","table":"https://acrtransfer55nlykjdfziyy.table.core.windows.net/","file":"https://acrtransfer55nlykjdfziyy.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_4mrjigta76ajseogsxbc6fjue34kkvfhuczutb77myz/providers/Microsoft.Storage/storageAccounts/acrtransfer6bvzkqzu32fqb","name":"acrtransfer6bvzkqzu32fqb","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4438964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4438964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2094542Z","primaryEndpoints":{"dfs":"https://acrtransfer6bvzkqzu32fqb.dfs.core.windows.net/","web":"https://acrtransfer6bvzkqzu32fqb.z22.web.core.windows.net/","blob":"https://acrtransfer6bvzkqzu32fqb.blob.core.windows.net/","queue":"https://acrtransfer6bvzkqzu32fqb.queue.core.windows.net/","table":"https://acrtransfer6bvzkqzu32fqb.table.core.windows.net/","file":"https://acrtransfer6bvzkqzu32fqb.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_uai_ovgwomuy63wflqjxcaqflapx6a4vbwz74owqyiycej/providers/Microsoft.Storage/storageAccounts/acrtransferbokzmctlf4amn","name":"acrtransferbokzmctlf4amn","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:20.1625933Z","key2":"2026-01-20T15:49:20.1625933Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:20.1625933Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:20.1625933Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.9595165Z","primaryEndpoints":{"dfs":"https://acrtransferbokzmctlf4amn.dfs.core.windows.net/","web":"https://acrtransferbokzmctlf4amn.z22.web.core.windows.net/","blob":"https://acrtransferbokzmctlf4amn.blob.core.windows.net/","queue":"https://acrtransferbokzmctlf4amn.queue.core.windows.net/","table":"https://acrtransferbokzmctlf4amn.table.core.windows.net/","file":"https://acrtransferbokzmctlf4amn.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_xfoq3p2ykdz4qjh5duhuaqm27dca63dknijj4s4ky3f/providers/Microsoft.Storage/storageAccounts/acrtransferlunk6mhsf6omi","name":"acrtransferlunk6mhsf6omi","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2250778Z","key2":"2026-01-20T15:49:19.2250778Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2250778Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2250778Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0375793Z","primaryEndpoints":{"dfs":"https://acrtransferlunk6mhsf6omi.dfs.core.windows.net/","web":"https://acrtransferlunk6mhsf6omi.z22.web.core.windows.net/","blob":"https://acrtransferlunk6mhsf6omi.blob.core.windows.net/","queue":"https://acrtransferlunk6mhsf6omi.queue.core.windows.net/","table":"https://acrtransferlunk6mhsf6omi.table.core.windows.net/","file":"https://acrtransferlunk6mhsf6omi.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.2094542Z","key2":"2026-01-20T15:49:19.2094542Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.2094542Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.0219547Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '13528' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:06 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - 525ad319-82e3-4a02-9ffb-3341ba27580a + - f8553b69-3a08-495e-ae17-7398f16d28fa + - 02370740-2457-4b95-9039-a58fb4d46133 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: FF48E4E9DAFD476AB9606EF1EBE0737F Ref B: CO6AA3150219023 Ref C: 2026-01-20T15:50:06Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T15:49:19.2094542Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T15:49:19.2094542Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 15:50:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/66503243-571f-493e-a0dc-ac175ea00d9a + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: BA7F39E2F7444BF38C1F0746FEBD1945 Ref B: MWH011020808023 Ref C: 2026-01-20T15:50:07Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 15:50:07 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/import-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:07 GMT + etag: + - '"0x8DE583B96542F38"' + last-modified: + - Tue, 20 Jan 2026 15:50:08 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +- request: + body: '{"identity": {"type": "UserAssigned", "userAssignedIdentities": {"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005": + {}}}, "properties": {"source": {"type": "AzureStorageBlobContainer", "uri": + "https://acrtransfer000002.blob.core.windows.net/import-container", "storageAccessMode": + "ManagedIdentity"}, "trigger": {"sourceTrigger": {"status": "Enabled"}}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline create + Connection: + - keep-alive + Content-Length: + - '487' + Content-Type: + - application/json + ParameterSetName: + - -g -r -n --storage-access-mode --storage-container-uri --assign-identity + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"type":"userAssigned","userAssignedIdentities":{"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005":{"principalId":"48ee5be7-6e8e-4226-811e-b6f8800763a3","clientId":"6aa49b94-cee5-4d3b-a7a2-21a98428c55d"}}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:09.0261287+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:09.0261287+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","storageAccessMode":"ManagedIdentity"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '1134' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:09 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/fc7ab7b7-a11a-4a35-9302-f5251b98f562 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 8B81CC17776D457AA245D6AFB0BC9104 Ref B: CO6AA3150220047 Ref C: 2026-01-20T15:50:08Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline create + Connection: + - keep-alive + ParameterSetName: + - -g -r -n --storage-access-mode --storage-container-uri --assign-identity + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"type":"userAssigned","userAssignedIdentities":{"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005":{"principalId":"48ee5be7-6e8e-4226-811e-b6f8800763a3","clientId":"6aa49b94-cee5-4d3b-a7a2-21a98428c55d"}}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:09.0261287+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:09.0261287+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","storageAccessMode":"ManagedIdentity"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '1134' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:09 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/33ac0425-a254-479f-95ce-3af171158007 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: EA1BF132D3E94C5A9736A660F5060568 Ref B: MWH011020808060 Ref C: 2026-01-20T15:50:10Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline delete + Connection: + - keep-alive + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"type":"userAssigned","userAssignedIdentities":{"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005":{"principalId":"48ee5be7-6e8e-4226-811e-b6f8800763a3","clientId":"6aa49b94-cee5-4d3b-a7a2-21a98428c55d"}}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:09.0261287+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:09.0261287+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","storageAccessMode":"ManagedIdentity"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '1134' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:10 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/cb66848b-70d9-4daf-8332-d057392a5e6b + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 0E4F1DBC89104372B8586873A92630F0 Ref B: MWH011020807034 Ref C: 2026-01-20T15:50:10Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:10 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/fe41f470-b62a-442d-88d6-1e62585f6364 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 9C94E4CAA95A4283BC2009108CAE7925 Ref B: MWH011020808040 Ref C: 2026-01-20T15:50:11Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.6761582+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.6761582+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.6761582Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:50.8336866+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:50.8337229+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1561' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:12 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-b431eff0-f617-11f0-b398-002248b6daac?api-version=2025-03-01-preview&t=639045210127112531&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=KsxMJO5R7am_Ueo5bswMgx9piBHpfSQ4EuYrrNYHo_TSbJ88txbWUo4UVsIIqlnSiWuCYkW2pWUx0EfAyPfmQKFTnajfIm3GhrvZXCmqhG7u68IOyd3vySBoP7NGNsjhN1_9PKn6WioO9_1rL-AtHy36WWNevNU0Sia7apt0kT4IPcHdU4q6WA9CQgM98wS6J9JHFrqv63RAFMP1ATf9WXE5bQpQb490mWPlqyN08cY4g1PIjY6Zrivr_3Ild1jMv8fP1uPy4Zt3jOFNYOyTRzWPtxZjnIM2lcM53qt_ipnbXGenl_rMPSKuhDyc1d3o7hb7kOkjv-oERfcLgYxRyA&h=djaD337_lV5uY5GGIbRnedi4OLjae7_zy6OAEB_bXyk + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/597ba9d9-fc4e-43cd-970e-5842f7f119dd + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 65318036AC3E4032892BD6289768D238 Ref B: MWH011020809062 Ref C: 2026-01-20T15:50:12Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-b431eff0-f617-11f0-b398-002248b6daac?api-version=2025-03-01-preview&t=639045210127112531&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=KsxMJO5R7am_Ueo5bswMgx9piBHpfSQ4EuYrrNYHo_TSbJ88txbWUo4UVsIIqlnSiWuCYkW2pWUx0EfAyPfmQKFTnajfIm3GhrvZXCmqhG7u68IOyd3vySBoP7NGNsjhN1_9PKn6WioO9_1rL-AtHy36WWNevNU0Sia7apt0kT4IPcHdU4q6WA9CQgM98wS6J9JHFrqv63RAFMP1ATf9WXE5bQpQb490mWPlqyN08cY4g1PIjY6Zrivr_3Ild1jMv8fP1uPy4Zt3jOFNYOyTRzWPtxZjnIM2lcM53qt_ipnbXGenl_rMPSKuhDyc1d3o7hb7kOkjv-oERfcLgYxRyA&h=djaD337_lV5uY5GGIbRnedi4OLjae7_zy6OAEB_bXyk + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:12 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-b431eff0-f617-11f0-b398-002248b6daac?api-version=2025-03-01-preview&t=639045210134679765&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=YL2NlDS4DKMUCWy73Z_wYWBSnQSmWR0hjNHCkazkaaASqlnmqw0knoPM8-y47JlJzk1ilK9lVnkF39OziLW0fLVbYBdZ846ZUMR8Qt3yT4U4NF3PMksOuoYeTmYbcM3KfpueoC5ZYNFRWcT0lDCe0tZAVipx1Q0eOGpNvt_rkL8j7BE9PkKCM6tSQB52cFK5jXUAxXcybbnn3y1Tr1cSs-mDj04qkBwnmV5ZjVrhdmr_4bA-HHXVdM92AYy2sDMAz-8m4r2IJdC2Gdp5JvadJve9GV_uPzToIuauCWRsbTd5T6RI5DNnBhP1Wc2QZV_HrNKk1GcgH2np9KL8D3ZMvg&h=jLpvlgCpa46h8zSuWZOS4fkPsUPkG4tUOm1gCJdR99M + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/ad256331-fe1b-4365-b5e4-268e862a379f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 4420909E9C40436584DED6286359B44E Ref B: MWH011020806052 Ref C: 2026-01-20T15:50:13Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-b431eff0-f617-11f0-b398-002248b6daac?api-version=2025-03-01-preview&t=639045210134679765&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=YL2NlDS4DKMUCWy73Z_wYWBSnQSmWR0hjNHCkazkaaASqlnmqw0knoPM8-y47JlJzk1ilK9lVnkF39OziLW0fLVbYBdZ846ZUMR8Qt3yT4U4NF3PMksOuoYeTmYbcM3KfpueoC5ZYNFRWcT0lDCe0tZAVipx1Q0eOGpNvt_rkL8j7BE9PkKCM6tSQB52cFK5jXUAxXcybbnn3y1Tr1cSs-mDj04qkBwnmV5ZjVrhdmr_4bA-HHXVdM92AYy2sDMAz-8m4r2IJdC2Gdp5JvadJve9GV_uPzToIuauCWRsbTd5T6RI5DNnBhP1Wc2QZV_HrNKk1GcgH2np9KL8D3ZMvg&h=jLpvlgCpa46h8zSuWZOS4fkPsUPkG4tUOm1gCJdR99M + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:23 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/7164effc-ab57-46bb-a610-bae452e83c06 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 522162414BF64489AA5660E1152A663C Ref B: CO6AA3150217051 Ref C: 2026-01-20T15:50:24Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - identity delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_uai_000001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity000005?api-version=2024-11-30 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:27 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/372205c4-26c9-4d63-b982-6b687e797cfc + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: F27631E6CB9D4F0399B185A46D9A0565 Ref B: CO6AA3150217033 Ref C: 2026-01-20T15:50:24Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_with_secret_uri_fails.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_with_secret_uri_fails.yaml new file mode 100644 index 00000000000..8ff969d1fac --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_entra_mi_auth_with_secret_uri_fails.yaml @@ -0,0 +1,499 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_mi_invalid_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001","name":"cli_test_acr_transfer_import_mi_invalid_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_import_pipeline_entra_mi_auth_with_secret_uri_fails","date":"2026-01-20T16:48:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '463' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:38 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 5BABA53F2A8F4DEEB1A8750861645474 Ref B: CO6AA3150217029 Ref C: 2026-01-20T16:48:38Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:48:39.6731106+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:48:39.6731106+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:48:39.6731106Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:48:47.4088275+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:48:47.4088659+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-de44a74b-f61f-11f0-b564-002248b6daac?api-version=2025-03-01-preview&t=639045245275800621&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=dIyGPn9aFbqPhpEE3dK1hIldEHmf89JXQEUaxamsN5UPyHoImnldIKscXBW07FfIjr6z-hMUtpwsiDzNYKdOg_VctwKOFUDW59xpwO-UPARLt2Y0HBBXDwCUR2td9cbrnV0U6B4_RxmK6OJ3qlqUu-SLyEn4kvYi5CAJ2i5s2LTSajcNqxJ4YFPWXFFlDX93JblOUncRpPPzF4gx7lVt3_37Bi-CekIBdse_978mMAKYDp6epHOveACrSF3XDICMEFNAj1_TqcVp2QM7AuOozWRkfE0_jvaWq8oAik5KEFGd7cz4YbBQTmNjQFQROxWp05tELoYrUa0NQeD-5MoXXA&h=lx3Yun174Z0xaV4i3gfOE3sR35v9iYqOc5wRiZ4q4UU + cache-control: + - no-cache + content-length: + - '1568' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/f33c0ee1-b4ba-4caa-9576-f0b59ad5e3dd + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: 0B3B0EE4A00749A08FDC58841D9FC1D7 Ref B: CO6AA3150219039 Ref C: 2026-01-20T16:48:39Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-de44a74b-f61f-11f0-b564-002248b6daac?api-version=2025-03-01-preview&t=639045245275800621&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=dIyGPn9aFbqPhpEE3dK1hIldEHmf89JXQEUaxamsN5UPyHoImnldIKscXBW07FfIjr6z-hMUtpwsiDzNYKdOg_VctwKOFUDW59xpwO-UPARLt2Y0HBBXDwCUR2td9cbrnV0U6B4_RxmK6OJ3qlqUu-SLyEn4kvYi5CAJ2i5s2LTSajcNqxJ4YFPWXFFlDX93JblOUncRpPPzF4gx7lVt3_37Bi-CekIBdse_978mMAKYDp6epHOveACrSF3XDICMEFNAj1_TqcVp2QM7AuOozWRkfE0_jvaWq8oAik5KEFGd7cz4YbBQTmNjQFQROxWp05tELoYrUa0NQeD-5MoXXA&h=lx3Yun174Z0xaV4i3gfOE3sR35v9iYqOc5wRiZ4q4UU + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-de44a74b-f61f-11f0-b564-002248b6daac?api-version=2025-03-01-preview&t=639045245282488830&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=g0ASyoBuUKmEGZgkehKcpPPtJL5wbJiSg0EWMz3k9X2G39Zj8VA0QT_hLwj8eYbNoBOHcY2IrenkB9mPFK7UDR54FzuTUVbDrw_ZNx1JMFe97QwzxCzkTlKaubss52DSwRQe6D0SMlI291WbmLA3YxMCi-skSrADPGhTztn5ZWIjJDkx2mHOx7WbdWax1Gi_jsog9IIhrHTPi6d--O2TTyIbdUwk-jYF3Gm1YDhdDbw_D1aGpck5SAw7D-GAyHmxf4YT7YAmmMmKrYvAyezWBYPP1OVzJf24nE-FgcmVTcwGyrydOxE8Lxlv38L04RThwEP60cjVUrMM0-7ZSTW0nQ&h=h28F37OwSgONswpUsLGpyMKHxWZe_hWMsR5_aga7fvM + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:48 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/cf7d82e5-7e3a-436a-ae9b-71007c8418e6 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 54950AF7013F4B0E8C1F707BE3CFAE66 Ref B: MWH011020806062 Ref C: 2026-01-20T16:48:48Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:48:39.6731106+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:48:39.6731106+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:48:39.6731106Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:48:47.4088275+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:48:47.4088659+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1569' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:48 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 53F212799FE54477A15F2F2C1613F6B2 Ref B: CO6AA3150219049 Ref C: 2026-01-20T16:48:48Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T16:48:13.3703440Z","key2":"2026-01-20T16:48:13.3703440Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:48:13.3703440Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:48:13.3703440Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T16:48:13.1672654Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_mi_invalid_g66hshsdbveqzxy2xrtfcceheeyxv6m4ywy/providers/Microsoft.Storage/storageAccounts/acrtransferftt77mdtwzini","name":"acrtransferftt77mdtwzini","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T16:48:13.1048271Z","key2":"2026-01-20T16:48:13.1048271Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:48:13.1048271Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:48:13.1048271Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T16:48:12.9016358Z","primaryEndpoints":{"dfs":"https://acrtransferftt77mdtwzini.dfs.core.windows.net/","web":"https://acrtransferftt77mdtwzini.z22.web.core.windows.net/","blob":"https://acrtransferftt77mdtwzini.blob.core.windows.net/","queue":"https://acrtransferftt77mdtwzini.queue.core.windows.net/","table":"https://acrtransferftt77mdtwzini.table.core.windows.net/","file":"https://acrtransferftt77mdtwzini.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '6991' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:49 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - d0e4d0a4-745e-4ce3-abbb-38160424a7b1 + - 212dea15-07af-43ff-b112-40af8e9863b6 + - ad3e6ae2-2b68-4d9a-8db9-81ea5f2990e3 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 340F1C19999146B6AD574C75D377CF56 Ref B: CO6AA3150219009 Ref C: 2026-01-20T16:48:49Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T16:48:13.3703440Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T16:48:13.3703440Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 16:48:49 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/b5a6f18f-ae07-49ae-b66e-7c7a6fc721a0 + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: FAB52A19AA37423BB0982FF551615A6A Ref B: MWH011020809062 Ref C: 2026-01-20T16:48:50Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 16:48:50 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/import-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 16:48:50 GMT + etag: + - '"0x8DE5843CA518D20"' + last-modified: + - Tue, 20 Jan 2026 16:48:51 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_mi_invalid_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:48:39.6731106+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:48:39.6731106+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:48:39.6731106Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:48:47.4088275+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:48:47.4088659+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1568' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:48:52 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-e646563d-f61f-11f0-80a5-002248b6daac?api-version=2025-03-01-preview&t=639045245327959929&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=DWqo6VhDT2MnIJw2MBG6ZMhBwhbP9M2WIO5JINDPSyG16eA6eebSu2VfUqTgHJ8Kmg86FOnujNX1wCuYedSsnGSPKgF_jK4fBpwYwFyeXSbs6np_gajPK6EZXB9oz24arL77AeTDxgFvfCNET0lye-YmYwvsLcOFnywD4uzdegghzXV436jCk_VA-2hci2I18G_08mSXn2WrSQrwC8h5OJLj7HPQdHKuQtHvcnNBc3P7-IJ-CkzE_BUaFXkGdVtN6PVxSxzvXIcbXOh7iyDxEF0-OAeb4MPV--CSLYlOhyA6q-mCZ_zXT6H9RmZ7x8P3vCys7Kd8HiYSsPcuGQntiw&h=wjn5C0acQnS47PSLLhisDQr9FHP0QWlEdbJJWhgPY4s + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/50d52597-4a4c-4c9c-a5e8-b56fc2f3a781 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 26D5F84BF7404C629F1BEEE062CF01AA Ref B: MWH011020807040 Ref C: 2026-01-20T16:48:52Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-e646563d-f61f-11f0-80a5-002248b6daac?api-version=2025-03-01-preview&t=639045245327959929&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=DWqo6VhDT2MnIJw2MBG6ZMhBwhbP9M2WIO5JINDPSyG16eA6eebSu2VfUqTgHJ8Kmg86FOnujNX1wCuYedSsnGSPKgF_jK4fBpwYwFyeXSbs6np_gajPK6EZXB9oz24arL77AeTDxgFvfCNET0lye-YmYwvsLcOFnywD4uzdegghzXV436jCk_VA-2hci2I18G_08mSXn2WrSQrwC8h5OJLj7HPQdHKuQtHvcnNBc3P7-IJ-CkzE_BUaFXkGdVtN6PVxSxzvXIcbXOh7iyDxEF0-OAeb4MPV--CSLYlOhyA6q-mCZ_zXT6H9RmZ7x8P3vCys7Kd8HiYSsPcuGQntiw&h=wjn5C0acQnS47PSLLhisDQr9FHP0QWlEdbJJWhgPY4s + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 16:48:53 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-e646563d-f61f-11f0-80a5-002248b6daac?api-version=2025-03-01-preview&t=639045245338187599&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=Ykhh1yejRq1gYe_AiClyVKKbk4xU_fJD3i21QRHN0xz0ovqnFQJ4f6sRXZHSYKUGm0T9tb8dTP4NIe_3ozCgzQ_rxFzZBaduVYnxWPhxfXoyZLOfFlnNMtQmGLGj9BR5w_rDEDKcUGIWKcYAwMK1q5tdXz-nGeZeZDZ2fivSQKpOc0zabmLuu9yZKBOl-aFAFIKV0HxzHAA4Sh3Lr5Rpp_DgGzIWYt-ORmDKm9SuTn4PDi8AuowHhiGMiaM3vc7lF40ou66cuxdwyMGtAd6AYGWA_Kv6dC65r5uW5D6FWSlFeEeddiK_Kajd_iLOUwYO9KgKyUjAmcIUD2FvfPvFBQ&h=_sR7KJ0JfSMDqtzv39KZr-1EZN_06gfcZNEp9rmxMWI + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/098ea5d2-0809-47c0-876a-f571b2556936 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E64359B125C14D8A8529E8E36EE31EED Ref B: CO6AA3150217025 Ref C: 2026-01-20T16:48:53Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-e646563d-f61f-11f0-80a5-002248b6daac?api-version=2025-03-01-preview&t=639045245338187599&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=Ykhh1yejRq1gYe_AiClyVKKbk4xU_fJD3i21QRHN0xz0ovqnFQJ4f6sRXZHSYKUGm0T9tb8dTP4NIe_3ozCgzQ_rxFzZBaduVYnxWPhxfXoyZLOfFlnNMtQmGLGj9BR5w_rDEDKcUGIWKcYAwMK1q5tdXz-nGeZeZDZ2fivSQKpOc0zabmLuu9yZKBOl-aFAFIKV0HxzHAA4Sh3Lr5Rpp_DgGzIWYt-ORmDKm9SuTn4PDi8AuowHhiGMiaM3vc7lF40ou66cuxdwyMGtAd6AYGWA_Kv6dC65r5uW5D6FWSlFeEeddiK_Kajd_iLOUwYO9KgKyUjAmcIUD2FvfPvFBQ&h=_sR7KJ0JfSMDqtzv39KZr-1EZN_06gfcZNEp9rmxMWI + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 16:49:03 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westcentralus/497b9cb2-e364-4e9d-8903-bdaf38cea77e + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B24C48C68C3C44328376F4EEDABB3299 Ref B: CO6AA3150219051 Ref C: 2026-01-20T16:49:04Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_sas_token.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_sas_token.yaml new file mode 100644 index 00000000000..58de5bc8b1d --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_sas_token.yaml @@ -0,0 +1,1329 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_sas_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001","name":"cli_test_acr_transfer_import_sas_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_import_pipeline_sas_token","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '423' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:42 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E406E4D4513A4702B50AD302C179CF69 Ref B: CO6AA3150218009 Ref C: 2026-01-20T15:49:42Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.88458+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.88458+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.88458Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:51.0937046+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:51.0937489+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2914c19-f617-11f0-903b-002248b6daac?api-version=2025-03-01-preview&t=639045209912132355&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=bv2XsLKuu_XWjagUwCIzUYwISGMaTxai1B4z7rtI9dNCIJJ04AWDMw-zf98hTlTC-Ecv6CUPgqSW7AG377psakdj9zOZ-I-pu-EdNV1vWRxKkfpBSNJcbj8a5WC7QFV9M1belaA1I_YEADUmpAyYHTKEs1EMlEgKZtllPDCECjQRMrwXHPa3kA5JJztTYsYuqcnAGdQk8eHwfh9tf8yd7_faQXvW8z9fEB1ncZK6nLqdwbpeRTE1VJsaf9Q8fwQWgKfhAkdkzzQCqNpJ_wGRSy38Hxstg2nNidqUIrC-oOt0q03kS04eyjr_UTkuIA8mO1iejAUuNemhUBvJtDHaJQ&h=WInNSLUvFO2vKpFqeotZcW_Pujg5pUBlxjSJp7RNZuU + cache-control: + - no-cache + content-length: + - '1555' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:50 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/10cb9359-4d8c-4b7b-95aa-cd350b41f162 + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: C881424979B642B68B6BF14784CE1EB9 Ref B: CO6AA3150217049 Ref C: 2026-01-20T15:49:43Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2914c19-f617-11f0-903b-002248b6daac?api-version=2025-03-01-preview&t=639045209912132355&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=bv2XsLKuu_XWjagUwCIzUYwISGMaTxai1B4z7rtI9dNCIJJ04AWDMw-zf98hTlTC-Ecv6CUPgqSW7AG377psakdj9zOZ-I-pu-EdNV1vWRxKkfpBSNJcbj8a5WC7QFV9M1belaA1I_YEADUmpAyYHTKEs1EMlEgKZtllPDCECjQRMrwXHPa3kA5JJztTYsYuqcnAGdQk8eHwfh9tf8yd7_faQXvW8z9fEB1ncZK6nLqdwbpeRTE1VJsaf9Q8fwQWgKfhAkdkzzQCqNpJ_wGRSy38Hxstg2nNidqUIrC-oOt0q03kS04eyjr_UTkuIA8mO1iejAUuNemhUBvJtDHaJQ&h=WInNSLUvFO2vKpFqeotZcW_Pujg5pUBlxjSJp7RNZuU + response: + body: + string: '{"status":"Creating"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2914c19-f617-11f0-903b-002248b6daac?api-version=2025-03-01-preview&t=639045209919637210&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=Y0dJ287i8poTbV9xGjh40WjAwl_QHxKxL579mw-A0X0cJ6C1a2a5DLzZNUwieGJ27c2hFWOFy5MYPp9YtgoE2K1gWvSEv5lbw4m97GNNP2TLnX-NVVTMOVj4eXzGCNKdxpju0tsrdmMhZnZUSaeUa_5veE9whj593SEQEKh3ft6jPtZm4sjsNmioSdU3gHggVjkwgaeWCU7ByuHRV_Z__IERq6XxsfrCgIhLZSV0VrCcdHHHpZnb9ZwmMXXaQrpjqbEKJclNhsmeEPWmtc-KiNOYlRTNzOsdbUV83DoGytvQpl1Z0MBCIokfuiCkSYg4N--6giZ1DwutZ-Jmogl3jA&h=AGkdbCoePf0Rwau4cbadyZOmi-0LcTcxmIe8wtqK28U + cache-control: + - no-cache + content-length: + - '21' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:49:51 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/6e30170e-925b-4e29-88d5-63bef8f2abc7 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: BFDC64EF533A48189BE1EFC012B7F6FD Ref B: CO6AA3150220031 Ref C: 2026-01-20T15:49:51Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2914c19-f617-11f0-903b-002248b6daac?api-version=2025-03-01-preview&t=639045209912132355&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=bv2XsLKuu_XWjagUwCIzUYwISGMaTxai1B4z7rtI9dNCIJJ04AWDMw-zf98hTlTC-Ecv6CUPgqSW7AG377psakdj9zOZ-I-pu-EdNV1vWRxKkfpBSNJcbj8a5WC7QFV9M1belaA1I_YEADUmpAyYHTKEs1EMlEgKZtllPDCECjQRMrwXHPa3kA5JJztTYsYuqcnAGdQk8eHwfh9tf8yd7_faQXvW8z9fEB1ncZK6nLqdwbpeRTE1VJsaf9Q8fwQWgKfhAkdkzzQCqNpJ_wGRSy38Hxstg2nNidqUIrC-oOt0q03kS04eyjr_UTkuIA8mO1iejAUuNemhUBvJtDHaJQ&h=WInNSLUvFO2vKpFqeotZcW_Pujg5pUBlxjSJp7RNZuU + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-a2914c19-f617-11f0-903b-002248b6daac?api-version=2025-03-01-preview&t=639045210028353751&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=b3YWC0Q6fj5AvWA_c1vSIX9ET7xeRPsV6AaBK5vbQiFkLB5t6NE6Ccu-Yt53ldnpnoh6JX0Y2Zchjof1LdxK7yu7pzDfzcuAq2QzsdRQ_SWWmxDBnqO2W9qieSSxKv4Y4w7vbKIwZGTIdSheb5cy4FPbRg6txST3eehmvMGYS1nHoRAIhD1ArAM0lbZ8Y0EJCub_dHn5KURIRdpd5XzbFH3GwnzgtkZpB01jiWW8qt0vVk-C0XvX5AToaMxCEOBZwVKXEVB5nYJNGrdn5OLKnB9Aq75PaNmcR6Qum2YiJHYvWvjcAWdaS98nm8_UV-pMcalsvat9hLAoZu88DJ_8lQ&h=nApN36tbeZZA_5w5Ph7N-C70M2jl0DJ2WU8bAKQTnj0 + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:02 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/0f3eee3a-4ff2-4888-8eba-b0ae68fa8e56 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: ED547C5C984E45E2B0ADC9A29B7A3FFC Ref B: MWH011020806036 Ref C: 2026-01-20T15:50:02Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.88458+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.88458+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.88458Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:51.0937046+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:51.0937489+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1556' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:03 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 910DE512D8C34B8393FFD0BF924598DD Ref B: CO6AA3150219045 Ref C: 2026-01-20T15:50:03Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_sas_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001","name":"cli_test_acr_transfer_import_sas_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_import_pipeline_sas_token","date":"2026-01-20T15:49:06Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '423' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B430173BD221455998D35973AC41AB71 Ref B: CO6AA3150218035 Ref C: 2026-01-20T15:50:04Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '{"error":{"code":"ResourceNotFound","message":"The Resource ''Microsoft.KeyVault/vaults/kv000005'' + under resource group ''cli_test_acr_transfer_import_sas_000001'' was not found. + For more details please go to https://aka.ms/ARMResourceNotFoundFix"}}' + headers: + cache-control: + - no-cache + content-length: + - '245' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:05 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-failure-cause: + - gateway + x-msedge-ref: + - 'Ref A: FE780BD7D51D4899BDC95BF5AFCCC51A Ref B: MWH011020808042 Ref C: 2026-01-20T15:50:05Z' + status: + code: 404 + message: Not Found +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - python/3.12.10 (Windows-11-10.0.26100-SP0) AZURECLI/2.82.0 + method: GET + uri: https://graph.microsoft.com/v1.0/me + response: + body: + string: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users/$entity","businessPhones":[],"displayName":"Mai + Nguyen","givenName":"Mai","jobTitle":"SOFTWARE ENGINEER","mail":"test@example.com","mobilePhone":null,"officeLocation":"Home + Office","preferredLanguage":null,"surname":"Nguyen","userPrincipalName":"test@example.com","id":"55d6af6c-b4d5-4614-93ee-9417c506c9f1"}' + headers: + cache-control: + - no-cache + content-length: + - '376' + content-type: + - application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; + charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:05 GMT + odata-version: + - '4.0' + request-id: + - 62247e63-ea9a-4195-aa66-dd3dc732a34a + strict-transport-security: + - max-age=31536000 + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-ms-ags-diagnostic: + - '{"ServerInfo":{"DataCenter":"West US 2","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"MWH0EPF00032D50"}}' + x-ms-gateway-esc: + - '200' + x-ms-resource-unit: + - '1' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "properties": {"tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", + "sku": {"name": "standard", "family": "A"}, "accessPolicies": [{"tenantId": + "72f988bf-86f1-41af-91ab-2d7cd011db47", "objectId": "55d6af6c-b4d5-4614-93ee-9417c506c9f1", + "permissions": {"keys": ["all"], "secrets": ["all"], "certificates": ["all"], + "storage": ["all"]}}], "enableRbacAuthorization": false, "softDeleteRetentionInDays": + 90, "networkAcls": {"bypass": "AzureServices", "defaultAction": "Allow"}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + Content-Length: + - '496' + Content-Type: + - application/json + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005","name":"kv000005","type":"Microsoft.KeyVault/vaults","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:07.03Z","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:07.03Z"},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"55d6af6c-b4d5-4614-93ee-9417c506c9f1","permissions":{"keys":["all"],"secrets":["all"],"certificates":["all"],"storage":["all"]}}],"enabledForDeployment":false,"enabledForDiskEncryption":false,"enabledForTemplateDeployment":false,"enableSoftDelete":true,"softDeleteRetentionInDays":90,"enableRbacAuthorization":false,"vaultUri":"https://kv000005.vault.azure.net","provisioningState":"RegisteringDns","publicNetworkAccess":"Enabled"}}' + headers: + cache-control: + - no-cache + content-length: + - '1073' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:08 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-keyvault-service-version: + - 2.2.564.0 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/7273b5ba-3bc3-45bf-bebd-d5b3cc60cec5 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: A3F627CE423F45BCA34A2E49F3151EB9 Ref B: CO6AA3150220039 Ref C: 2026-01-20T15:50:06Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005","name":"kv000005","type":"Microsoft.KeyVault/vaults","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:07.03Z","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:07.03Z"},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"55d6af6c-b4d5-4614-93ee-9417c506c9f1","permissions":{"keys":["all"],"secrets":["all"],"certificates":["all"],"storage":["all"]}}],"enabledForDeployment":false,"enabledForDiskEncryption":false,"enabledForTemplateDeployment":false,"enableSoftDelete":true,"softDeleteRetentionInDays":90,"enableRbacAuthorization":false,"vaultUri":"https://kv000005.vault.azure.net/","provisioningState":"RegisteringDns","publicNetworkAccess":"Enabled"}}' + headers: + cache-control: + - no-cache + content-length: + - '1074' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:09 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-keyvault-service-version: + - 2.2.564.0 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 6F9FC6B3AA72471590A27A57C7B6161F Ref B: MWH011020809029 Ref C: 2026-01-20T15:50:09Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault create + Connection: + - keep-alive + ParameterSetName: + - -g -n --enable-rbac-authorization + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005","name":"kv000005","type":"Microsoft.KeyVault/vaults","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:07.03Z","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:07.03Z"},"properties":{"sku":{"family":"A","name":"standard"},"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","accessPolicies":[{"tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","objectId":"55d6af6c-b4d5-4614-93ee-9417c506c9f1","permissions":{"keys":["all"],"secrets":["all"],"certificates":["all"],"storage":["all"]}}],"enabledForDeployment":false,"enabledForDiskEncryption":false,"enabledForTemplateDeployment":false,"enableSoftDelete":true,"softDeleteRetentionInDays":90,"enableRbacAuthorization":false,"vaultUri":"https://kv000005.vault.azure.net/","provisioningState":"Succeeded","publicNetworkAccess":"Enabled"}}' + headers: + cache-control: + - no-cache + content-length: + - '1069' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:39 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-keyvault-service-version: + - 2.2.564.0 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 0FB83B33582E4F6CA329DA133E93F904 Ref B: MWH011020807042 Ref C: 2026-01-20T15:50:39Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container generate-sas + Connection: + - keep-alive + ParameterSetName: + - --account-name --name --permissions --expiry -o + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_v3pmgfh3mc56mxxogbhgdoreo3avnp5lbo3odxv4ss/providers/Microsoft.Storage/storageAccounts/acrtransfer2kf3pzn2hjkid","name":"acrtransfer2kf3pzn2hjkid","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4126611Z","key2":"2026-01-20T15:49:19.4126611Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.1782049Z","primaryEndpoints":{"dfs":"https://acrtransfer2kf3pzn2hjkid.dfs.core.windows.net/","web":"https://acrtransfer2kf3pzn2hjkid.z22.web.core.windows.net/","blob":"https://acrtransfer2kf3pzn2hjkid.blob.core.windows.net/","queue":"https://acrtransfer2kf3pzn2hjkid.queue.core.windows.net/","table":"https://acrtransfer2kf3pzn2hjkid.table.core.windows.net/","file":"https://acrtransfer2kf3pzn2hjkid.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2563281Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '6984' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:40 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - c48aa6d1-5489-45d4-bcb4-7a25b506a3d5 + - 2a64315c-ade1-45fc-b633-f2ec8b55afe7 + - d481c2f9-279c-470c-9da6-ce283959c8a7 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B53A72B2F4AF433F99DE7FBA8927457A Ref B: MWH011020807036 Ref C: 2026-01-20T15:50:40Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container generate-sas + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --account-name --name --permissions --expiry -o + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T15:49:19.4438964Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T15:49:19.4438964Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 15:50:41 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westcentralus/87f67d2d-7934-4c15-a202-a458a2be3c2e + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: AA8F12433644406A9EC8C354A4AB27E7 Ref B: MWH011020809025 Ref C: 2026-01-20T15:50:41Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault secret set + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/json + ParameterSetName: + - --vault-name -n --value + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://kv000005.vault.azure.net/secrets/sas-token-secret?api-version=7.4 + response: + body: + string: '{"error":{"code":"Unauthorized","message":"AKV10000: Request is missing + a Bearer or PoP token."}}' + headers: + cache-control: + - no-cache + content-length: + - '97' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:42 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000;includeSubDomains + www-authenticate: + - Bearer authorization="https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47", + resource="https://vault.azure.net" + x-content-type-options: + - nosniff + x-ms-keyvault-network-info: + - conn_type=Ipv4;addr=70.37.26.35;act_addr_fam=InterNetwork; + x-ms-keyvault-region: + - westus + x-ms-keyvault-service-version: + - 1.9.2984.2 + status: + code: 401 + message: Unauthorized +- request: + body: '{"value": "se=2026-02-19T15%3A50Z&sp=racwdl&sv=2026-02-06&sr=c&sig=XLOQtLn/1tbLGO7lz/pm22InnS6/2T%2BrKwQh/42nHyI%3D", + "tags": {"file-encoding": "utf-8"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault secret set + Connection: + - keep-alive + Content-Length: + - '153' + Content-Type: + - application/json + ParameterSetName: + - --vault-name -n --value + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://kv000005.vault.azure.net/secrets/sas-token-secret?api-version=7.4 + response: + body: + string: '{"value":"se=2026-02-19T15%3A50Z&sp=racwdl&sv=2026-02-06&sr=c&sig=XLOQtLn/1tbLGO7lz/pm22InnS6/2T%2BrKwQh/42nHyI%3D","id":"https://kv000005.vault.azure.net/secrets/sas-token-secret/6637a9578fe043eda35e744da77873a1","attributes":{"enabled":true,"created":1768924243,"updated":1768924243,"recoveryLevel":"Recoverable+Purgeable","recoverableDays":90},"tags":{"file-encoding":"utf-8"}}' + headers: + cache-control: + - no-cache + content-length: + - '380' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:42 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000;includeSubDomains + x-content-type-options: + - nosniff + x-ms-keyvault-network-info: + - conn_type=Ipv4;addr=70.37.26.40;act_addr_fam=InterNetwork; + x-ms-keyvault-region: + - westus + x-ms-keyvault-service-version: + - 1.9.2984.2 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_sas_v3pmgfh3mc56mxxogbhgdoreo3avnp5lbo3odxv4ss/providers/Microsoft.Storage/storageAccounts/acrtransfer2kf3pzn2hjkid","name":"acrtransfer2kf3pzn2hjkid","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4126611Z","key2":"2026-01-20T15:49:19.4126611Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4126611Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.1782049Z","primaryEndpoints":{"dfs":"https://acrtransfer2kf3pzn2hjkid.dfs.core.windows.net/","web":"https://acrtransfer2kf3pzn2hjkid.z22.web.core.windows.net/","blob":"https://acrtransfer2kf3pzn2hjkid.blob.core.windows.net/","queue":"https://acrtransfer2kf3pzn2hjkid.queue.core.windows.net/","table":"https://acrtransfer2kf3pzn2hjkid.table.core.windows.net/","file":"https://acrtransfer2kf3pzn2hjkid.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T15:49:19.4438964Z","key2":"2026-01-20T15:49:19.4438964Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T15:49:19.4595650Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T15:49:19.2563281Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '6984' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:43 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - 9aa104a4-7e5c-4710-be37-82938334e496 + - c3918c63-bad8-4061-8f54-7cba861bc95d + - 9c0935d3-94b7-421c-9b62-ae0b3442d221 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 351AB9CF66B84B8F9201E184296E9C8E Ref B: MWH011020808062 Ref C: 2026-01-20T15:50:43Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T15:49:19.4438964Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T15:49:19.4438964Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 15:50:44 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/666c5700-2757-4d1f-ba81-79e75f4aa4d3 + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: 8AEF5A7DE1694133A5438E1D6D6811BA Ref B: MWH011020807029 Ref C: 2026-01-20T15:50:44Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 15:50:44 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/import-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:44 GMT + etag: + - '"0x8DE583BAC47BD16"' + last-modified: + - Tue, 20 Jan 2026 15:50:44 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +- request: + body: '{"identity": {"type": "SystemAssigned"}, "properties": {"source": {"type": + "AzureStorageBlobContainer", "uri": "https://acrtransfer000002.blob.core.windows.net/import-container", + "storageAccessMode": "SasToken", "keyVaultUri": "https://kv000005.vault.azure.net/secrets/sas-token-secret"}, + "trigger": {"sourceTrigger": {"status": "Enabled"}}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline create + Connection: + - keep-alive + Content-Length: + - '342' + Content-Type: + - application/json + ParameterSetName: + - -g -r -n --storage-access-mode --secret-uri --storage-container-uri + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"principalId":"7ca39903-3e17-4dfe-ba52-86664060daad","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:45.8114356+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:45.8114356+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","keyVaultUri":"https://kv000005.vault.azure.net/secrets/sas-token-secret","storageAccessMode":"SasToken"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '991' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/a05e6211-74a0-499c-908b-849ec977f5fa + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 07B55FEBE3344E91980BC18A84165BCB Ref B: CO6AA3150218023 Ref C: 2026-01-20T15:50:45Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline create + Connection: + - keep-alive + ParameterSetName: + - -g -r -n --storage-access-mode --secret-uri --storage-container-uri + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"principalId":"7ca39903-3e17-4dfe-ba52-86664060daad","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:45.8114356+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:45.8114356+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","keyVaultUri":"https://kv000005.vault.azure.net/secrets/sas-token-secret","storageAccessMode":"SasToken"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '991' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/ebee265d-04d6-46bf-a09b-c7f62d58d442 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 68FC1A54EFCA4225AA43212ABEB24203 Ref B: CO6AA3150220045 Ref C: 2026-01-20T15:50:48Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline delete + Connection: + - keep-alive + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '{"type":"Microsoft.ContainerRegistry/registries/importPipelines","identity":{"principalId":"7ca39903-3e17-4dfe-ba52-86664060daad","tenantId":"72f988bf-86f1-41af-91ab-2d7cd011db47","type":"systemAssigned"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004","name":"pipeline000004","systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:50:45.8114356+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:50:45.8114356+00:00"},"properties":{"source":{"type":"AzureStorageBlobContainer","uri":"https://acrtransfer000002.blob.core.windows.net/import-container","keyVaultUri":"https://kv000005.vault.azure.net/secrets/sas-token-secret","storageAccessMode":"SasToken"},"trigger":{"sourceTrigger":{"status":"Enabled"}},"provisioningState":"Succeeded"}}' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '991' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:48 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/b002c533-f032-4cce-8f30-3b789c2c8a2e + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: F502B9499A1C430AAD7C719F6A9CCAB9 Ref B: CO6AA3150219045 Ref C: 2026-01-20T15:50:48Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -r -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/importPipelines/pipeline000004?api-version=2025-06-01-preview + response: + body: + string: '' + headers: + api-supported-versions: + - 2025-06-01-preview, 2025-12-01-preview, 2026-01-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:49 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/30b0a9fd-4e88-40d0-8846-45259e442f31 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 246C69EB54F3483BB4F220A32CB97F2B Ref B: MWH011020808023 Ref C: 2026-01-20T15:50:49Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T15:49:43.88458+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T15:49:43.88458+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T15:49:43.88458Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T15:49:51.0937046+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T15:49:51.0937489+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1555' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 15:50:50 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-cab7df6e-f617-11f0-81a5-002248b6daac?api-version=2025-03-01-preview&t=639045210504757360&c=MIIHhzCCBm-gAwIBAgITfAldUuOkqyWaFWVmdAAACV1S4zANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjUxMDIxMDgxMjA1WhcNMjYwNDE5MDgxMjA1WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6VhHo7SMnPI07xSUC0EKrS_gaAU3t2sorvXTakEJppgrr-M5q-yAFDicwNGCe2zSU9ZvGBPI46D9PesTntz4RhQO5-Dkx5G8vC9lZ0WV6mem5Hsnf78kDXgYxzLyAaMKv9WjuZNcTaFQKdrPAx-ZS-2EebUB404VhX1yJ3S4C3QHTpXASyoAbFfGV8tHPGM7q2s_Qr9qBJ5RUnI0t_oD0IJ_dyn_wQvIsgBjpGMentNk7AKNnJ7dWOCU76BFL9ZQAP9lNuU68JHjdsD1lABOX7Jtcv8FrW2zWgZn6TOHf9rY990h8zyuY_EBAr0xrbFD0i_O184Iy9gHWqScS_2CkCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBTUpdRlqz5GkJ77fs3HRMz2Z_W49DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAGQmJdPitlGjIwFSf4WsFmLr4W3CmkUpm4HxfZATnxnP9vV2uH5f01rfg_lA-Q0s4GMqkftMAVNRm0Ta6w_NRSLRZO2GWa65KrQ8ITCuGR12jMTYPqYgqEIaBQAqqxvtTisw6-_rDdMBbWwvTo6h0yR_Rw0GGgX1C4WUYhFJq-o90nFF2qZEFQJht7ni8RYQonaxB281z64rp0rlXCz8r3rJXIR2RLC48IA1los4mZYaxAv_Y_LPYwZUQ_V0_YrSGK5KMJp6exPToKF_DePs6j27AncGilbWo9t96F-yKBPD57WulOVgbYwNKAZ_Klbw0ur-YLdTdCaIbUiNhmGTDvY&s=omAn2Q41mluG-DeHS8PGZDbn3sJHPGiAKe_WJJpuTeiUHDMij23Lnkna4YnPGOyCiloZuUbnVLu4Cs68B47zsxSihKrXUrbRwD3aGPUwVNQs9rfifu1P-h5UE-982_bI5leN7shNds3Z7xoe5jTfPJhOzRCq1ke_MqfxLEAZSk1KTZ8Xg5UC9PZ5F9tlOjwhFt3ehALnZa2PJvGwXScSoAdfdSfxGn7b985-VQ1SPlFQL40u0HC8BWmOLUfp_cbCFOk27616M7gqHabqiH_lqIz2SmnnvlPa8ZxzW095BQxe8KvwIFkvQFLEBjV6pBgtfPff6DDMylPx3L2yMa8Dyw&h=VGdHBPL_96hJX_aST6gLZ3iMIBbwTL_aDn1rQC24-4g + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/8a53f56e-b416-4344-b3d3-97f2e292ab29 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: DFD8D69F67B04E0C8AA998F97A7A969D Ref B: MWH011020809031 Ref C: 2026-01-20T15:50:50Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-cab7df6e-f617-11f0-81a5-002248b6daac?api-version=2025-03-01-preview&t=639045210504757360&c=MIIHhzCCBm-gAwIBAgITfAldUuOkqyWaFWVmdAAACV1S4zANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjUxMDIxMDgxMjA1WhcNMjYwNDE5MDgxMjA1WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6VhHo7SMnPI07xSUC0EKrS_gaAU3t2sorvXTakEJppgrr-M5q-yAFDicwNGCe2zSU9ZvGBPI46D9PesTntz4RhQO5-Dkx5G8vC9lZ0WV6mem5Hsnf78kDXgYxzLyAaMKv9WjuZNcTaFQKdrPAx-ZS-2EebUB404VhX1yJ3S4C3QHTpXASyoAbFfGV8tHPGM7q2s_Qr9qBJ5RUnI0t_oD0IJ_dyn_wQvIsgBjpGMentNk7AKNnJ7dWOCU76BFL9ZQAP9lNuU68JHjdsD1lABOX7Jtcv8FrW2zWgZn6TOHf9rY990h8zyuY_EBAr0xrbFD0i_O184Iy9gHWqScS_2CkCAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBTUpdRlqz5GkJ77fs3HRMz2Z_W49DAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAGQmJdPitlGjIwFSf4WsFmLr4W3CmkUpm4HxfZATnxnP9vV2uH5f01rfg_lA-Q0s4GMqkftMAVNRm0Ta6w_NRSLRZO2GWa65KrQ8ITCuGR12jMTYPqYgqEIaBQAqqxvtTisw6-_rDdMBbWwvTo6h0yR_Rw0GGgX1C4WUYhFJq-o90nFF2qZEFQJht7ni8RYQonaxB281z64rp0rlXCz8r3rJXIR2RLC48IA1los4mZYaxAv_Y_LPYwZUQ_V0_YrSGK5KMJp6exPToKF_DePs6j27AncGilbWo9t96F-yKBPD57WulOVgbYwNKAZ_Klbw0ur-YLdTdCaIbUiNhmGTDvY&s=omAn2Q41mluG-DeHS8PGZDbn3sJHPGiAKe_WJJpuTeiUHDMij23Lnkna4YnPGOyCiloZuUbnVLu4Cs68B47zsxSihKrXUrbRwD3aGPUwVNQs9rfifu1P-h5UE-982_bI5leN7shNds3Z7xoe5jTfPJhOzRCq1ke_MqfxLEAZSk1KTZ8Xg5UC9PZ5F9tlOjwhFt3ehALnZa2PJvGwXScSoAdfdSfxGn7b985-VQ1SPlFQL40u0HC8BWmOLUfp_cbCFOk27616M7gqHabqiH_lqIz2SmnnvlPa8ZxzW095BQxe8KvwIFkvQFLEBjV6pBgtfPff6DDMylPx3L2yMa8Dyw&h=VGdHBPL_96hJX_aST6gLZ3iMIBbwTL_aDn1rQC24-4g + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:50:50 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-cab7df6e-f617-11f0-81a5-002248b6daac?api-version=2025-03-01-preview&t=639045210511758587&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=tScPdK5no82l_aN1YTmlKvOO38yHIGXXH8WwjAK-XlR09_1pDF2xxVVQZd1fbRJp2d0ADLDLx0Pbz7Gd_OYPwl_SVNK8HEFzaxtCK2MHBQ-5_NfGwtCQ5ShrCPjLvPDmH2yKvr-jrnjhrAd8nU4Ws6hwtrKBKDrC6ts4vxphN75iRf1kgCFdSs0je5EGYfAeNhFdx2guUde6dmH2LD-4atRP9NtSRyCe73FGyYoI8VhfE6inGOh1Pqdow3MKuIcf1WckYR7u5NZ7oKWauchXdy6Oijdce1RygqeI0EWpmzCGaqSZsjBnI1zfZiNdC2tPNfJi2PjF8cruzROR5v-ReA&h=M0eXUWRU9fuQcqUtbCNLuhUW6i5jnHSPUTanRgbZy0s + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/6f9d54f1-10e8-4b34-97d5-fbfe32146617 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 3BF455C06D964E458F5FACA16FC9A281 Ref B: MWH011020808060 Ref C: 2026-01-20T15:50:51Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -g -n --yes + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/westus/operationResults/registries-cab7df6e-f617-11f0-81a5-002248b6daac?api-version=2025-03-01-preview&t=639045210511758587&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=tScPdK5no82l_aN1YTmlKvOO38yHIGXXH8WwjAK-XlR09_1pDF2xxVVQZd1fbRJp2d0ADLDLx0Pbz7Gd_OYPwl_SVNK8HEFzaxtCK2MHBQ-5_NfGwtCQ5ShrCPjLvPDmH2yKvr-jrnjhrAd8nU4Ws6hwtrKBKDrC6ts4vxphN75iRf1kgCFdSs0je5EGYfAeNhFdx2guUde6dmH2LD-4atRP9NtSRyCe73FGyYoI8VhfE6inGOh1Pqdow3MKuIcf1WckYR7u5NZ7oKWauchXdy6Oijdce1RygqeI0EWpmzCGaqSZsjBnI1zfZiNdC2tPNfJi2PjF8cruzROR5v-ReA&h=M0eXUWRU9fuQcqUtbCNLuhUW6i5jnHSPUTanRgbZy0s + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:51:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/9cf22c3d-97c3-4ebb-a43a-d90f25d294b0 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 40AAD23BADBF404CAF01B50D7CD40F2C Ref B: CO6AA3150217029 Ref C: 2026-01-20T15:51:01Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - keyvault delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -g -n + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_sas_000001/providers/Microsoft.KeyVault/vaults/kv000005?api-version=2025-05-01 + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 20 Jan 2026 15:51:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-keyvault-service-version: + - 2.2.564.0 + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/cd693e3d-13c6-4211-9b04-d9cd5c23aaf1 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: FBDF94EFF3544DAA93447E2A4BF1C847 Ref B: CO6AA3150220025 Ref C: 2026-01-20T15:51:02Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_without_storage_access_mode_fails.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_without_storage_access_mode_fails.yaml new file mode 100644 index 00000000000..60ce8025d89 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acr_import_pipeline_without_storage_access_mode_fails.yaml @@ -0,0 +1,349 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/cli_test_acr_transfer_import_no_mode_000001?api-version=2024-11-01 + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001","name":"cli_test_acr_transfer_import_no_mode_000001","type":"Microsoft.Resources/resourceGroups","location":"westus","tags":{"product":"azurecli","cause":"automation","test":"test_acr_import_pipeline_without_storage_access_mode_fails","date":"2026-01-20T16:50:28Z","module":"acrtransfer"},"properties":{"provisioningState":"Succeeded"}}' + headers: + cache-control: + - no-cache + content-length: + - '455' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:50:54 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 693FF14750AA40BF850F1B5983CBEA06 Ref B: CO6AA3150217049 Ref C: 2026-01-20T16:50:54Z' + status: + code: 200 + message: OK +- request: + body: '{"location": "westus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:50:56.5787456+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:50:56.5787456+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:50:56.5787456Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:51:04.6187061+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:51:04.6187547+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-2f52977e-f620-11f0-8778-002248b6daac?api-version=2025-03-01-preview&t=639045246647820522&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=WuCppjcJna3EsFgWzUl3RqFVmMNkAuWH1lI3oMJr2G6_BkmU3_bQKdMHYlQsbBOCHR7XkfaAyL6y7sTwpfEAaVGiHKr4K-Lg6J2mfawdpWbr9sSZldQ8w0Aks72zkvf5IGyCvbTtvpfrRm-t6pdKDoFjpOBMCsZwCBjZWZhxLPSDFVrA1vrNsjIsh5timeDMz7K1xYpfGPofBGqMTn7jHqNxgQPGwRRfkXigjgjlyfRDd5LPaUO2aFLjbOY1Rx-u_mZl7B5_6WSCzm639We7JjCdRVaLCCKVT3XS-TWTN1Pf4fIzH4-9gmtbs67rLmd73XYhQvz1YFxQ2B-mymMMAA&h=6uXkmvGoUcDSAOVxPM3_JoOnPczZGI9DpBj6QrWzqpQ + cache-control: + - no-cache + content-length: + - '1565' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/f1b5ec6d-ad2a-4d16-9d47-bfe3929bafd8 + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: 8978E46CE59C49549DCE628BC33F6464 Ref B: CO6AA3150217011 Ref C: 2026-01-20T16:50:56Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-2f52977e-f620-11f0-8778-002248b6daac?api-version=2025-03-01-preview&t=639045246647820522&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=WuCppjcJna3EsFgWzUl3RqFVmMNkAuWH1lI3oMJr2G6_BkmU3_bQKdMHYlQsbBOCHR7XkfaAyL6y7sTwpfEAaVGiHKr4K-Lg6J2mfawdpWbr9sSZldQ8w0Aks72zkvf5IGyCvbTtvpfrRm-t6pdKDoFjpOBMCsZwCBjZWZhxLPSDFVrA1vrNsjIsh5timeDMz7K1xYpfGPofBGqMTn7jHqNxgQPGwRRfkXigjgjlyfRDd5LPaUO2aFLjbOY1Rx-u_mZl7B5_6WSCzm639We7JjCdRVaLCCKVT3XS-TWTN1Pf4fIzH4-9gmtbs67rLmd73XYhQvz1YFxQ2B-mymMMAA&h=6uXkmvGoUcDSAOVxPM3_JoOnPczZGI9DpBj6QrWzqpQ + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003/operationStatuses/registries-2f52977e-f620-11f0-8778-002248b6daac?api-version=2025-03-01-preview&t=639045246656424502&c=MIIHhzCCBm-gAwIBAgITfAoFj3UnLFat7-UOvQAACgWPdTANBgkqhkiG9w0BAQsFADBEMRMwEQYKCZImiZPyLGQBGRYDR0JMMRMwEQYKCZImiZPyLGQBGRYDQU1FMRgwFgYDVQQDEw9BTUUgSW5mcmEgQ0EgMDUwHhcNMjYwMTE1MTEyNDI1WhcNMjYwNTI0MjI1NzAzWjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7q0FwMI4pK9lgk52VrKK0P6Z6MwRyR6Mzfg0d4v1dzxqST3G7RQfjhQG39dCI9Mqy5lsmCerbLetSdc1VE4mJJyuNqCsLo7Xhf2CV7wmEO09A2_8WwFfyTUxp45W8rRYa1zwHHFrdcjFQv20LolrP8mRmDFdRa8ZJvyL4gJLvstuWI3gw_Ksl2SSN2tDRNIef_UKj04bXdF-fCZCGo0jqYSS8e8Clin1cQlNRt0aLeInNG7ppk7EM_Pcz26onkMivaBql7Rg6TNnDDvM524Q7850OSMTKXNbh58e4Za1OcyVOAPvhx0aaydGQ-xHBxmEfMl2syBwmvbnAj8Iswv-0CAwEAAaOCBHQwggRwMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwEwCgYIKwYBBQUHAwIwPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUIhpDjDYTVtHiE8Ys-hZvdFs6dEoFghfmRS4WsmTQCAWQCAQcwggHLBggrBgEFBQcBAQSCAb0wggG5MGMGCCsGAQUFBzAChldodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpaW5mcmEvQ2VydHMvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmwxLmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MFMGCCsGAQUFBzAChkdodHRwOi8vY3JsMi5hbWUuZ2JsL2FpYS9DTzFQS0lJTlRDQTAxLkFNRS5HQkxfQU1FJTIwSW5mcmElMjBDQSUyMDA1LmNydDBTBggrBgEFBQcwAoZHaHR0cDovL2NybDMuYW1lLmdibC9haWEvQ08xUEtJSU5UQ0EwMS5BTUUuR0JMX0FNRSUyMEluZnJhJTIwQ0ElMjAwNS5jcnQwUwYIKwYBBQUHMAKGR2h0dHA6Ly9jcmw0LmFtZS5nYmwvYWlhL0NPMVBLSUlOVENBMDEuQU1FLkdCTF9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3J0MB0GA1UdDgQWBBRMuwNSmuAZx_T5anD1Wx0cvqIrxDAOBgNVHQ8BAf8EBAMCBaAwggEmBgNVHR8EggEdMIIBGTCCARWgggERoIIBDYY_aHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraWluZnJhL0NSTC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMS5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMi5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsMy5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JshjFodHRwOi8vY3JsNC5hbWUuZ2JsL2NybC9BTUUlMjBJbmZyYSUyMENBJTIwMDUuY3JsMIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAfBgNVHSMEGDAWgBR61hmFKHlscXYeYPjzS--iBUIWHTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBACjtkHb5TanqpNigb0DttCimJSPYHrIg6lNBvXVy8789Vr2cGfPAEFox1evwMNExZLtQKv9gy6rx6281gkNcJA4Yc7tUxdS9J_1U7ZtG_BNn-pNt72tBez50Amzrbtp1Gd0XnY4fKXBHw4qdG7ftmlNNWTqfRVgka_EorpmVFs6e_mnWuxb-rJSnUG9Y15iPF-uGetF94xhedcLLhvyzwqo-yGRcXwPG635JCUtNWOsst3HlkbhCissfyYSKr7xWsjcCOKI58wyoC4ydfgHzsq5sC2gZDxQ2m1jwYXr8fSCiJ_3YlUBM1bXeWrIQ5-qmYif4TRCrqdV-NTtmheaDL1M&s=gxENibiVUNnkRC_OWImUDE3i2Cy0j0yLWul-nu-GdbIhp-bavdaW1PhjXoEcBRjYmNVXCXHkjkdvsNeQTkeBfJYFmo3ke0gaKQghQA6R4hqRykraZy_7UoZTIrEUxSBdNu1gUHurGkG2_GWs1CVUizlRJTuh83N_kXxNxQWSKNdMBTd8Hd82wXQmSRsIqdgHQLxECd7F7uNy9ce3xSa6UnM831rS8Cv6eHLGaTY3W_IFqvKmLYIZAvwUPK1YTpGOkSak6YF-VNP1x1f35Q0FNPwqkeq89iJpjdV4f7TfGkBNV5PFtM5aI-1ASmu8upeUmNkW1-lw8rU9v1Z3pqZJow&h=rcAGZtvkWKbTFnm45XlRuv25hFLEMBva1qHAvc4p43g + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:05 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/e3c7aba6-67d4-4e84-bd19-a738466297fa + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 6BD16A5AD7644377BDBA14134606AE03 Ref B: MWH011020807034 Ref C: 2026-01-20T16:51:05Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -g -n --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.ContainerRegistry/registries/acrtest000003","name":"acrtest000003","location":"westus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-01-20T16:50:56.5787456+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-01-20T16:50:56.5787456+00:00"},"properties":{"loginServer":"acrtest000003.azurecr.io","creationDate":"2026-01-20T16:50:56.5787456Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-01-20T16:51:04.6187061+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-01-20T16:51:04.6187547+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1566' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:05 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: E04AA231815F4A659CE507FF1A3AD9BA Ref B: MWH011020807052 Ref C: 2026-01-20T16:51:06Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2025-06-01 + response: + body: + string: '{"value":[{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_export_no_mode_7oied3zh66mhj33m74qvz4ch3z6apsebu42ev7/providers/Microsoft.Storage/storageAccounts/acrtransfer6mkxlehy3dghi","name":"acrtransfer6mkxlehy3dghi","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T16:50:57.5481181Z","key2":"2026-01-20T16:50:57.5481181Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:50:57.5636983Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:50:57.5636983Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"ResolvingDns","creationTime":"2026-01-20T16:50:57.3293177Z","primaryEndpoints":{"dfs":"https://acrtransfer6mkxlehy3dghi.dfs.core.windows.net/","web":"https://acrtransfer6mkxlehy3dghi.z22.web.core.windows.net/","blob":"https://acrtransfer6mkxlehy3dghi.blob.core.windows.net/","queue":"https://acrtransfer6mkxlehy3dghi.queue.core.windows.net/","table":"https://acrtransfer6mkxlehy3dghi.table.core.windows.net/","file":"https://acrtransfer6mkxlehy3dghi.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002","name":"acrtransfer000002","type":"Microsoft.Storage/storageAccounts","location":"westus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"keyCreationTime":{"key1":"2026-01-20T16:50:32.7629227Z","key2":"2026-01-20T16:50:32.7629227Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:50:32.7785484Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-20T16:50:32.7785484Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-20T16:50:32.5598075Z","primaryEndpoints":{"dfs":"https://acrtransfer000002.dfs.core.windows.net/","web":"https://acrtransfer000002.z22.web.core.windows.net/","blob":"https://acrtransfer000002.blob.core.windows.net/","queue":"https://acrtransfer000002.queue.core.windows.net/","table":"https://acrtransfer000002.table.core.windows.net/","file":"https://acrtransfer000002.file.core.windows.net/"},"primaryLocation":"westus","statusOfPrimary":"available"}},{"sku":{"name":"Standard_RAGRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/acr-transfer-cli-test/providers/Microsoft.Storage/storageAccounts/nguyenmastorage","name":"nguyenmastorage","type":"Microsoft.Storage/storageAccounts","location":"centralus","tags":{},"properties":{"allowCrossTenantDelegationSas":false,"dualStackEndpointPreference":{"defaultDualStackEndpoints":false,"publishIpv4Endpoint":false,"publishIpv6Endpoint":false},"dnsEndpointType":"Standard","defaultToOAuthAuthentication":false,"publicNetworkAccess":"Enabled","keyCreationTime":{"key1":"2026-01-14T16:58:29.9796588Z","key2":"2026-01-14T16:58:29.9796588Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":true,"largeFileSharesState":"Enabled","networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"requireInfrastructureEncryption":false,"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2026-01-14T16:58:29.9952832Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2026-01-14T16:58:29.7452848Z","primaryEndpoints":{"dfs":"https://nguyenmastorage.dfs.core.windows.net/","web":"https://nguyenmastorage.z19.web.core.windows.net/","blob":"https://nguyenmastorage.blob.core.windows.net/","queue":"https://nguyenmastorage.queue.core.windows.net/","table":"https://nguyenmastorage.table.core.windows.net/","file":"https://nguyenmastorage.file.core.windows.net/"},"primaryLocation":"centralus","statusOfPrimary":"available","secondaryLocation":"eastus2","statusOfSecondary":"available","secondaryEndpoints":{"dfs":"https://nguyenmastorage-secondary.dfs.core.windows.net/","web":"https://nguyenmastorage-secondary.z19.web.core.windows.net/","blob":"https://nguyenmastorage-secondary.blob.core.windows.net/","queue":"https://nguyenmastorage-secondary.queue.core.windows.net/","table":"https://nguyenmastorage-secondary.table.core.windows.net/"}}},{"sku":{"name":"Standard_LRS","tier":"Standard"},"kind":"StorageV2","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/nguyenma-icm/providers/Microsoft.Storage/storageAccounts/icm6842042233","name":"icm6842042233","type":"Microsoft.Storage/storageAccounts","location":"westus2","tags":{},"properties":{"defaultToOAuthAuthentication":false,"keyCreationTime":{"key1":"2024-07-18T14:45:39.5900134Z","key2":"2024-07-18T14:45:39.5900134Z"},"allowCrossTenantReplication":false,"privateEndpointConnections":[],"minimumTlsVersion":"TLS1_2","allowBlobPublicAccess":false,"allowSharedKeyAccess":false,"isHnsEnabled":false,"networkAcls":{"ipv6Rules":[],"bypass":"AzureServices","virtualNetworkRules":[],"ipRules":[],"defaultAction":"Allow"},"supportsHttpsTrafficOnly":true,"encryption":{"services":{"file":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"},"blob":{"keyType":"Account","enabled":true,"lastEnabledTime":"2024-07-18T14:45:39.6837964Z"}},"keySource":"Microsoft.Storage"},"accessTier":"Hot","provisioningState":"Succeeded","creationTime":"2024-07-18T14:45:39.4650558Z","primaryEndpoints":{"dfs":"https://icm6842042233.dfs.core.windows.net/","web":"https://icm6842042233.z5.web.core.windows.net/","blob":"https://icm6842042233.blob.core.windows.net/","queue":"https://icm6842042233.queue.core.windows.net/","table":"https://icm6842042233.table.core.windows.net/","file":"https://icm6842042233.file.core.windows.net/"},"primaryLocation":"westus2","statusOfPrimary":"available"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '6991' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 20 Jan 2026 16:51:06 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - e1a8d313-d535-4fd3-a660-2ba6af30b683 + - f037a8c9-fdbe-416b-b72a-d6621eb9b9bd + - 06e3beac-aaee-41d5-b116-f376756cca4f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 97BECDFF298E435E9B7C17AEF3E1AC34 Ref B: MWH011020808034 Ref C: 2026-01-20T16:51:06Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_acr_transfer_import_no_mode_000001/providers/Microsoft.Storage/storageAccounts/acrtransfer000002/listKeys?api-version=2025-06-01&$expand=kerb + response: + body: + string: '{"keys":[{"creationTime":"2026-01-20T16:50:32.7629227Z","keyName":"key1","value":"veryFakedStorageAccountKey==","permissions":"FULL"},{"creationTime":"2026-01-20T16:50:32.7629227Z","keyName":"key2","value":"veryFakedStorageAccountKey==","permissions":"FULL"}]}' + headers: + cache-control: + - no-cache + content-length: + - '260' + content-type: + - application/json + date: + - Tue, 20 Jan 2026 16:51:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/3fdf89fb-0287-4e8a-87d9-f7b3db4b3b2d + x-ms-ratelimit-remaining-subscription-resource-requests: + - '799' + x-msedge-ref: + - 'Ref A: 4B0EA0C0564A496D912EE385A3B514F8 Ref B: MWH011020807029 Ref C: 2026-01-20T16:51:07Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + CommandName: + - storage container create + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n --account-name + User-Agent: + - AZURECLI/2.82.0 azsdk-python-storage-blob/12.28.0b1 Python/3.12.10 (Windows-11-10.0.26100-SP0) + x-ms-date: + - Tue, 20 Jan 2026 16:51:07 GMT + x-ms-version: + - '2026-02-06' + method: PUT + uri: https://acrtransfer000002.blob.core.windows.net/import-container?restype=container + response: + body: + string: '' + headers: + content-length: + - '0' + date: + - Tue, 20 Jan 2026 16:51:07 GMT + etag: + - '"0x8DE58441C1D28CD"' + last-modified: + - Tue, 20 Jan 2026 16:51:08 GMT + server: + - Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 + x-ms-version: + - '2026-02-06' + status: + code: 201 + message: Created +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acrtransfer_import_pipeline_list.yaml b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acrtransfer_import_pipeline_list.yaml new file mode 100644 index 00000000000..7a5f375b1ad --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/recordings/test_acrtransfer_import_pipeline_list.yaml @@ -0,0 +1,416 @@ +interactions: +- request: + body: '{"location": "eastus", "sku": {"name": "Premium"}, "properties": {"adminUserEnabled": + false, "anonymousPullEnabled": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + Content-Length: + - '124' + Content-Type: + - application/json + ParameterSetName: + - -n -g -l --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002","name":"acr000002","location":"eastus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-03-06T17:42:58.5161733+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-03-06T17:42:58.5161733+00:00"},"properties":{"loginServer":"acr000002.azurecr.io","creationDate":"2026-03-06T17:42:58.5161733Z","provisioningState":"Creating","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-03-06T17:43:05.9613293+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-03-06T17:43:05.9613789+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002/operationStatuses/registries-e9612ab2-1983-11f1-aed4-002248b6daac?api-version=2025-03-01-preview&t=639084157861572597&c=MIIIJjCCBw6gAwIBAgIQXAg_KQfqNmXWsnKmcWm-CjANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXQ1VTIENBIDAxMB4XDTI2MDMwMzE4NDAwNFoXDTI2MDgzMDAwNDAwNFowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCq2QsnpddKa8kR8gt-vA9VEusmZorO2S-vbINESl_vgl_PJICxJntGEX47Fd1DDc76k_3GujB58pb9CVQcLZ3-ca4xBv6hEqbf7VGNJdlUmL6V31uaLBLUMfEySd5hdTIpu4K8C1BsXVfomETR-eBTaEKo7U6rad09i8wEBquSFVf5S7J71JehWC4rsigucyf3uMHNqTzZudQy7Dr4g3o1z8GDPMMNrN8NB6XUfnHR60daMf2EzZU2v746EHu58MN3kAveFfbqRrcWd5-tDS7K-u-_1JBNmgg_vgVE_HIXLJ-H3nSUSgujW4YOVJzkyLbU8xAJiSJ_NeLBYjJyJhCNAgMBAAGjggUkMIIFIDCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRvNYqFx4fDp-iV_6CV_JvtWzks-DAfBgNVHSMEGDAWgBQU0jfg9tZ9ft2NurplqwSUJeCWHTCCAfsGA1UdHwSCAfIwggHuMHugeaB3hnVodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwfaB7oHmGd2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzI1L2N1cnJlbnQuY3JsMGygaqBohmZodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwgYGgf6B9hntodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwggIABggrBgEFBQcBAQSCAfIwggHuMH4GCCsGAQUFBzAChnJodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwgYAGCCsGAQUFBzAChnRodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBvBggrBgEFBQcwAoZjaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHgGCCsGAQUFBzAChmxodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAHyESoM-hJA8co5aYFKQj6Yb2naSt-_hW50RjbHBbcf7c32Ujn8L-srkiIyVxkEpzXn0sgWpC8m9Wmwi-IXcD8wG3oPqMrn5ZYvIwrFdrlRwKg23jUltqn23uy8oAzIxCBsBblPSNyWSbEL5Vi52YbLITPHu4uEC7Exy9jJvn6cttL4bste7Sfve85Dd-RbogDrr8HBad8-CN8sHHSyii8mKaK7rq75VE6arRrM28SQgrKJDPrv40C9I6Z5pK40CEUfpYyWTzS6FkLMf7SIjhz0Ilua9xqzb0IO32oVtuv4c-GmmjyJy8FRZzgEYbW_CUh19Gx-9L_Sd5ZzebW5exxE&s=YI1aY8Q7kBdnYMTfk6WmL5rnGLXZltZMhP7QKWVj5S_-PiQA72iof2KbwwdE2BOAVNQZvbCcle1QFGa7YO6fJo_3Bd2upXyUq5DqPgqMTzCABTMLmwnEyXm5HMm74xRwEgCiPFnLzcGMWkiHYJY_4_gVkr4HTh1v4lsHtefOR5eobzCaUV2Svr3fZTD6Lm2-Tw6dLR1jV4xeXVyDikKUWpwk2dbhioLYdDHzjyPSwq4s1tCUf0Rys5S87Hbl76to_3b3padiJWDTjH4OmlgjqQPeC7w72ncU2S9H6u34ed6kK1gmb0cOXVdSohUTPw8reASvMKEa-71BA-xcwR5DPg&h=2FO4pwNikBKb-cE0GMAX_zqnQjeRfz08qTOi31tCM0U + cache-control: + - no-cache + content-length: + - '1526' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 06 Mar 2026 17:43:05 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/163a9035-a619-4aea-b6f2-57de06cd88d6 + x-ms-ratelimit-remaining-subscription-global-writes: + - '12000' + x-ms-ratelimit-remaining-subscription-writes: + - '800' + x-msedge-ref: + - 'Ref A: 287ED45AC53D46CE94918A739CE67BDC Ref B: CO1EDGE1910 Ref C: 2026-03-06T17:42:58Z' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -n -g -l --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002/operationStatuses/registries-e9612ab2-1983-11f1-aed4-002248b6daac?api-version=2025-03-01-preview&t=639084157861572597&c=MIIIJjCCBw6gAwIBAgIQXAg_KQfqNmXWsnKmcWm-CjANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXQ1VTIENBIDAxMB4XDTI2MDMwMzE4NDAwNFoXDTI2MDgzMDAwNDAwNFowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCq2QsnpddKa8kR8gt-vA9VEusmZorO2S-vbINESl_vgl_PJICxJntGEX47Fd1DDc76k_3GujB58pb9CVQcLZ3-ca4xBv6hEqbf7VGNJdlUmL6V31uaLBLUMfEySd5hdTIpu4K8C1BsXVfomETR-eBTaEKo7U6rad09i8wEBquSFVf5S7J71JehWC4rsigucyf3uMHNqTzZudQy7Dr4g3o1z8GDPMMNrN8NB6XUfnHR60daMf2EzZU2v746EHu58MN3kAveFfbqRrcWd5-tDS7K-u-_1JBNmgg_vgVE_HIXLJ-H3nSUSgujW4YOVJzkyLbU8xAJiSJ_NeLBYjJyJhCNAgMBAAGjggUkMIIFIDCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRvNYqFx4fDp-iV_6CV_JvtWzks-DAfBgNVHSMEGDAWgBQU0jfg9tZ9ft2NurplqwSUJeCWHTCCAfsGA1UdHwSCAfIwggHuMHugeaB3hnVodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwfaB7oHmGd2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzI1L2N1cnJlbnQuY3JsMGygaqBohmZodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwgYGgf6B9hntodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwggIABggrBgEFBQcBAQSCAfIwggHuMH4GCCsGAQUFBzAChnJodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwgYAGCCsGAQUFBzAChnRodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBvBggrBgEFBQcwAoZjaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHgGCCsGAQUFBzAChmxodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAHyESoM-hJA8co5aYFKQj6Yb2naSt-_hW50RjbHBbcf7c32Ujn8L-srkiIyVxkEpzXn0sgWpC8m9Wmwi-IXcD8wG3oPqMrn5ZYvIwrFdrlRwKg23jUltqn23uy8oAzIxCBsBblPSNyWSbEL5Vi52YbLITPHu4uEC7Exy9jJvn6cttL4bste7Sfve85Dd-RbogDrr8HBad8-CN8sHHSyii8mKaK7rq75VE6arRrM28SQgrKJDPrv40C9I6Z5pK40CEUfpYyWTzS6FkLMf7SIjhz0Ilua9xqzb0IO32oVtuv4c-GmmjyJy8FRZzgEYbW_CUh19Gx-9L_Sd5ZzebW5exxE&s=YI1aY8Q7kBdnYMTfk6WmL5rnGLXZltZMhP7QKWVj5S_-PiQA72iof2KbwwdE2BOAVNQZvbCcle1QFGa7YO6fJo_3Bd2upXyUq5DqPgqMTzCABTMLmwnEyXm5HMm74xRwEgCiPFnLzcGMWkiHYJY_4_gVkr4HTh1v4lsHtefOR5eobzCaUV2Svr3fZTD6Lm2-Tw6dLR1jV4xeXVyDikKUWpwk2dbhioLYdDHzjyPSwq4s1tCUf0Rys5S87Hbl76to_3b3padiJWDTjH4OmlgjqQPeC7w72ncU2S9H6u34ed6kK1gmb0cOXVdSohUTPw8reASvMKEa-71BA-xcwR5DPg&h=2FO4pwNikBKb-cE0GMAX_zqnQjeRfz08qTOi31tCM0U + response: + body: + string: '{"status":"Creating"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002/operationStatuses/registries-e9612ab2-1983-11f1-aed4-002248b6daac?api-version=2025-03-01-preview&t=639084157872612849&c=MIIHlDCCBnygAwIBAgIQbRZBCnyTTrdKyx3sn6-cIjANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBFVVMyIENBIDAxMB4XDTI2MDIyNDE4NDcwN1oXDTI2MDgyMDAwNDcwN1owQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLYIfsKK3BxfjRY95DQ7nTiHuQIybDAR8CX9yInjq_0E3Mb9YwMAQGJklR1lZJqg9M7got1ThcwNEpPovodQrXAzXRPqJ0JyNpNf1UNLgRs-3_mYbXxvSrBdgdZL4WUq9XCQ9WaH2aM3MAuLy8FL835sRe_Zx46G3TsI9Grsv5U-8gTr440L6nsopLTJJzQCpxou4KEuTMiG2GpVzxExJwvUDuutVCxXnsUwksDnhFUbqcJ7mVhhK5If25oHTNYUQwYylqvq_5eVdfEXEzpbP3XfDdKxljTnSMHaniaYcYW3OmhIMmdnHNFiPA9LQ2DtYs_7T68xnPVpbVO0EZ2Em5AgMBAAGjggSSMIIEjjCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBQixmODlrY3K7hS01rA8V_TZUhMsjAfBgNVHSMEGDAWgBT87D7bqnwfgh4FuKEG-UPnArMKuTCCAbIGA1UdHwSCAakwggGlMGmgZ6BlhmNodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jcmxzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvNjUvY3VycmVudC5jcmwwa6BpoGeGZWh0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2Vhc3R1czIvY3Jscy9jY21lZWFzdHVzMnBraS9jY21lZWFzdHVzMmljYTAxLzY1L2N1cnJlbnQuY3JsMFqgWKBWhlRodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vZWFzdHVzMi9jcmxzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvNjUvY3VycmVudC5jcmwwb6BtoGuGaWh0dHA6Ly9jY21lZWFzdHVzMnBraS5lYXN0dXMyLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWVhc3R1czJpY2EwMS82NS9jdXJyZW50LmNybDCCAbcGCCsGAQUFBwEBBIIBqTCCAaUwbAYIKwYBBQUHMAKGYGh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9lYXN0dXMyL2NhY2VydHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS9jZXJ0LmNlcjBuBggrBgEFBQcwAoZiaHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvZWFzdHVzMi9jYWNlcnRzL2NjbWVlYXN0dXMycGtpL2NjbWVlYXN0dXMyaWNhMDEvY2VydC5jZXIwXQYIKwYBBQUHMAKGUWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9lYXN0dXMyL2NhY2VydHMvY2NtZWVhc3R1czJwa2kvY2NtZWVhc3R1czJpY2EwMS9jZXJ0LmNlcjBmBggrBgEFBQcwAoZaaHR0cDovL2NjbWVlYXN0dXMycGtpLmVhc3R1czIucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lZWFzdHVzMmljYTAxMA0GCSqGSIb3DQEBCwUAA4IBAQBKY8uIen-4v_aGTptgf_04u1F6978whzIp4ZiTbOSXPwNnweOy6hCQUcuaqDgVZEiozCZ3DTEQooEcQdtH6WhiCDn5FLdHIVfLyo35uSdRGa9igGbbQ22s_ZI2_Sp17bV5_a-akDuAb6xVSZB_RbHXoicbUykmyHQ2aRb7wLI-YJ4X_aS00yjgBXHLbbbD1PGhTMYVk-5Qy8AYGA2_CTJ0ZS5toZF1EKxkz6ka6D_ROn4Sg7PthZX7Y3YpuVwnCelnvJvOgla_MQjpNDBcgmnVyU-ChBBd3TykrRxVWNXjEm54XPippvvwuKEdc4BCa38ZFVNgvDuK-tY_JpycugPZ&s=dS5Ks3FK4WIkDLtAHb8D7CTCXm2Xasm_URyCVpNGWTkJDdCjhkSnF7UOCrvnmWomUHp9hKCh-ae4kDqryXve2x6FHRaEinFOrDybu-5PruR3Vt_Gv2vQaZuaYwiRtaWXSTyQEALeQWqmSVoEdlDn6fgwMpMI-8M0o_0BLikRNbrfGkksRG5F79oStbGpdEpBT80A_JtUH-aF_Bq000qYd7Opb5paY39N2OtHx7eN3vpRdhPMmsqo7-0_RPXuK0AdrpGvfJvNjek8lmicYmJTqA5D2LBx9fCm3m7L-Q9yLqdWPgs0ZA3Vuo7SvpC-YqLu-vaze0-XmKyN1sHoc20Dyw&h=S1oBDKV5D4h6-Z38bW2kCVJ0NxwI7qg7Sq9FYzAZ0qw + cache-control: + - no-cache + content-length: + - '21' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 06 Mar 2026 17:43:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus2/040bbb8a-7a3c-48ae-9a7f-74520dfd168f + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 8CA873F464DA447DA7E92B49935FC2A9 Ref B: MWH011020807040 Ref C: 2026-03-06T17:43:06Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -n -g -l --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002/operationStatuses/registries-e9612ab2-1983-11f1-aed4-002248b6daac?api-version=2025-03-01-preview&t=639084157861572597&c=MIIIJjCCBw6gAwIBAgIQXAg_KQfqNmXWsnKmcWm-CjANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXQ1VTIENBIDAxMB4XDTI2MDMwMzE4NDAwNFoXDTI2MDgzMDAwNDAwNFowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCq2QsnpddKa8kR8gt-vA9VEusmZorO2S-vbINESl_vgl_PJICxJntGEX47Fd1DDc76k_3GujB58pb9CVQcLZ3-ca4xBv6hEqbf7VGNJdlUmL6V31uaLBLUMfEySd5hdTIpu4K8C1BsXVfomETR-eBTaEKo7U6rad09i8wEBquSFVf5S7J71JehWC4rsigucyf3uMHNqTzZudQy7Dr4g3o1z8GDPMMNrN8NB6XUfnHR60daMf2EzZU2v746EHu58MN3kAveFfbqRrcWd5-tDS7K-u-_1JBNmgg_vgVE_HIXLJ-H3nSUSgujW4YOVJzkyLbU8xAJiSJ_NeLBYjJyJhCNAgMBAAGjggUkMIIFIDCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRvNYqFx4fDp-iV_6CV_JvtWzks-DAfBgNVHSMEGDAWgBQU0jfg9tZ9ft2NurplqwSUJeCWHTCCAfsGA1UdHwSCAfIwggHuMHugeaB3hnVodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwfaB7oHmGd2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzI1L2N1cnJlbnQuY3JsMGygaqBohmZodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwgYGgf6B9hntodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwggIABggrBgEFBQcBAQSCAfIwggHuMH4GCCsGAQUFBzAChnJodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwgYAGCCsGAQUFBzAChnRodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBvBggrBgEFBQcwAoZjaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHgGCCsGAQUFBzAChmxodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAHyESoM-hJA8co5aYFKQj6Yb2naSt-_hW50RjbHBbcf7c32Ujn8L-srkiIyVxkEpzXn0sgWpC8m9Wmwi-IXcD8wG3oPqMrn5ZYvIwrFdrlRwKg23jUltqn23uy8oAzIxCBsBblPSNyWSbEL5Vi52YbLITPHu4uEC7Exy9jJvn6cttL4bste7Sfve85Dd-RbogDrr8HBad8-CN8sHHSyii8mKaK7rq75VE6arRrM28SQgrKJDPrv40C9I6Z5pK40CEUfpYyWTzS6FkLMf7SIjhz0Ilua9xqzb0IO32oVtuv4c-GmmjyJy8FRZzgEYbW_CUh19Gx-9L_Sd5ZzebW5exxE&s=YI1aY8Q7kBdnYMTfk6WmL5rnGLXZltZMhP7QKWVj5S_-PiQA72iof2KbwwdE2BOAVNQZvbCcle1QFGa7YO6fJo_3Bd2upXyUq5DqPgqMTzCABTMLmwnEyXm5HMm74xRwEgCiPFnLzcGMWkiHYJY_4_gVkr4HTh1v4lsHtefOR5eobzCaUV2Svr3fZTD6Lm2-Tw6dLR1jV4xeXVyDikKUWpwk2dbhioLYdDHzjyPSwq4s1tCUf0Rys5S87Hbl76to_3b3padiJWDTjH4OmlgjqQPeC7w72ncU2S9H6u34ed6kK1gmb0cOXVdSohUTPw8reASvMKEa-71BA-xcwR5DPg&h=2FO4pwNikBKb-cE0GMAX_zqnQjeRfz08qTOi31tCM0U + response: + body: + string: '{"status":"Succeeded"}' + headers: + api-supported-versions: + - 2025-03-01-preview + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002/operationStatuses/registries-e9612ab2-1983-11f1-aed4-002248b6daac?api-version=2025-03-01-preview&t=639084157982819312&c=MIIIJjCCBw6gAwIBAgIQXAg_KQfqNmXWsnKmcWm-CjANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXQ1VTIENBIDAxMB4XDTI2MDMwMzE4NDAwNFoXDTI2MDgzMDAwNDAwNFowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCq2QsnpddKa8kR8gt-vA9VEusmZorO2S-vbINESl_vgl_PJICxJntGEX47Fd1DDc76k_3GujB58pb9CVQcLZ3-ca4xBv6hEqbf7VGNJdlUmL6V31uaLBLUMfEySd5hdTIpu4K8C1BsXVfomETR-eBTaEKo7U6rad09i8wEBquSFVf5S7J71JehWC4rsigucyf3uMHNqTzZudQy7Dr4g3o1z8GDPMMNrN8NB6XUfnHR60daMf2EzZU2v746EHu58MN3kAveFfbqRrcWd5-tDS7K-u-_1JBNmgg_vgVE_HIXLJ-H3nSUSgujW4YOVJzkyLbU8xAJiSJ_NeLBYjJyJhCNAgMBAAGjggUkMIIFIDCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRvNYqFx4fDp-iV_6CV_JvtWzks-DAfBgNVHSMEGDAWgBQU0jfg9tZ9ft2NurplqwSUJeCWHTCCAfsGA1UdHwSCAfIwggHuMHugeaB3hnVodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwfaB7oHmGd2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzI1L2N1cnJlbnQuY3JsMGygaqBohmZodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwgYGgf6B9hntodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwggIABggrBgEFBQcBAQSCAfIwggHuMH4GCCsGAQUFBzAChnJodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwgYAGCCsGAQUFBzAChnRodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBvBggrBgEFBQcwAoZjaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHgGCCsGAQUFBzAChmxodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAHyESoM-hJA8co5aYFKQj6Yb2naSt-_hW50RjbHBbcf7c32Ujn8L-srkiIyVxkEpzXn0sgWpC8m9Wmwi-IXcD8wG3oPqMrn5ZYvIwrFdrlRwKg23jUltqn23uy8oAzIxCBsBblPSNyWSbEL5Vi52YbLITPHu4uEC7Exy9jJvn6cttL4bste7Sfve85Dd-RbogDrr8HBad8-CN8sHHSyii8mKaK7rq75VE6arRrM28SQgrKJDPrv40C9I6Z5pK40CEUfpYyWTzS6FkLMf7SIjhz0Ilua9xqzb0IO32oVtuv4c-GmmjyJy8FRZzgEYbW_CUh19Gx-9L_Sd5ZzebW5exxE&s=KucFe4y0gyRXFBDHtZeYItU0Zk2XWEQehuastOmRvGrG_fCZ7pYkPQ_WC2UyymVuan-kUiBQU15eEMGvAtGUAWpkdrR8nPfGkgDJJK1QUqDSHQZauzMofsByioj3JHXLY7F0c90b34Jwb5k8XCjMT0SWVM6nT0G9te9dquDjAb9-2cDXvRuqjsH6Nka9eaS3bX5vTRB75iICbwv84SL-YAZ-tkHYzz37rbBAGJa8wSb67PkWEy6JLPjdu0ggxPdvlklExIVgKBLQHxKqoLsGfk6s-7MQ4MYydXu-1vi9qfNBlTC3AZnI8Brlp6lLsjsAdjsnXIUufce3rb6OSKflfw&h=bXrvLJhEutWNmxfhmV3r0z8uqAnqTWZuGN9pj3ZuX-Y + cache-control: + - no-cache + content-length: + - '22' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 06 Mar 2026 17:43:18 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/7ade9a4e-a4aa-4194-a4fd-a9ca7baf6e9a + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: F3D7C72F963C4FFCAEC9AE06C51C870A Ref B: MWH011020807040 Ref C: 2026-03-06T17:43:17Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr create + Connection: + - keep-alive + ParameterSetName: + - -n -g -l --sku + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002","name":"acr000002","location":"eastus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-03-06T17:42:58.5161733+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-03-06T17:42:58.5161733+00:00"},"properties":{"loginServer":"acr000002.azurecr.io","creationDate":"2026-03-06T17:42:58.5161733Z","provisioningState":"Succeeded","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-03-06T17:43:05.9613293+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-03-06T17:43:05.9613789+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1527' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 06 Mar 2026 17:43:18 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: B0F4FFA18EE248808F0930B5E77542DA Ref B: CO1EDGE1811 Ref C: 2026-03-06T17:43:18Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - acr import-pipeline list + Connection: + - keep-alive + ParameterSetName: + - -r -g + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002/importPipelines?api-version=2019-12-01-preview + response: + body: + string: '{"value":[]}' + headers: + api-supported-versions: + - 2019-12-01-preview, 2020-11-01-preview, 2021-06-01-preview, 2021-08-01-preview, + 2021-12-01-preview, 2022-02-01-preview, 2023-01-01-preview, 2023-06-01-preview, + 2023-08-01-preview, 2023-11-01-preview, 2024-01-01-preview, 2024-11-01-preview, + 2025-03-01-preview, 2025-05-01-preview, 2025-09-01-preview + cache-control: + - no-cache + content-length: + - '12' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 06 Mar 2026 17:43:20 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/3adba427-4007-4b05-9ac5-0050b03936e2 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 534201EBA88D40A2BB9ACEFBFBA28A3C Ref B: MWH011020808025 Ref C: 2026-03-06T17:43:20Z' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - -n -g -y + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002?api-version=2025-03-01-preview + response: + body: + string: '{"sku":{"name":"Premium","tier":"Premium"},"type":"Microsoft.ContainerRegistry/registries","id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest.rg000001/providers/Microsoft.ContainerRegistry/registries/acr000002","name":"acr000002","location":"eastus","tags":{},"systemData":{"createdBy":"test@example.com","createdByType":"User","createdAt":"2026-03-06T17:42:58.5161733+00:00","lastModifiedBy":"test@example.com","lastModifiedByType":"User","lastModifiedAt":"2026-03-06T17:42:58.5161733+00:00"},"properties":{"loginServer":"acr000002.azurecr.io","creationDate":"2026-03-06T17:42:58.5161733Z","provisioningState":"Deleting","adminUserEnabled":false,"networkRuleSet":{"defaultAction":"Allow","ipRules":[]},"policies":{"quarantinePolicy":{"status":"disabled"},"trustPolicy":{"type":"Notary","status":"disabled"},"retentionPolicy":{"days":7,"lastUpdatedTime":"2026-03-06T17:43:05.9613293+00:00","status":"disabled"},"exportPolicy":{"status":"enabled"},"azureADAuthenticationAsArmPolicy":{"status":"enabled"},"softDeletePolicy":{"retentionDays":7,"lastUpdatedTime":"2026-03-06T17:43:05.9613789+00:00","status":"disabled"}},"encryption":{"status":"disabled"},"dataEndpointEnabled":false,"dataEndpointHostNames":[],"privateEndpointConnections":[],"publicNetworkAccess":"Enabled","networkRuleBypassOptions":"AzureServices","zoneRedundancy":"Disabled","anonymousPullEnabled":false,"metadataSearch":"Disabled","roleAssignmentMode":"LegacyRegistryPermissions","autoGeneratedDomainNameLabelScope":"Unsecure"}}' + headers: + api-supported-versions: + - 2025-03-01-preview + cache-control: + - no-cache + content-length: + - '1526' + content-type: + - application/json; charset=utf-8 + date: + - Fri, 06 Mar 2026 17:43:21 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/eastus/operationResults/registries-f74dd099-1983-11f1-b3ea-002248b6daac?api-version=2025-03-01-preview&t=639084158020640035&c=MIIHwzCCBqugAwIBAgIQXVokCjoBy2ohckt4PAvhMjANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMTI4MTQ0MTQ1WhcNMjYwNzIzMjA0MTQ1WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANgivDnhK_iJT5EjNIU2QtasL0cHOcNgQ8WfzfGrxsHBk-T_-Vp2xK7WjEeU-7QYhGisaPiBuCBGJ1Ij4lv0CslNUMIP0XmlAueDccohU6R646GI0BNqXPc-JKntdxGRsgo2clxHImxy7S_aBExnsMD-gceRyeUyZLIPKh8WjqMb_H9zXdh7ZmFQRiB8BAIxbxnhMhzs7mgq6Ob5kC1i2ZumWN853Kc6mi0ZaKdloecRnSevaUpmpFxKvdMqJ762jdFhzzzoPdHc5eboHurBbz1XAsn_DT7F4U8FR2VRduQucYdJmRjOOEk-ras-QLqZPsuayuDVPPKJUb18ADQaXvUCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFDSwQskzIdGT5SwO57YvjZibE5PQMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS82NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNjUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS82NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzY1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBABR95kOzyDSa3qXCgFt3xeWoDpaV6sKgGNAPryjMkDMPICfy_zjsgLph4V4HEwF5kFpQENtzNQc6I6cyzCEUCS5bUX9xDsDbLcXuBbwVBQz-lfiq79Vgc4ybyCRh7wSiF3SlYVz0p4wULJVQaQR0iUCIOzCKHA4eXQExg6_6KiUibNu8AGT9qHYSr6PRNafkGpilhCUZ2dFWf5c2iTeLFAHYslomMMPtFmb0Q2zCxSBTlwA7IbfVk1dkz2bNiHzzhqNm7J6-VlEeXpI4__EQ4JMp5yfyObUDHtsZCBLb-OrwI0GV0LevJOiTPSL373hO9aj8tuF1GfkB4svCkHn-mqQ&s=M7MPKYqjII2G4ediIPo5RbtUa4pmMk4773mD7J94OLm2KvNg-0KQL9d2B4Nx64NUlTk8zi9UkSb0FjBPl5NAqxWJc6xI2kjW-xtVU1Z_Cgdi4zMGOW8YYAQjxzKElo1AMiNFpnqI_I-zPlXju9nyHnSAfib1LXyADiguceGPirJ5khCB7CAaDtEd_u-hV-r-fRVKFZ9bXMbLcl5yxMEYVphYOwDppIdUuHuQ8xhFU00TbNNA6_TAxT3HE_4XSbZRmjpKZ-54w_hbxvg9st22I8Vd4W8wqe4ph3nECgv42Z23APx8Vdwy_oM80wrdQOcPc6D_PDg39AOxgsX-UJH0wg&h=2HSogvKYVNrVmI40Irqm5nnqpjO5CfAtvnHF6HNKPmA + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westcentralus/04f86c64-4192-44c2-bf83-6c175c394015 + x-ms-ratelimit-remaining-subscription-deletes: + - '799' + x-ms-ratelimit-remaining-subscription-global-deletes: + - '11999' + x-msedge-ref: + - 'Ref A: 7A6A546ECA5149B4944F4933B7EE4FAA Ref B: CO1EDGE1316 Ref C: 2026-03-06T17:43:21Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -n -g -y + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/eastus/operationResults/registries-f74dd099-1983-11f1-b3ea-002248b6daac?api-version=2025-03-01-preview&t=639084158020640035&c=MIIHwzCCBqugAwIBAgIQXVokCjoBy2ohckt4PAvhMjANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDEypDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBDVVMgQ0EgMDEwHhcNMjYwMTI4MTQ0MTQ1WhcNMjYwNzIzMjA0MTQ1WjBAMT4wPAYDVQQDEzVhc3luY29wZXJhdGlvbnNpZ25pbmdjZXJ0aWZpY2F0ZS5tYW5hZ2VtZW50LmF6dXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANgivDnhK_iJT5EjNIU2QtasL0cHOcNgQ8WfzfGrxsHBk-T_-Vp2xK7WjEeU-7QYhGisaPiBuCBGJ1Ij4lv0CslNUMIP0XmlAueDccohU6R646GI0BNqXPc-JKntdxGRsgo2clxHImxy7S_aBExnsMD-gceRyeUyZLIPKh8WjqMb_H9zXdh7ZmFQRiB8BAIxbxnhMhzs7mgq6Ob5kC1i2ZumWN853Kc6mi0ZaKdloecRnSevaUpmpFxKvdMqJ762jdFhzzzoPdHc5eboHurBbz1XAsn_DT7F4U8FR2VRduQucYdJmRjOOEk-ras-QLqZPsuayuDVPPKJUb18ADQaXvUCAwEAAaOCBMIwggS-MIGdBgNVHSAEgZUwgZIwDAYKKwYBBAGCN3sBATBmBgorBgEEAYI3ewICMFgwVgYIKwYBBQUHAgIwSh5IADMAMwBlADAAMQA5ADIAMQAtADQAZAA2ADQALQA0AGYAOABjAC0AYQAwADUANQAtADUAYgBkAGEAZgBmAGQANQBlADMAMwBkMAwGCisGAQQBgjd7AwIwDAYKKwYBBAGCN3sEAjAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0OBBYEFDSwQskzIdGT5SwO57YvjZibE5PQMB8GA1UdIwQYMBaAFPzkWgovhQ7nRLkHc3jg1EQHohkRMIIBygYDVR0fBIIBwTCCAb0wb6BtoGuGaWh0dHA6Ly9wcmltYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS82NS9jdXJyZW50LmNybDBxoG-gbYZraHR0cDovL3NlY29uZGFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvY2VudHJhbHVzL2NybHMvY2NtZWNlbnRyYWx1c3BraS9jY21lY2VudHJhbHVzaWNhMDEvNjUvY3VycmVudC5jcmwwYKBeoFyGWmh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9jZW50cmFsdXMvY3Jscy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS82NS9jdXJyZW50LmNybDB1oHOgcYZvaHR0cDovL2NjbWVjZW50cmFsdXNwa2kuY2VudHJhbHVzLnBraS5jb3JlLndpbmRvd3MubmV0L2NlcnRpZmljYXRlQXV0aG9yaXRpZXMvY2NtZWNlbnRyYWx1c2ljYTAxLzY1L2N1cnJlbnQuY3JsMIIBzwYIKwYBBQUHAQEEggHBMIIBvTByBggrBgEFBQcwAoZmaHR0cDovL3ByaW1hcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHQGCCsGAQUFBzAChmhodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC9jZW50cmFsdXMvY2FjZXJ0cy9jY21lY2VudHJhbHVzcGtpL2NjbWVjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBjBggrBgEFBQcwAoZXaHR0cDovL2NybC5taWNyb3NvZnQuY29tL2NlbnRyYWx1cy9jYWNlcnRzL2NjbWVjZW50cmFsdXNwa2kvY2NtZWNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMGwGCCsGAQUFBzAChmBodHRwOi8vY2NtZWNlbnRyYWx1c3BraS5jZW50cmFsdXMucGtpLmNvcmUud2luZG93cy5uZXQvY2VydGlmaWNhdGVBdXRob3JpdGllcy9jY21lY2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBABR95kOzyDSa3qXCgFt3xeWoDpaV6sKgGNAPryjMkDMPICfy_zjsgLph4V4HEwF5kFpQENtzNQc6I6cyzCEUCS5bUX9xDsDbLcXuBbwVBQz-lfiq79Vgc4ybyCRh7wSiF3SlYVz0p4wULJVQaQR0iUCIOzCKHA4eXQExg6_6KiUibNu8AGT9qHYSr6PRNafkGpilhCUZ2dFWf5c2iTeLFAHYslomMMPtFmb0Q2zCxSBTlwA7IbfVk1dkz2bNiHzzhqNm7J6-VlEeXpI4__EQ4JMp5yfyObUDHtsZCBLb-OrwI0GV0LevJOiTPSL373hO9aj8tuF1GfkB4svCkHn-mqQ&s=M7MPKYqjII2G4ediIPo5RbtUa4pmMk4773mD7J94OLm2KvNg-0KQL9d2B4Nx64NUlTk8zi9UkSb0FjBPl5NAqxWJc6xI2kjW-xtVU1Z_Cgdi4zMGOW8YYAQjxzKElo1AMiNFpnqI_I-zPlXju9nyHnSAfib1LXyADiguceGPirJ5khCB7CAaDtEd_u-hV-r-fRVKFZ9bXMbLcl5yxMEYVphYOwDppIdUuHuQ8xhFU00TbNNA6_TAxT3HE_4XSbZRmjpKZ-54w_hbxvg9st22I8Vd4W8wqe4ph3nECgv42Z23APx8Vdwy_oM80wrdQOcPc6D_PDg39AOxgsX-UJH0wg&h=2HSogvKYVNrVmI40Irqm5nnqpjO5CfAtvnHF6HNKPmA + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Fri, 06 Mar 2026 17:43:22 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/eastus/operationResults/registries-f74dd099-1983-11f1-b3ea-002248b6daac?api-version=2025-03-01-preview&t=639084158028522265&c=MIIIJjCCBw6gAwIBAgIQXAg_KQfqNmXWsnKmcWm-CjANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXQ1VTIENBIDAxMB4XDTI2MDMwMzE4NDAwNFoXDTI2MDgzMDAwNDAwNFowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCq2QsnpddKa8kR8gt-vA9VEusmZorO2S-vbINESl_vgl_PJICxJntGEX47Fd1DDc76k_3GujB58pb9CVQcLZ3-ca4xBv6hEqbf7VGNJdlUmL6V31uaLBLUMfEySd5hdTIpu4K8C1BsXVfomETR-eBTaEKo7U6rad09i8wEBquSFVf5S7J71JehWC4rsigucyf3uMHNqTzZudQy7Dr4g3o1z8GDPMMNrN8NB6XUfnHR60daMf2EzZU2v746EHu58MN3kAveFfbqRrcWd5-tDS7K-u-_1JBNmgg_vgVE_HIXLJ-H3nSUSgujW4YOVJzkyLbU8xAJiSJ_NeLBYjJyJhCNAgMBAAGjggUkMIIFIDCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRvNYqFx4fDp-iV_6CV_JvtWzks-DAfBgNVHSMEGDAWgBQU0jfg9tZ9ft2NurplqwSUJeCWHTCCAfsGA1UdHwSCAfIwggHuMHugeaB3hnVodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwfaB7oHmGd2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzI1L2N1cnJlbnQuY3JsMGygaqBohmZodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwgYGgf6B9hntodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwggIABggrBgEFBQcBAQSCAfIwggHuMH4GCCsGAQUFBzAChnJodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwgYAGCCsGAQUFBzAChnRodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBvBggrBgEFBQcwAoZjaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHgGCCsGAQUFBzAChmxodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAHyESoM-hJA8co5aYFKQj6Yb2naSt-_hW50RjbHBbcf7c32Ujn8L-srkiIyVxkEpzXn0sgWpC8m9Wmwi-IXcD8wG3oPqMrn5ZYvIwrFdrlRwKg23jUltqn23uy8oAzIxCBsBblPSNyWSbEL5Vi52YbLITPHu4uEC7Exy9jJvn6cttL4bste7Sfve85Dd-RbogDrr8HBad8-CN8sHHSyii8mKaK7rq75VE6arRrM28SQgrKJDPrv40C9I6Z5pK40CEUfpYyWTzS6FkLMf7SIjhz0Ilua9xqzb0IO32oVtuv4c-GmmjyJy8FRZzgEYbW_CUh19Gx-9L_Sd5ZzebW5exxE&s=SKpRzsfFzJOwvtgDQch6R24K6PhrEYyInFPdYSgHLCArtnYFMaRx-iQuwQsXTevQmTZj0x5btwNiI5FWw3SqKzZf-PpcdMoz5iMY6E3Px0qijF8IMK46i062tgaY5PZ9PVLW4SQrXvr2Rq8wlvsEFcavfX4wKkUaC3X0jilbirLUliKA6KRbiq3uCYTuFTMA1IHv-1_7teB9_1V5hvX7DdiOlYUSY3z_yMzQ9lUalVO4jsM7-Le14n1raAgxnSDISug5psFl-d53yjfvMzkQ4HInnusggLamoXrby-3znevDkxfIygtoAUjNDZB6Zkz3dX_QCO7hMMCe5pSMrQ1Ndg&h=mrRpyrPXoYZsPAb5wvy3UiVsDWsfuMIIsDJ1HvIi-EA + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/258817c9-0b03-4bd5-82a3-c4af7ce2ddab + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: 33EAD532579B451CB687FBDBCD1F6A46 Ref B: CO6AA3150219019 Ref C: 2026-03-06T17:43:22Z' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - acr delete + Connection: + - keep-alive + ParameterSetName: + - -n -g -y + User-Agent: + - AZURECLI/2.82.0 azsdk-python-core/1.37.0 Python/3.12.10 (Windows-11-10.0.26100-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.ContainerRegistry/locations/eastus/operationResults/registries-f74dd099-1983-11f1-b3ea-002248b6daac?api-version=2025-03-01-preview&t=639084158028522265&c=MIIIJjCCBw6gAwIBAgIQXAg_KQfqNmXWsnKmcWm-CjANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDEytDQ01FIEcxIFRMUyBSU0EgMjA0OCBTSEEyNTYgMjA0OSBXQ1VTIENBIDAxMB4XDTI2MDMwMzE4NDAwNFoXDTI2MDgzMDAwNDAwNFowQDE-MDwGA1UEAxM1YXN5bmNvcGVyYXRpb25zaWduaW5nY2VydGlmaWNhdGUubWFuYWdlbWVudC5henVyZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCq2QsnpddKa8kR8gt-vA9VEusmZorO2S-vbINESl_vgl_PJICxJntGEX47Fd1DDc76k_3GujB58pb9CVQcLZ3-ca4xBv6hEqbf7VGNJdlUmL6V31uaLBLUMfEySd5hdTIpu4K8C1BsXVfomETR-eBTaEKo7U6rad09i8wEBquSFVf5S7J71JehWC4rsigucyf3uMHNqTzZudQy7Dr4g3o1z8GDPMMNrN8NB6XUfnHR60daMf2EzZU2v746EHu58MN3kAveFfbqRrcWd5-tDS7K-u-_1JBNmgg_vgVE_HIXLJ-H3nSUSgujW4YOVJzkyLbU8xAJiSJ_NeLBYjJyJhCNAgMBAAGjggUkMIIFIDCBnQYDVR0gBIGVMIGSMAwGCisGAQQBgjd7AQEwZgYKKwYBBAGCN3sCAjBYMFYGCCsGAQUFBwICMEoeSAAzADMAZQAwADEAOQAyADEALQA0AGQANgA0AC0ANABmADgAYwAtAGEAMAA1ADUALQA1AGIAZABhAGYAZgBkADUAZQAzADMAZDAMBgorBgEEAYI3ewMCMAwGCisGAQQBgjd7BAIwDAYDVR0TAQH_BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH_BAQDAgWgMB0GA1UdDgQWBBRvNYqFx4fDp-iV_6CV_JvtWzks-DAfBgNVHSMEGDAWgBQU0jfg9tZ9ft2NurplqwSUJeCWHTCCAfsGA1UdHwSCAfIwggHuMHugeaB3hnVodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwfaB7oHmGd2h0dHA6Ly9zZWNvbmRhcnktY2RuLnBraS5jb3JlLndpbmRvd3MubmV0L3dlc3RjZW50cmFsdXMvY3Jscy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxLzI1L2N1cnJlbnQuY3JsMGygaqBohmZodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vd2VzdGNlbnRyYWx1cy9jcmxzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwgYGgf6B9hntodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvMjUvY3VycmVudC5jcmwwggIABggrBgEFBQcBAQSCAfIwggHuMH4GCCsGAQUFBzAChnJodHRwOi8vcHJpbWFyeS1jZG4ucGtpLmNvcmUud2luZG93cy5uZXQvd2VzdGNlbnRyYWx1cy9jYWNlcnRzL2NjbWV3ZXN0Y2VudHJhbHVzcGtpL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEvY2VydC5jZXIwgYAGCCsGAQUFBzAChnRodHRwOi8vc2Vjb25kYXJ5LWNkbi5wa2kuY29yZS53aW5kb3dzLm5ldC93ZXN0Y2VudHJhbHVzL2NhY2VydHMvY2NtZXdlc3RjZW50cmFsdXNwa2kvY2NtZXdlc3RjZW50cmFsdXNpY2EwMS9jZXJ0LmNlcjBvBggrBgEFBQcwAoZjaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3dlc3RjZW50cmFsdXMvY2FjZXJ0cy9jY21ld2VzdGNlbnRyYWx1c3BraS9jY21ld2VzdGNlbnRyYWx1c2ljYTAxL2NlcnQuY2VyMHgGCCsGAQUFBzAChmxodHRwOi8vY2NtZXdlc3RjZW50cmFsdXNwa2kud2VzdGNlbnRyYWx1cy5wa2kuY29yZS53aW5kb3dzLm5ldC9jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzL2NjbWV3ZXN0Y2VudHJhbHVzaWNhMDEwDQYJKoZIhvcNAQELBQADggEBAHyESoM-hJA8co5aYFKQj6Yb2naSt-_hW50RjbHBbcf7c32Ujn8L-srkiIyVxkEpzXn0sgWpC8m9Wmwi-IXcD8wG3oPqMrn5ZYvIwrFdrlRwKg23jUltqn23uy8oAzIxCBsBblPSNyWSbEL5Vi52YbLITPHu4uEC7Exy9jJvn6cttL4bste7Sfve85Dd-RbogDrr8HBad8-CN8sHHSyii8mKaK7rq75VE6arRrM28SQgrKJDPrv40C9I6Z5pK40CEUfpYyWTzS6FkLMf7SIjhz0Ilua9xqzb0IO32oVtuv4c-GmmjyJy8FRZzgEYbW_CUh19Gx-9L_Sd5ZzebW5exxE&s=SKpRzsfFzJOwvtgDQch6R24K6PhrEYyInFPdYSgHLCArtnYFMaRx-iQuwQsXTevQmTZj0x5btwNiI5FWw3SqKzZf-PpcdMoz5iMY6E3Px0qijF8IMK46i062tgaY5PZ9PVLW4SQrXvr2Rq8wlvsEFcavfX4wKkUaC3X0jilbirLUliKA6KRbiq3uCYTuFTMA1IHv-1_7teB9_1V5hvX7DdiOlYUSY3z_yMzQ9lUalVO4jsM7-Le14n1raAgxnSDISug5psFl-d53yjfvMzkQ4HInnusggLamoXrby-3znevDkxfIygtoAUjNDZB6Zkz3dX_QCO7hMMCe5pSMrQ1Ndg&h=mrRpyrPXoYZsPAb5wvy3UiVsDWsfuMIIsDJ1HvIi-EA + response: + body: + string: '' + headers: + cache-control: + - no-cache + content-length: + - '0' + date: + - Fri, 06 Mar 2026 17:43:33 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=55d6af6c-b4d5-4614-93ee-9417c506c9f1/westus/901bb32e-4bcc-4ebc-8394-747f2ccc5f73 + x-ms-ratelimit-remaining-subscription-global-reads: + - '16499' + x-msedge-ref: + - 'Ref A: ABECEA3DD97C41109BA548494018B947 Ref B: CO1EDGE2918 Ref C: 2026-03-06T17:43:33Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_pipelines.py b/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_pipelines.py new file mode 100644 index 00000000000..07ddceecd45 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_pipelines.py @@ -0,0 +1,363 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +import unittest +from azure.cli.testsdk import ScenarioTest, ResourceGroupPreparer, StorageAccountPreparer + + +class AcrTransferPipelineScenarioTest(ScenarioTest): + """Test cases for ACR import/export pipelines with different authentication modes.""" + + @ResourceGroupPreparer(name_prefix='cli_test_acr_transfer_export_mi_') + @StorageAccountPreparer(name_prefix='acrtransfer', kind='StorageV2', sku='Standard_LRS') + def test_acr_export_pipeline_entra_mi_auth_no_identity(self, resource_group, storage_account): + """ + Test Case 1: Create export pipeline with entra-mi-auth mode, no identity specified. + Expected: System-assigned managed identity should be automatically provisioned. + """ + self.kwargs.update({ + 'registry': self.create_random_name('acrtest', 20), + 'pipeline': self.create_random_name('pipeline', 20), + 'storage_account': storage_account, + 'container': 'export-container' + }) + + # Create registry + self.cmd('acr create -g {rg} -n {registry} --sku Premium') + + # Create storage container + self.cmd('storage container create -n {container} --account-name {storage_account}') + + # Create export pipeline with entra-mi-auth, no identity specified + result = self.cmd('acr export-pipeline create -g {rg} -r {registry} -n {pipeline} ' + '--storage-access-mode entra-mi-auth ' + '--storage-container-uri https://{storage_account}.blob.core.windows.net/{container}', + checks=[ + self.check('name', '{pipeline}'), + self.check('provisioningState', 'Succeeded'), + self.check('target.storageAccessMode', 'ManagedIdentity'), + self.check('identity.type', 'systemAssigned'), + self.exists('identity.principalId'), + self.check('target.keyVaultUri', None) + ]).get_output_in_json() + + # Verify system-assigned identity was created + self.assertIsNotNone(result['identity']['principalId']) + self.assertEqual(result['identity']['type'], 'systemAssigned') + + # Clean up + self.cmd('acr export-pipeline delete -g {rg} -r {registry} -n {pipeline}') + self.cmd('acr delete -g {rg} -n {registry} --yes') + + @ResourceGroupPreparer(name_prefix='cli_test_acr_transfer_export_sas_') + @StorageAccountPreparer(name_prefix='acrtransfer', kind='StorageV2', sku='Standard_LRS') + def test_acr_export_pipeline_sas_token(self, resource_group, storage_account): + """ + Test Case 2: Create export pipeline with storage-sas-token mode. + Expected: Pipeline should be created with SasToken mode and keyVaultUri set. + """ + self.kwargs.update({ + 'registry': self.create_random_name('acrtest', 20), + 'pipeline': self.create_random_name('pipeline', 20), + 'storage_account': storage_account, + 'container': 'export-container', + 'keyvault': self.create_random_name('kv', 20), + 'secret': 'sas-token-secret' + }) + + # Create registry + self.cmd('acr create -g {rg} -n {registry} --sku Premium') + + # Create key vault with access policies (not RBAC) + self.cmd('keyvault create -g {rg} -n {keyvault} --enable-rbac-authorization false') + + # Generate SAS token and store in Key Vault + from datetime import datetime, timedelta + expiry = (datetime.utcnow() + timedelta(days=30)).strftime('%Y-%m-%dT%H:%MZ') + sas_token = self.cmd('storage container generate-sas ' + '--account-name {storage_account} ' + '--name {container} ' + '--permissions racwdl ' + f'--expiry {expiry} ' + '-o tsv').output.strip() + + self.kwargs['sas_token'] = sas_token + self.cmd('keyvault secret set --vault-name {keyvault} -n {secret} --value "{sas_token}"') + + # Create storage container + self.cmd('storage container create -n {container} --account-name {storage_account}') + + # Create export pipeline with storage-sas-token + self.cmd('acr export-pipeline create -g {rg} -r {registry} -n {pipeline} ' + '--storage-access-mode storage-sas-token ' + '--secret-uri https://{keyvault}.vault.azure.net/secrets/{secret} ' + '--storage-container-uri https://{storage_account}.blob.core.windows.net/{container}', + checks=[ + self.check('name', '{pipeline}'), + self.check('provisioningState', 'Succeeded'), + self.check('target.storageAccessMode', 'SasToken'), + self.check('target.keyVaultUri', 'https://{keyvault}.vault.azure.net/secrets/{secret}'), + self.check('identity.type', 'systemAssigned') + ]) + + # Clean up + self.cmd('acr export-pipeline delete -g {rg} -r {registry} -n {pipeline}') + self.cmd('acr delete -g {rg} -n {registry} --yes') + self.cmd('keyvault delete -g {rg} -n {keyvault}') + + @ResourceGroupPreparer(name_prefix='cli_test_acr_transfer_export_uai_') + @StorageAccountPreparer(name_prefix='acrtransfer', kind='StorageV2', sku='Standard_LRS') + def test_acr_export_pipeline_entra_mi_auth_user_assigned(self, resource_group, storage_account): + """ + Test Case 3: Create export pipeline with entra-mi-auth mode and user-assigned identity. + Expected: Pipeline should use the provided user-assigned managed identity. + """ + self.kwargs.update({ + 'registry': self.create_random_name('acrtest', 20), + 'pipeline': self.create_random_name('pipeline', 20), + 'storage_account': storage_account, + 'container': 'export-container', + 'identity': self.create_random_name('identity', 20) + }) + + # Create registry + self.cmd('acr create -g {rg} -n {registry} --sku Premium') + + # Create user-assigned managed identity + identity_result = self.cmd('identity create -g {rg} -n {identity}').get_output_in_json() + identity_id = identity_result['id'] + self.kwargs['identity_id'] = identity_id + + # Create storage container + self.cmd('storage container create -n {container} --account-name {storage_account}') + + # Create export pipeline with user-assigned identity + self.cmd('acr export-pipeline create -g {rg} -r {registry} -n {pipeline} ' + '--storage-access-mode entra-mi-auth ' + '--storage-container-uri https://{storage_account}.blob.core.windows.net/{container} ' + '--assign-identity {identity_id}', + checks=[ + self.check('name', '{pipeline}'), + self.check('provisioningState', 'Succeeded'), + self.check('target.storageAccessMode', 'ManagedIdentity'), + self.check('identity.type', 'userAssigned'), + self.exists(f'identity.userAssignedIdentities."{identity_id}"'), + self.check('target.keyVaultUri', None) + ]) + + # Clean up + self.cmd('acr export-pipeline delete -g {rg} -r {registry} -n {pipeline}') + self.cmd('acr delete -g {rg} -n {registry} --yes') + self.cmd('identity delete -g {rg} -n {identity}') + + @ResourceGroupPreparer(name_prefix='cli_test_acr_transfer_import_mi_') + @StorageAccountPreparer(name_prefix='acrtransfer', kind='StorageV2', sku='Standard_LRS') + def test_acr_import_pipeline_entra_mi_auth_no_identity(self, resource_group, storage_account): + """ + Test Case 4: Create import pipeline with entra-mi-auth mode, no identity specified. + Expected: System-assigned managed identity should be automatically provisioned. + """ + self.kwargs.update({ + 'registry': self.create_random_name('acrtest', 20), + 'pipeline': self.create_random_name('pipeline', 20), + 'storage_account': storage_account, + 'container': 'import-container' + }) + + # Create registry + self.cmd('acr create -g {rg} -n {registry} --sku Premium') + + # Create storage container + self.cmd('storage container create -n {container} --account-name {storage_account}') + + # Create import pipeline with entra-mi-auth, no identity specified + result = self.cmd('acr import-pipeline create -g {rg} -r {registry} -n {pipeline} ' + '--storage-access-mode entra-mi-auth ' + '--storage-container-uri https://{storage_account}.blob.core.windows.net/{container}', + checks=[ + self.check('name', '{pipeline}'), + self.check('provisioningState', 'Succeeded'), + self.check('source.storageAccessMode', 'ManagedIdentity'), + self.check('identity.type', 'systemAssigned'), + self.exists('identity.principalId'), + self.check('source.keyVaultUri', None) + ]).get_output_in_json() + + # Verify system-assigned identity was created + self.assertIsNotNone(result['identity']['principalId']) + self.assertEqual(result['identity']['type'], 'systemAssigned') + + # Clean up + self.cmd('acr import-pipeline delete -g {rg} -r {registry} -n {pipeline}') + self.cmd('acr delete -g {rg} -n {registry} --yes') + + @ResourceGroupPreparer(name_prefix='cli_test_acr_transfer_import_sas_') + @StorageAccountPreparer(name_prefix='acrtransfer', kind='StorageV2', sku='Standard_LRS') + def test_acr_import_pipeline_sas_token(self, resource_group, storage_account): + """ + Test Case 5: Create import pipeline with storage-sas-token mode. + Expected: Pipeline should be created with SasToken mode and keyVaultUri set. + """ + self.kwargs.update({ + 'registry': self.create_random_name('acrtest', 20), + 'pipeline': self.create_random_name('pipeline', 20), + 'storage_account': storage_account, + 'container': 'import-container', + 'keyvault': self.create_random_name('kv', 20), + 'secret': 'sas-token-secret' + }) + + # Create registry + self.cmd('acr create -g {rg} -n {registry} --sku Premium') + + # Create key vault with access policies (not RBAC) + self.cmd('keyvault create -g {rg} -n {keyvault} --enable-rbac-authorization false') + + # Generate SAS token and store in Key Vault + from datetime import datetime, timedelta + expiry = (datetime.utcnow() + timedelta(days=30)).strftime('%Y-%m-%dT%H:%MZ') + sas_token = self.cmd('storage container generate-sas ' + '--account-name {storage_account} ' + '--name {container} ' + '--permissions racwdl ' + f'--expiry {expiry} ' + '-o tsv').output.strip() + + self.kwargs['sas_token'] = sas_token + self.cmd('keyvault secret set --vault-name {keyvault} -n {secret} --value "{sas_token}"') + + # Create storage container + self.cmd('storage container create -n {container} --account-name {storage_account}') + + # Create import pipeline with storage-sas-token + self.cmd('acr import-pipeline create -g {rg} -r {registry} -n {pipeline} ' + '--storage-access-mode storage-sas-token ' + '--secret-uri https://{keyvault}.vault.azure.net/secrets/{secret} ' + '--storage-container-uri https://{storage_account}.blob.core.windows.net/{container}', + checks=[ + self.check('name', '{pipeline}'), + self.check('provisioningState', 'Succeeded'), + self.check('source.storageAccessMode', 'SasToken'), + self.check('source.keyVaultUri', 'https://{keyvault}.vault.azure.net/secrets/{secret}'), + self.check('identity.type', 'systemAssigned') + ]) + + # Clean up + self.cmd('acr import-pipeline delete -g {rg} -r {registry} -n {pipeline}') + self.cmd('acr delete -g {rg} -n {registry} --yes') + self.cmd('keyvault delete -g {rg} -n {keyvault}') + + @ResourceGroupPreparer(name_prefix='cli_test_acr_transfer_export_mi_invalid_') + @StorageAccountPreparer(name_prefix='acrtransfer', kind='StorageV2', sku='Standard_LRS') + def test_acr_export_pipeline_entra_mi_auth_with_secret_uri_fails(self, resource_group, storage_account): + """ + Test Case 6: Verify export pipeline creation fails when entra-mi-auth is used with --secret-uri. + Expected: Command should fail with validation error since --secret-uri is only for SAS token mode. + """ + self.kwargs.update({ + 'registry': self.create_random_name('acrtest', 20), + 'pipeline': self.create_random_name('pipeline', 20), + 'storage_account': storage_account, + 'container': 'export-container', + 'keyvault': 'dummy-keyvault', + 'secret': 'dummy-secret' + }) + + # Create registry + self.cmd('acr create -g {rg} -n {registry} --sku Premium') + + # Create storage container + self.cmd('storage container create -n {container} --account-name {storage_account}') + + # Attempt to create export pipeline with entra-mi-auth AND secret-uri (should fail) + self.cmd('acr export-pipeline create -g {rg} -r {registry} -n {pipeline} ' + '--storage-access-mode entra-mi-auth ' + '--secret-uri https://{keyvault}.vault.azure.net/secrets/{secret} ' + '--storage-container-uri https://{storage_account}.blob.core.windows.net/{container}', + expect_failure=True) + + # Clean up + self.cmd('acr delete -g {rg} -n {registry} --yes') + + @ResourceGroupPreparer(name_prefix='cli_test_acr_transfer_import_mi_invalid_') + @StorageAccountPreparer(name_prefix='acrtransfer', kind='StorageV2', sku='Standard_LRS') + def test_acr_import_pipeline_entra_mi_auth_with_secret_uri_fails(self, resource_group, storage_account): + """ + Test Case 7: Verify import pipeline creation fails when entra-mi-auth is used with --secret-uri. + Expected: Command should fail with validation error since --secret-uri is only for SAS token mode. + """ + self.kwargs.update({ + 'registry': self.create_random_name('acrtest', 20), + 'pipeline': self.create_random_name('pipeline', 20), + 'storage_account': storage_account, + 'container': 'import-container', + 'keyvault': 'dummy-keyvault', + 'secret': 'dummy-secret' + }) + + # Create registry + self.cmd('acr create -g {rg} -n {registry} --sku Premium') + + # Create storage container + self.cmd('storage container create -n {container} --account-name {storage_account}') + + # Attempt to create import pipeline with entra-mi-auth AND secret-uri (should fail) + self.cmd('acr import-pipeline create -g {rg} -r {registry} -n {pipeline} ' + '--storage-access-mode entra-mi-auth ' + '--secret-uri https://{keyvault}.vault.azure.net/secrets/{secret} ' + '--storage-container-uri https://{storage_account}.blob.core.windows.net/{container}', + expect_failure=True) + + # Clean up + self.cmd('acr delete -g {rg} -n {registry} --yes') + + @ResourceGroupPreparer(name_prefix='cli_test_acr_transfer_import_uai_') + @StorageAccountPreparer(name_prefix='acrtransfer', kind='StorageV2', sku='Standard_LRS') + def test_acr_import_pipeline_entra_mi_auth_user_assigned(self, resource_group, storage_account): + """ + Test Case 11: Create import pipeline with entra-mi-auth mode and user-assigned identity. + Expected: Pipeline should use the provided user-assigned managed identity. + """ + self.kwargs.update({ + 'registry': self.create_random_name('acrtest', 20), + 'pipeline': self.create_random_name('pipeline', 20), + 'storage_account': storage_account, + 'container': 'import-container', + 'identity': self.create_random_name('identity', 20) + }) + + # Create registry + self.cmd('acr create -g {rg} -n {registry} --sku Premium') + + # Create user-assigned managed identity + identity_result = self.cmd('identity create -g {rg} -n {identity}').get_output_in_json() + identity_id = identity_result['id'] + self.kwargs['identity_id'] = identity_id + + # Create storage container + self.cmd('storage container create -n {container} --account-name {storage_account}') + + # Create import pipeline with user-assigned identity + self.cmd('acr import-pipeline create -g {rg} -r {registry} -n {pipeline} ' + '--storage-access-mode entra-mi-auth ' + '--storage-container-uri https://{storage_account}.blob.core.windows.net/{container} ' + '--assign-identity {identity_id}', + checks=[ + self.check('name', '{pipeline}'), + self.check('provisioningState', 'Succeeded'), + self.check('source.storageAccessMode', 'ManagedIdentity'), + self.check('identity.type', 'userAssigned'), + self.exists(f'identity.userAssignedIdentities."{identity_id}"'), + self.check('source.keyVaultUri', None) + ]) + + # Clean up + self.cmd('acr import-pipeline delete -g {rg} -r {registry} -n {pipeline}') + self.cmd('acr delete -g {rg} -n {registry} --yes') + self.cmd('identity delete -g {rg} -n {identity}') + + +if __name__ == '__main__': + unittest.main() diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_scenario b/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_scenario deleted file mode 100644 index 8dd7ea066b4..00000000000 --- a/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_scenario +++ /dev/null @@ -1,5 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -------------------------------------------------------------------------------------------- - diff --git a/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_scenario.py b/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_scenario.py new file mode 100644 index 00000000000..bfb51d483b4 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/tests/latest/test_acrtransfer_scenario.py @@ -0,0 +1,31 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +from azure.cli.testsdk import ScenarioTest, ResourceGroupPreparer + + +class AcrTransferScenarioTest(ScenarioTest): + @ResourceGroupPreparer() + def test_acrtransfer_import_pipeline_list(self, resource_group): + """Test listing import pipelines""" + self.kwargs.update({ + 'registry_name': self.create_random_name('acr', 20), + 'rg': resource_group, + 'location': 'eastus', + 'sku': 'Premium' + }) + + self.cmd('acr create -n {registry_name} -g {rg} -l {location} --sku {sku}', checks=[ + self.check('name', '{registry_name}'), + self.check('location', '{location}'), + self.check('sku.name', '{sku}') + ]) + + self.cmd('acr import-pipeline list -r {registry_name} -g {rg}', checks=[ + self.check('length(@)', 0) + ]) + + self.cmd('acr delete -n {registry_name} -g {rg} -y') + diff --git a/src/acrtransfer/azext_acrtransfer/utility_functions.py b/src/acrtransfer/azext_acrtransfer/utility_functions.py index b4727344749..6407ec78218 100644 --- a/src/acrtransfer/azext_acrtransfer/utility_functions.py +++ b/src/acrtransfer/azext_acrtransfer/utility_functions.py @@ -4,7 +4,7 @@ # -------------------------------------------------------------------------------------------- # pylint: disable=line-too-long -from .vendored_sdks.containerregistry.v2019_12_01_preview.models._models_py3 import IdentityProperties, UserIdentityProperties +from .vendored_sdks.containerregistry.v2025_06_01_preview.models._models_py3 import IdentityProperties, UserIdentityProperties def create_identity_properties(user_assigned_identity_resource_id): diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2019_12_01_preview/models/_models_py3.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2019_12_01_preview/models/_models_py3.py index eb5f492ab60..c8eded02e9e 100644 --- a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2019_12_01_preview/models/_models_py3.py +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2019_12_01_preview/models/_models_py3.py @@ -1685,32 +1685,37 @@ class ExportPipelineTargetProperties(msrest.serialization.Model): When 'AzureStorageBlob': "https://accountName.blob.core.windows.net/containerName/blobName" When 'AzureStorageBlobContainer': "https://accountName.blob.core.windows.net/containerName". :type uri: str - :param key_vault_uri: Required. They key vault secret uri to obtain the target storage SAS + :param storage_access_mode: Required. The authentication mode to be used to access the target storage (Entra MI or SAS). + :type storage_access_mode: str + :param key_vault_uri: The key vault secret uri to obtain the target storage SAS token. :type key_vault_uri: str """ _validation = { - 'key_vault_uri': {'required': True}, + 'storage_access_mode': {'required': True}, } _attribute_map = { 'type': {'key': 'type', 'type': 'str'}, 'uri': {'key': 'uri', 'type': 'str'}, + 'storage_access_mode': {'key': 'storageAccessMode', 'type': 'str'}, 'key_vault_uri': {'key': 'keyVaultUri', 'type': 'str'}, } def __init__( self, *, - key_vault_uri: str, + storage_access_mode: str, type: Optional[str] = None, uri: Optional[str] = None, + key_vault_uri: Optional[str] = None, **kwargs ): super(ExportPipelineTargetProperties, self).__init__(**kwargs) self.type = type self.uri = uri + self.storage_access_mode = storage_access_mode self.key_vault_uri = key_vault_uri @@ -2231,32 +2236,38 @@ class ImportPipelineSourceProperties(msrest.serialization.Model): When 'AzureStorageBlob': "https://accountName.blob.core.windows.net/containerName/blobName" When 'AzureStorageBlobContainer': "https://accountName.blob.core.windows.net/containerName". :type uri: str - :param key_vault_uri: Required. They key vault secret uri to obtain the source storage SAS + :param storage_access_mode: Required. The authentication mode for accessing the storage account. Possible + values include: "ManagedIdentity", "SasToken". + :type storage_access_mode: str + :param key_vault_uri: They key vault secret uri to obtain the source storage SAS token. :type key_vault_uri: str """ _validation = { - 'key_vault_uri': {'required': True}, + 'storage_access_mode': {'required': True}, } _attribute_map = { 'type': {'key': 'type', 'type': 'str'}, 'uri': {'key': 'uri', 'type': 'str'}, + 'storage_access_mode': {'key': 'storageAccessMode', 'type': 'str'}, 'key_vault_uri': {'key': 'keyVaultUri', 'type': 'str'}, } def __init__( self, *, - key_vault_uri: str, + storage_access_mode: str, type: Optional[Union[str, "PipelineSourceType"]] = "AzureStorageBlobContainer", uri: Optional[str] = None, + key_vault_uri: Optional[str] = None, **kwargs ): super(ImportPipelineSourceProperties, self).__init__(**kwargs) self.type = type self.uri = uri + self.storage_access_mode = storage_access_mode self.key_vault_uri = key_vault_uri diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/__init__.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/__init__.py new file mode 100644 index 00000000000..4bf92c7f433 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/__init__.py @@ -0,0 +1,16 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._container_registry_management_client import ContainerRegistryManagementClient +__all__ = ['ContainerRegistryManagementClient'] + +try: + from ._patch import patch_sdk # type: ignore + patch_sdk() +except ImportError: + pass diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_configuration.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_configuration.py new file mode 100644 index 00000000000..5f9492243d4 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_configuration.py @@ -0,0 +1,69 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +#from azure.mgmt.core.policies import ARMHttpLoggingPolicy + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any + + from azure.core.credentials import TokenCredential + +VERSION = "unknown" + +class ContainerRegistryManagementClientConfiguration(Configuration): + """Configuration for ContainerRegistryManagementClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: The Microsoft Azure subscription ID. + :type subscription_id: str + """ + + def __init__( + self, + credential, # type: "TokenCredential" + subscription_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + super(ContainerRegistryManagementClientConfiguration, self).__init__(**kwargs) + + self.credential = credential + self.subscription_id = subscription_id + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'mgmt-containerregistry/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs # type: Any + ): + # type: (...) -> None + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') #or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_container_registry_management_client.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_container_registry_management_client.py new file mode 100644 index 00000000000..807e772893e --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_container_registry_management_client.py @@ -0,0 +1,135 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import TYPE_CHECKING + +from azure.mgmt.core import ARMPipelineClient +from msrest import Deserializer, Serializer + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Optional + + from azure.core.credentials import TokenCredential + +from ._configuration import ContainerRegistryManagementClientConfiguration +from .operations import ExportPipelinesOperations +from .operations import RegistriesOperations +from .operations import ImportPipelinesOperations +from .operations import Operations +from .operations import PipelineRunsOperations +from .operations import PrivateEndpointConnectionsOperations +from .operations import ReplicationsOperations +from .operations import WebhooksOperations +from .operations import AgentPoolsOperations +from .operations import RunsOperations +from .operations import TaskRunsOperations +from .operations import TasksOperations +from .operations import ScopeMapsOperations +from .operations import TokensOperations +from . import models + + +class ContainerRegistryManagementClient(object): + """ContainerRegistryManagementClient. + + :ivar export_pipelines: ExportPipelinesOperations operations + :vartype export_pipelines: azure.mgmt.containerregistry.v2019_12_01_preview.operations.ExportPipelinesOperations + :ivar registries: RegistriesOperations operations + :vartype registries: azure.mgmt.containerregistry.v2019_12_01_preview.operations.RegistriesOperations + :ivar import_pipelines: ImportPipelinesOperations operations + :vartype import_pipelines: azure.mgmt.containerregistry.v2019_12_01_preview.operations.ImportPipelinesOperations + :ivar operations: Operations operations + :vartype operations: azure.mgmt.containerregistry.v2019_12_01_preview.operations.Operations + :ivar pipeline_runs: PipelineRunsOperations operations + :vartype pipeline_runs: azure.mgmt.containerregistry.v2019_12_01_preview.operations.PipelineRunsOperations + :ivar private_endpoint_connections: PrivateEndpointConnectionsOperations operations + :vartype private_endpoint_connections: azure.mgmt.containerregistry.v2019_12_01_preview.operations.PrivateEndpointConnectionsOperations + :ivar replications: ReplicationsOperations operations + :vartype replications: azure.mgmt.containerregistry.v2019_12_01_preview.operations.ReplicationsOperations + :ivar webhooks: WebhooksOperations operations + :vartype webhooks: azure.mgmt.containerregistry.v2019_12_01_preview.operations.WebhooksOperations + :ivar agent_pools: AgentPoolsOperations operations + :vartype agent_pools: azure.mgmt.containerregistry.v2019_12_01_preview.operations.AgentPoolsOperations + :ivar runs: RunsOperations operations + :vartype runs: azure.mgmt.containerregistry.v2019_12_01_preview.operations.RunsOperations + :ivar task_runs: TaskRunsOperations operations + :vartype task_runs: azure.mgmt.containerregistry.v2019_12_01_preview.operations.TaskRunsOperations + :ivar tasks: TasksOperations operations + :vartype tasks: azure.mgmt.containerregistry.v2019_12_01_preview.operations.TasksOperations + :ivar scope_maps: ScopeMapsOperations operations + :vartype scope_maps: azure.mgmt.containerregistry.v2019_12_01_preview.operations.ScopeMapsOperations + :ivar tokens: TokensOperations operations + :vartype tokens: azure.mgmt.containerregistry.v2019_12_01_preview.operations.TokensOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: The Microsoft Azure subscription ID. + :type subscription_id: str + :param str base_url: Service URL + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + """ + + def __init__( + self, + credential, # type: "TokenCredential" + subscription_id, # type: str + base_url=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> None + if not base_url: + base_url = 'https://management.azure.com' + self._config = ContainerRegistryManagementClientConfiguration(credential, subscription_id, **kwargs) + self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._serialize.client_side_validation = False + self._deserialize = Deserializer(client_models) + + self.export_pipelines = ExportPipelinesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.registries = RegistriesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.import_pipelines = ImportPipelinesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.operations = Operations( + self._client, self._config, self._serialize, self._deserialize) + self.pipeline_runs = PipelineRunsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.private_endpoint_connections = PrivateEndpointConnectionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.replications = ReplicationsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.webhooks = WebhooksOperations( + self._client, self._config, self._serialize, self._deserialize) + self.agent_pools = AgentPoolsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.runs = RunsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.task_runs = TaskRunsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.tasks = TasksOperations( + self._client, self._config, self._serialize, self._deserialize) + self.scope_maps = ScopeMapsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.tokens = TokensOperations( + self._client, self._config, self._serialize, self._deserialize) + + def close(self): + # type: () -> None + self._client.close() + + def __enter__(self): + # type: () -> ContainerRegistryManagementClient + self._client.__enter__() + return self + + def __exit__(self, *exc_details): + # type: (Any) -> None + self._client.__exit__(*exc_details) diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_metadata.json b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_metadata.json new file mode 100644 index 00000000000..4fc16fc298b --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/_metadata.json @@ -0,0 +1,73 @@ +{ + "chosen_version": "2025-06-01-preview", + "total_api_version_list": ["2019-05-01-preview", "2019-06-01-preview", "2025-06-01-preview"], + "client": { + "name": "ContainerRegistryManagementClient", + "filename": "_container_registry_management_client", + "description": "ContainerRegistryManagementClient.", + "base_url": "\u0027https://management.azure.com\u0027", + "custom_base_url": null, + "azure_arm": true, + "has_lro_operations": true + }, + "global_parameters": { + "sync_method": { + "credential": { + "method_signature": "credential, # type: \"TokenCredential\"", + "description": "Credential needed for the client to connect to Azure.", + "docstring_type": "~azure.core.credentials.TokenCredential", + "required": true + }, + "subscription_id": { + "method_signature": "subscription_id, # type: str", + "description": "The Microsoft Azure subscription ID.", + "docstring_type": "str", + "required": true + } + }, + "async_method": { + "credential": { + "method_signature": "credential, # type: \"AsyncTokenCredential\"", + "description": "Credential needed for the client to connect to Azure.", + "docstring_type": "~azure.core.credentials_async.AsyncTokenCredential", + "required": true + }, + "subscription_id": { + "method_signature": "subscription_id, # type: str", + "description": "The Microsoft Azure subscription ID.", + "docstring_type": "str", + "required": true + } + }, + "constant": { + }, + "call": "credential, subscription_id" + }, + "config": { + "credential": true, + "credential_scopes": ["https://management.azure.com/.default"], + "credential_default_policy_type": "BearerTokenCredentialPolicy", + "credential_default_policy_type_has_async_version": true, + "credential_key_header_name": null + }, + "operation_groups": { + "export_pipelines": "ExportPipelinesOperations", + "registries": "RegistriesOperations", + "import_pipelines": "ImportPipelinesOperations", + "operations": "Operations", + "pipeline_runs": "PipelineRunsOperations", + "private_endpoint_connections": "PrivateEndpointConnectionsOperations", + "replications": "ReplicationsOperations", + "webhooks": "WebhooksOperations", + "agent_pools": "AgentPoolsOperations", + "runs": "RunsOperations", + "task_runs": "TaskRunsOperations", + "tasks": "TasksOperations", + "scope_maps": "ScopeMapsOperations", + "tokens": "TokensOperations" + }, + "operation_mixins": { + }, + "sync_imports": "None", + "async_imports": "None" +} \ No newline at end of file diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/__init__.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/__init__.py new file mode 100644 index 00000000000..3f69d67ba53 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._container_registry_management_client import ContainerRegistryManagementClient +__all__ = ['ContainerRegistryManagementClient'] diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/_configuration.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/_configuration.py new file mode 100644 index 00000000000..d00408945d7 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/_configuration.py @@ -0,0 +1,65 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMHttpLoggingPolicy + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +VERSION = "unknown" + +class ContainerRegistryManagementClientConfiguration(Configuration): + """Configuration for ContainerRegistryManagementClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: The Microsoft Azure subscription ID. + :type subscription_id: str + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + **kwargs: Any + ) -> None: + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + super(ContainerRegistryManagementClientConfiguration, self).__init__(**kwargs) + + self.credential = credential + self.subscription_id = subscription_id + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'mgmt-containerregistry/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs: Any + ) -> None: + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/_container_registry_management_client.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/_container_registry_management_client.py new file mode 100644 index 00000000000..9eddfa0d56e --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/_container_registry_management_client.py @@ -0,0 +1,129 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, Optional, TYPE_CHECKING + +from azure.mgmt.core import AsyncARMPipelineClient +from msrest import Deserializer, Serializer + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +from ._configuration import ContainerRegistryManagementClientConfiguration +from .operations import ExportPipelinesOperations +from .operations import RegistriesOperations +from .operations import ImportPipelinesOperations +from .operations import Operations +from .operations import PipelineRunsOperations +from .operations import PrivateEndpointConnectionsOperations +from .operations import ReplicationsOperations +from .operations import WebhooksOperations +from .operations import AgentPoolsOperations +from .operations import RunsOperations +from .operations import TaskRunsOperations +from .operations import TasksOperations +from .operations import ScopeMapsOperations +from .operations import TokensOperations +from .. import models + + +class ContainerRegistryManagementClient(object): + """ContainerRegistryManagementClient. + + :ivar export_pipelines: ExportPipelinesOperations operations + :vartype export_pipelines: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.ExportPipelinesOperations + :ivar registries: RegistriesOperations operations + :vartype registries: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.RegistriesOperations + :ivar import_pipelines: ImportPipelinesOperations operations + :vartype import_pipelines: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.ImportPipelinesOperations + :ivar operations: Operations operations + :vartype operations: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.Operations + :ivar pipeline_runs: PipelineRunsOperations operations + :vartype pipeline_runs: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.PipelineRunsOperations + :ivar private_endpoint_connections: PrivateEndpointConnectionsOperations operations + :vartype private_endpoint_connections: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.PrivateEndpointConnectionsOperations + :ivar replications: ReplicationsOperations operations + :vartype replications: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.ReplicationsOperations + :ivar webhooks: WebhooksOperations operations + :vartype webhooks: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.WebhooksOperations + :ivar agent_pools: AgentPoolsOperations operations + :vartype agent_pools: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.AgentPoolsOperations + :ivar runs: RunsOperations operations + :vartype runs: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.RunsOperations + :ivar task_runs: TaskRunsOperations operations + :vartype task_runs: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.TaskRunsOperations + :ivar tasks: TasksOperations operations + :vartype tasks: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.TasksOperations + :ivar scope_maps: ScopeMapsOperations operations + :vartype scope_maps: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.ScopeMapsOperations + :ivar tokens: TokensOperations operations + :vartype tokens: azure.mgmt.containerregistry.v2019_12_01_preview.aio.operations.TokensOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: The Microsoft Azure subscription ID. + :type subscription_id: str + :param str base_url: Service URL + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + base_url: Optional[str] = None, + **kwargs: Any + ) -> None: + if not base_url: + base_url = 'https://management.azure.com' + self._config = ContainerRegistryManagementClientConfiguration(credential, subscription_id, **kwargs) + self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._serialize.client_side_validation = False + self._deserialize = Deserializer(client_models) + + self.export_pipelines = ExportPipelinesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.registries = RegistriesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.import_pipelines = ImportPipelinesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.operations = Operations( + self._client, self._config, self._serialize, self._deserialize) + self.pipeline_runs = PipelineRunsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.private_endpoint_connections = PrivateEndpointConnectionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.replications = ReplicationsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.webhooks = WebhooksOperations( + self._client, self._config, self._serialize, self._deserialize) + self.agent_pools = AgentPoolsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.runs = RunsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.task_runs = TaskRunsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.tasks = TasksOperations( + self._client, self._config, self._serialize, self._deserialize) + self.scope_maps = ScopeMapsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.tokens = TokensOperations( + self._client, self._config, self._serialize, self._deserialize) + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> "ContainerRegistryManagementClient": + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details) -> None: + await self._client.__aexit__(*exc_details) diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/__init__.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/__init__.py new file mode 100644 index 00000000000..c07a02517d7 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/__init__.py @@ -0,0 +1,39 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._export_pipelines_operations import ExportPipelinesOperations +from ._registries_operations import RegistriesOperations +from ._import_pipelines_operations import ImportPipelinesOperations +from ._operations import Operations +from ._pipeline_runs_operations import PipelineRunsOperations +from ._private_endpoint_connections_operations import PrivateEndpointConnectionsOperations +from ._replications_operations import ReplicationsOperations +from ._webhooks_operations import WebhooksOperations +from ._agent_pools_operations import AgentPoolsOperations +from ._runs_operations import RunsOperations +from ._task_runs_operations import TaskRunsOperations +from ._tasks_operations import TasksOperations +from ._scope_maps_operations import ScopeMapsOperations +from ._tokens_operations import TokensOperations + +__all__ = [ + 'ExportPipelinesOperations', + 'RegistriesOperations', + 'ImportPipelinesOperations', + 'Operations', + 'PipelineRunsOperations', + 'PrivateEndpointConnectionsOperations', + 'ReplicationsOperations', + 'WebhooksOperations', + 'AgentPoolsOperations', + 'RunsOperations', + 'TaskRunsOperations', + 'TasksOperations', + 'ScopeMapsOperations', + 'TokensOperations', +] diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_agent_pools_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_agent_pools_operations.py new file mode 100644 index 00000000000..e758fa81274 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_agent_pools_operations.py @@ -0,0 +1,618 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AgentPoolsOperations: + """AgentPoolsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + agent_pool_name: str, + **kwargs + ) -> "models.AgentPool": + """Gets the detailed information for a given agent pool. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPool, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + agent_pool_name: str, + agent_pool: "models.AgentPool", + **kwargs + ) -> "models.AgentPool": + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(agent_pool, 'AgentPool') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + agent_pool_name: str, + agent_pool: "models.AgentPool", + **kwargs + ) -> AsyncLROPoller["models.AgentPool"]: + """Creates an agent pool for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :param agent_pool: The parameters of an agent pool that needs to scheduled. + :type agent_pool: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either AgentPool or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + agent_pool_name=agent_pool_name, + agent_pool=agent_pool, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + agent_pool_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + agent_pool_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a specified agent pool resource. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + agent_pool_name=agent_pool_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + agent_pool_name: str, + update_parameters: "models.AgentPoolUpdateParameters", + **kwargs + ) -> "models.AgentPool": + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(update_parameters, 'AgentPoolUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + agent_pool_name: str, + update_parameters: "models.AgentPoolUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.AgentPool"]: + """Updates an agent pool with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :param update_parameters: The parameters for updating an agent pool. + :type update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPoolUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either AgentPool or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + agent_pool_name=agent_pool_name, + update_parameters=update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.AgentPoolListResult"]: + """Lists all the agent pools for a specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AgentPoolListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPoolListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPoolListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AgentPoolListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.ErrorResponse, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools'} # type: ignore + + async def get_queue_status( + self, + resource_group_name: str, + registry_name: str, + agent_pool_name: str, + **kwargs + ) -> "models.AgentPoolQueueStatus": + """Gets the count of queued runs for a given agent pool. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPoolQueueStatus, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPoolQueueStatus + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPoolQueueStatus"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_queue_status.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPoolQueueStatus', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_queue_status.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}/listQueueStatus'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_export_pipelines_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_export_pipelines_operations.py new file mode 100644 index 00000000000..664e0c1d9eb --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_export_pipelines_operations.py @@ -0,0 +1,418 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ExportPipelinesOperations: + """ExportPipelinesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + export_pipeline_name: str, + **kwargs + ) -> "models.ExportPipeline": + """Gets the properties of the export pipeline. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param export_pipeline_name: The name of the export pipeline. + :type export_pipeline_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ExportPipeline, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipeline + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExportPipeline"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'exportPipelineName': self._serialize.url("export_pipeline_name", export_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ExportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + export_pipeline_name: str, + export_pipeline_create_parameters: "models.ExportPipeline", + **kwargs + ) -> "models.ExportPipeline": + cls = kwargs.pop('cls', None) # type: ClsType["models.ExportPipeline"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'exportPipelineName': self._serialize.url("export_pipeline_name", export_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(export_pipeline_create_parameters, 'ExportPipeline') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ExportPipeline', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ExportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + export_pipeline_name: str, + export_pipeline_create_parameters: "models.ExportPipeline", + **kwargs + ) -> AsyncLROPoller["models.ExportPipeline"]: + """Creates an export pipeline for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param export_pipeline_name: The name of the export pipeline. + :type export_pipeline_name: str + :param export_pipeline_create_parameters: The parameters for creating an export pipeline. + :type export_pipeline_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipeline + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either ExportPipeline or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipeline] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.ExportPipeline"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + export_pipeline_name=export_pipeline_name, + export_pipeline_create_parameters=export_pipeline_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ExportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + export_pipeline_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'exportPipelineName': self._serialize.url("export_pipeline_name", export_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + export_pipeline_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes an export pipeline from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param export_pipeline_name: The name of the export pipeline. + :type export_pipeline_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + export_pipeline_name=export_pipeline_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.ExportPipelineListResult"]: + """Lists all export pipelines for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ExportPipelineListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipelineListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExportPipelineListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ExportPipelineListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_import_pipelines_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_import_pipelines_operations.py new file mode 100644 index 00000000000..0db32cf600c --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_import_pipelines_operations.py @@ -0,0 +1,418 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ImportPipelinesOperations: + """ImportPipelinesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + import_pipeline_name: str, + **kwargs + ) -> "models.ImportPipeline": + """Gets the properties of the import pipeline. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param import_pipeline_name: The name of the import pipeline. + :type import_pipeline_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ImportPipeline, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipeline + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ImportPipeline"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'importPipelineName': self._serialize.url("import_pipeline_name", import_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ImportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + import_pipeline_name: str, + import_pipeline_create_parameters: "models.ImportPipeline", + **kwargs + ) -> "models.ImportPipeline": + cls = kwargs.pop('cls', None) # type: ClsType["models.ImportPipeline"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'importPipelineName': self._serialize.url("import_pipeline_name", import_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(import_pipeline_create_parameters, 'ImportPipeline') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ImportPipeline', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ImportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + import_pipeline_name: str, + import_pipeline_create_parameters: "models.ImportPipeline", + **kwargs + ) -> AsyncLROPoller["models.ImportPipeline"]: + """Creates an import pipeline for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param import_pipeline_name: The name of the import pipeline. + :type import_pipeline_name: str + :param import_pipeline_create_parameters: The parameters for creating an import pipeline. + :type import_pipeline_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipeline + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either ImportPipeline or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipeline] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.ImportPipeline"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + import_pipeline_name=import_pipeline_name, + import_pipeline_create_parameters=import_pipeline_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ImportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + import_pipeline_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'importPipelineName': self._serialize.url("import_pipeline_name", import_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + import_pipeline_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes an import pipeline from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param import_pipeline_name: The name of the import pipeline. + :type import_pipeline_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + import_pipeline_name=import_pipeline_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.ImportPipelineListResult"]: + """Lists all import pipelines for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ImportPipelineListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipelineListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ImportPipelineListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ImportPipelineListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_operations.py new file mode 100644 index 00000000000..5fa4b7f5a29 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_operations.py @@ -0,0 +1,104 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class Operations: + """Operations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.OperationListResult"]: + """Lists all of the available Azure Container Registry REST API operations. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OperationListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OperationListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('OperationListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.ContainerRegistry/operations'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_pipeline_runs_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_pipeline_runs_operations.py new file mode 100644 index 00000000000..e6f88da0299 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_pipeline_runs_operations.py @@ -0,0 +1,418 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class PipelineRunsOperations: + """PipelineRunsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + pipeline_run_name: str, + **kwargs + ) -> "models.PipelineRun": + """Gets the detailed information for a given pipeline run. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param pipeline_run_name: The name of the pipeline run. + :type pipeline_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PipelineRun, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRun + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PipelineRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'pipelineRunName': self._serialize.url("pipeline_run_name", pipeline_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PipelineRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + pipeline_run_name: str, + pipeline_run_create_parameters: "models.PipelineRun", + **kwargs + ) -> "models.PipelineRun": + cls = kwargs.pop('cls', None) # type: ClsType["models.PipelineRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'pipelineRunName': self._serialize.url("pipeline_run_name", pipeline_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(pipeline_run_create_parameters, 'PipelineRun') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('PipelineRun', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('PipelineRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + pipeline_run_name: str, + pipeline_run_create_parameters: "models.PipelineRun", + **kwargs + ) -> AsyncLROPoller["models.PipelineRun"]: + """Creates a pipeline run for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param pipeline_run_name: The name of the pipeline run. + :type pipeline_run_name: str + :param pipeline_run_create_parameters: The parameters for creating a pipeline run. + :type pipeline_run_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRun + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either PipelineRun or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.PipelineRun"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + pipeline_run_name=pipeline_run_name, + pipeline_run_create_parameters=pipeline_run_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('PipelineRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + pipeline_run_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'pipelineRunName': self._serialize.url("pipeline_run_name", pipeline_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + pipeline_run_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a pipeline run from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param pipeline_run_name: The name of the pipeline run. + :type pipeline_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + pipeline_run_name=pipeline_run_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.PipelineRunListResult"]: + """Lists all the pipeline runs for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either PipelineRunListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PipelineRunListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('PipelineRunListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_private_endpoint_connections_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_private_endpoint_connections_operations.py new file mode 100644 index 00000000000..b3195d92d67 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_private_endpoint_connections_operations.py @@ -0,0 +1,419 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class PrivateEndpointConnectionsOperations: + """PrivateEndpointConnectionsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + private_endpoint_connection_name: str, + **kwargs + ) -> "models.PrivateEndpointConnection": + """Get the specified private endpoint connection associated with the container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateEndpointConnection, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateEndpointConnection"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + async def _create_or_update_initial( + self, + resource_group_name: str, + registry_name: str, + private_endpoint_connection_name: str, + private_endpoint_connection: "models.PrivateEndpointConnection", + **kwargs + ) -> "models.PrivateEndpointConnection": + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateEndpointConnection"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_or_update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(private_endpoint_connection, 'PrivateEndpointConnection') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_or_update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + async def begin_create_or_update( + self, + resource_group_name: str, + registry_name: str, + private_endpoint_connection_name: str, + private_endpoint_connection: "models.PrivateEndpointConnection", + **kwargs + ) -> AsyncLROPoller["models.PrivateEndpointConnection"]: + """Update the state of specified private endpoint connection associated with the container + registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :param private_endpoint_connection: The parameters for creating a private endpoint connection. + :type private_endpoint_connection: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either PrivateEndpointConnection or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateEndpointConnection"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_or_update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + private_endpoint_connection_name=private_endpoint_connection_name, + private_endpoint_connection=private_endpoint_connection, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + private_endpoint_connection_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + private_endpoint_connection_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes the specified private endpoint connection associated with the container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + private_endpoint_connection_name=private_endpoint_connection_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.PrivateEndpointConnectionListResult"]: + """List all private endpoint connections in a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either PrivateEndpointConnectionListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnectionListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateEndpointConnectionListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('PrivateEndpointConnectionListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_registries_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_registries_operations.py new file mode 100644 index 00000000000..03e444f84ac --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_registries_operations.py @@ -0,0 +1,1323 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class RegistriesOperations: + """RegistriesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def _import_image_initial( + self, + resource_group_name: str, + registry_name: str, + parameters: "models.ImportImageParameters", + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + + # Construct URL + url = self._import_image_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(parameters, 'ImportImageParameters') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _import_image_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importImage'} # type: ignore + + async def begin_import_image( + self, + resource_group_name: str, + registry_name: str, + parameters: "models.ImportImageParameters", + **kwargs + ) -> AsyncLROPoller[None]: + """Copies an image to this container registry from the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param parameters: The parameters specifying the image to copy and the source container + registry. + :type parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportImageParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._import_image_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + parameters=parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_import_image.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importImage'} # type: ignore + + async def check_name_availability( + self, + registry_name_check_request: "models.RegistryNameCheckRequest", + **kwargs + ) -> "models.RegistryNameStatus": + """Checks whether the container registry name is available for use. The name must contain only + alphanumeric characters, be globally unique, and between 5 and 50 characters in length. + + :param registry_name_check_request: The object containing information for the availability + request. + :type registry_name_check_request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryNameCheckRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegistryNameStatus, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryNameStatus + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryNameStatus"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.check_name_availability.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(registry_name_check_request, 'RegistryNameCheckRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegistryNameStatus', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + check_name_availability.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.ContainerRegistry/checkNameAvailability'} # type: ignore + + async def get( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> "models.Registry": + """Gets the properties of the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Registry, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + registry: "models.Registry", + **kwargs + ) -> "models.Registry": + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(registry, 'Registry') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Registry', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + registry: "models.Registry", + **kwargs + ) -> AsyncLROPoller["models.Registry"]: + """Creates a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param registry: The parameters for creating a container registry. + :type registry: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Registry or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + registry=registry, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + registry_update_parameters: "models.RegistryUpdateParameters", + **kwargs + ) -> "models.Registry": + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(registry_update_parameters, 'RegistryUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Registry', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + registry_update_parameters: "models.RegistryUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.Registry"]: + """Updates a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param registry_update_parameters: The parameters for updating a container registry. + :type registry_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Registry or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + registry_update_parameters=registry_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs + ) -> AsyncIterable["models.RegistryListResult"]: + """Lists all the container registries under the specified resource group. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegistryListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('RegistryListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries'} # type: ignore + + def list( + self, + **kwargs + ) -> AsyncIterable["models.RegistryListResult"]: + """Lists all the container registries under the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegistryListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('RegistryListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.ContainerRegistry/registries'} # type: ignore + + async def list_credentials( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> "models.RegistryListCredentialsResult": + """Lists the login credentials for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegistryListCredentialsResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryListCredentialsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryListCredentialsResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.list_credentials.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegistryListCredentialsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list_credentials.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/listCredentials'} # type: ignore + + async def regenerate_credential( + self, + resource_group_name: str, + registry_name: str, + regenerate_credential_parameters: "models.RegenerateCredentialParameters", + **kwargs + ) -> "models.RegistryListCredentialsResult": + """Regenerates one of the login credentials for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param regenerate_credential_parameters: Specifies name of the password which should be + regenerated -- password or password2. + :type regenerate_credential_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegenerateCredentialParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegistryListCredentialsResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryListCredentialsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryListCredentialsResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.regenerate_credential.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(regenerate_credential_parameters, 'RegenerateCredentialParameters') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegistryListCredentialsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + regenerate_credential.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/regenerateCredential'} # type: ignore + + async def list_usages( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> "models.RegistryUsageListResult": + """Gets the quota usages for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegistryUsageListResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryUsageListResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryUsageListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.list_usages.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegistryUsageListResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list_usages.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/listUsages'} # type: ignore + + def list_private_link_resources( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.PrivateLinkResourceListResult"]: + """Lists the private link resources for a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either PrivateLinkResourceListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateLinkResourceListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateLinkResourceListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_private_link_resources.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('PrivateLinkResourceListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_private_link_resources.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateLinkResources'} # type: ignore + + async def _schedule_run_initial( + self, + resource_group_name: str, + registry_name: str, + run_request: "models.RunRequest", + **kwargs + ) -> Optional["models.Run"]: + cls = kwargs.pop('cls', None) # type: ClsType[Optional["models.Run"]] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._schedule_run_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(run_request, 'RunRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _schedule_run_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scheduleRun'} # type: ignore + + async def begin_schedule_run( + self, + resource_group_name: str, + registry_name: str, + run_request: "models.RunRequest", + **kwargs + ) -> AsyncLROPoller["models.Run"]: + """Schedules a new run based on the request parameters and add it to the run queue. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_request: The parameters of a run that needs to scheduled. + :type run_request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Run or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Run"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._schedule_run_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + run_request=run_request, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_schedule_run.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scheduleRun'} # type: ignore + + async def get_build_source_upload_url( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> "models.SourceUploadDefinition": + """Get the upload location for the user to be able to upload the source. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SourceUploadDefinition, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceUploadDefinition + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SourceUploadDefinition"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_build_source_upload_url.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SourceUploadDefinition', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_build_source_upload_url.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/listBuildSourceUploadUrl'} # type: ignore + + async def _generate_credentials_initial( + self, + resource_group_name: str, + registry_name: str, + generate_credentials_parameters: "models.GenerateCredentialsParameters", + **kwargs + ) -> Optional["models.GenerateCredentialsResult"]: + cls = kwargs.pop('cls', None) # type: ClsType[Optional["models.GenerateCredentialsResult"]] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._generate_credentials_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(generate_credentials_parameters, 'GenerateCredentialsParameters') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('GenerateCredentialsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _generate_credentials_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/generateCredentials'} # type: ignore + + async def begin_generate_credentials( + self, + resource_group_name: str, + registry_name: str, + generate_credentials_parameters: "models.GenerateCredentialsParameters", + **kwargs + ) -> AsyncLROPoller["models.GenerateCredentialsResult"]: + """Generate keys for a token of a specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param generate_credentials_parameters: The parameters for generating credentials. + :type generate_credentials_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.GenerateCredentialsParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either GenerateCredentialsResult or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.GenerateCredentialsResult] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.GenerateCredentialsResult"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._generate_credentials_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + generate_credentials_parameters=generate_credentials_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('GenerateCredentialsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_generate_credentials.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/generateCredentials'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_replications_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_replications_operations.py new file mode 100644 index 00000000000..54f15139f55 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_replications_operations.py @@ -0,0 +1,547 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ReplicationsOperations: + """ReplicationsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + replication_name: str, + **kwargs + ) -> "models.Replication": + """Gets the properties of the specified replication. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param replication_name: The name of the replication. + :type replication_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Replication, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'replicationName': self._serialize.url("replication_name", replication_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + replication_name: str, + replication: "models.Replication", + **kwargs + ) -> "models.Replication": + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'replicationName': self._serialize.url("replication_name", replication_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(replication, 'Replication') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Replication', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + replication_name: str, + replication: "models.Replication", + **kwargs + ) -> AsyncLROPoller["models.Replication"]: + """Creates a replication for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param replication_name: The name of the replication. + :type replication_name: str + :param replication: The parameters for creating a replication. + :type replication: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Replication or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + replication_name=replication_name, + replication=replication, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + replication_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'replicationName': self._serialize.url("replication_name", replication_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + replication_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a replication from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param replication_name: The name of the replication. + :type replication_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + replication_name=replication_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + replication_name: str, + replication_update_parameters: "models.ReplicationUpdateParameters", + **kwargs + ) -> "models.Replication": + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'replicationName': self._serialize.url("replication_name", replication_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(replication_update_parameters, 'ReplicationUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Replication', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + replication_name: str, + replication_update_parameters: "models.ReplicationUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.Replication"]: + """Updates a replication for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param replication_name: The name of the replication. + :type replication_name: str + :param replication_update_parameters: The parameters for updating a replication. + :type replication_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ReplicationUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Replication or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + replication_name=replication_name, + replication_update_parameters=replication_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.ReplicationListResult"]: + """Lists all the replications for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ReplicationListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ReplicationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ReplicationListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ReplicationListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_runs_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_runs_operations.py new file mode 100644 index 00000000000..644da9fe162 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_runs_operations.py @@ -0,0 +1,501 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class RunsOperations: + """RunsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name: str, + registry_name: str, + filter: Optional[str] = None, + top: Optional[int] = None, + **kwargs + ) -> AsyncIterable["models.RunListResult"]: + """Gets all the runs for a registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param filter: The runs filter to apply on the operation. Arithmetic operators are not + supported. The allowed string function is 'contains'. All logical operators except 'Not', + 'Has', 'All' are allowed. + :type filter: str + :param top: $top is supported for get list of runs, which limits the maximum number of runs to + return. + :type top: int + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RunListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RunListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + if top is not None: + query_parameters['$top'] = self._serialize.query("top", top, 'int') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('RunListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.ErrorResponse, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs'} # type: ignore + + async def get( + self, + resource_group_name: str, + registry_name: str, + run_id: str, + **kwargs + ) -> "models.Run": + """Gets the detailed information for a given run. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_id: The run ID. + :type run_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Run, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Run"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'runId': self._serialize.url("run_id", run_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + run_id: str, + run_update_parameters: "models.RunUpdateParameters", + **kwargs + ) -> "models.Run": + cls = kwargs.pop('cls', None) # type: ClsType["models.Run"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'runId': self._serialize.url("run_id", run_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(run_update_parameters, 'RunUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Run', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + run_id: str, + run_update_parameters: "models.RunUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.Run"]: + """Patch the run properties. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_id: The run ID. + :type run_id: str + :param run_update_parameters: The run update properties. + :type run_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Run or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Run"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + run_id=run_id, + run_update_parameters=run_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}'} # type: ignore + + async def get_log_sas_url( + self, + resource_group_name: str, + registry_name: str, + run_id: str, + **kwargs + ) -> "models.RunGetLogResult": + """Gets a link to download the run logs. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_id: The run ID. + :type run_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RunGetLogResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunGetLogResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RunGetLogResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_log_sas_url.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'runId': self._serialize.url("run_id", run_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RunGetLogResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_log_sas_url.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}/listLogSasUrl'} # type: ignore + + async def _cancel_initial( + self, + resource_group_name: str, + registry_name: str, + run_id: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self._cancel_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'runId': self._serialize.url("run_id", run_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _cancel_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}/cancel'} # type: ignore + + async def begin_cancel( + self, + resource_group_name: str, + registry_name: str, + run_id: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Cancel an existing run. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_id: The run ID. + :type run_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._cancel_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + run_id=run_id, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_cancel.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}/cancel'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_scope_maps_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_scope_maps_operations.py new file mode 100644 index 00000000000..03e2e26b303 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_scope_maps_operations.py @@ -0,0 +1,547 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ScopeMapsOperations: + """ScopeMapsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + scope_map_name: str, + **kwargs + ) -> "models.ScopeMap": + """Gets the properties of the specified scope map. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param scope_map_name: The name of the scope map. + :type scope_map_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ScopeMap, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'scopeMapName': self._serialize.url("scope_map_name", scope_map_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + scope_map_name: str, + scope_map_create_parameters: "models.ScopeMap", + **kwargs + ) -> "models.ScopeMap": + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'scopeMapName': self._serialize.url("scope_map_name", scope_map_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(scope_map_create_parameters, 'ScopeMap') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + scope_map_name: str, + scope_map_create_parameters: "models.ScopeMap", + **kwargs + ) -> AsyncLROPoller["models.ScopeMap"]: + """Creates a scope map for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param scope_map_name: The name of the scope map. + :type scope_map_name: str + :param scope_map_create_parameters: The parameters for creating a scope map. + :type scope_map_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either ScopeMap or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + scope_map_name=scope_map_name, + scope_map_create_parameters=scope_map_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + scope_map_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'scopeMapName': self._serialize.url("scope_map_name", scope_map_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + scope_map_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a scope map from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param scope_map_name: The name of the scope map. + :type scope_map_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + scope_map_name=scope_map_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + scope_map_name: str, + scope_map_update_parameters: "models.ScopeMapUpdateParameters", + **kwargs + ) -> "models.ScopeMap": + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'scopeMapName': self._serialize.url("scope_map_name", scope_map_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(scope_map_update_parameters, 'ScopeMapUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + scope_map_name: str, + scope_map_update_parameters: "models.ScopeMapUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.ScopeMap"]: + """Updates a scope map with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param scope_map_name: The name of the scope map. + :type scope_map_name: str + :param scope_map_update_parameters: The parameters for updating a scope map. + :type scope_map_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMapUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either ScopeMap or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + scope_map_name=scope_map_name, + scope_map_update_parameters=scope_map_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.ScopeMapListResult"]: + """Lists all the scope maps for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ScopeMapListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMapListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMapListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ScopeMapListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_task_runs_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_task_runs_operations.py new file mode 100644 index 00000000000..04f1004888c --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_task_runs_operations.py @@ -0,0 +1,618 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class TaskRunsOperations: + """TaskRunsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + task_run_name: str, + **kwargs + ) -> "models.TaskRun": + """Gets the detailed information for a given task run. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TaskRun, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + task_run_name: str, + task_run: "models.TaskRun", + **kwargs + ) -> "models.TaskRun": + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(task_run, 'TaskRun') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('TaskRun', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + task_run_name: str, + task_run: "models.TaskRun", + **kwargs + ) -> AsyncLROPoller["models.TaskRun"]: + """Creates a task run for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :param task_run: The parameters of a run that needs to scheduled. + :type task_run: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either TaskRun or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_run_name=task_run_name, + task_run=task_run, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + task_run_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + task_run_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a specified task run resource. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_run_name=task_run_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + task_run_name: str, + update_parameters: "models.TaskRunUpdateParameters", + **kwargs + ) -> "models.TaskRun": + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(update_parameters, 'TaskRunUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('TaskRun', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + task_run_name: str, + update_parameters: "models.TaskRunUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.TaskRun"]: + """Updates a task run with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :param update_parameters: The parameters for updating a task run. + :type update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRunUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either TaskRun or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_run_name=task_run_name, + update_parameters=update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + async def get_details( + self, + resource_group_name: str, + registry_name: str, + task_run_name: str, + **kwargs + ) -> "models.TaskRun": + """Gets the detailed information for a given task run that includes all secrets. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TaskRun, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_details.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_details.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}/listDetails'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.TaskRunListResult"]: + """Lists all the task runs for a specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TaskRunListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRunListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRunListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('TaskRunListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.ErrorResponse, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_tasks_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_tasks_operations.py new file mode 100644 index 00000000000..812495b9d00 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_tasks_operations.py @@ -0,0 +1,618 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class TasksOperations: + """TasksOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.TaskListResult"]: + """Lists all the tasks for a specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TaskListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('TaskListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.ErrorResponse, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks'} # type: ignore + + async def get( + self, + resource_group_name: str, + registry_name: str, + task_name: str, + **kwargs + ) -> "models.Task": + """Get the properties of a specified task. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Task, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + task_name: str, + task_create_parameters: "models.Task", + **kwargs + ) -> "models.Task": + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(task_create_parameters, 'Task') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Task', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + task_name: str, + task_create_parameters: "models.Task", + **kwargs + ) -> AsyncLROPoller["models.Task"]: + """Creates a task for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :param task_create_parameters: The parameters for creating a task. + :type task_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Task or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_name=task_name, + task_create_parameters=task_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + task_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + task_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a specified task. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_name=task_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + task_name: str, + task_update_parameters: "models.TaskUpdateParameters", + **kwargs + ) -> "models.Task": + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(task_update_parameters, 'TaskUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Task', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + task_name: str, + task_update_parameters: "models.TaskUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.Task"]: + """Updates a task with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :param task_update_parameters: The parameters for updating a task. + :type task_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Task or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_name=task_name, + task_update_parameters=task_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + async def get_details( + self, + resource_group_name: str, + registry_name: str, + task_name: str, + **kwargs + ) -> "models.Task": + """Returns a task with extended information that includes all secrets. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Task, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_details.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_details.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}/listDetails'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_tokens_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_tokens_operations.py new file mode 100644 index 00000000000..ebcc5fcfaf4 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_tokens_operations.py @@ -0,0 +1,547 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class TokensOperations: + """TokensOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + token_name: str, + **kwargs + ) -> "models.Token": + """Gets the properties of the specified token. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param token_name: The name of the token. + :type token_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Token, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'tokenName': self._serialize.url("token_name", token_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + token_name: str, + token_create_parameters: "models.Token", + **kwargs + ) -> "models.Token": + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'tokenName': self._serialize.url("token_name", token_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(token_create_parameters, 'Token') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Token', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + token_name: str, + token_create_parameters: "models.Token", + **kwargs + ) -> AsyncLROPoller["models.Token"]: + """Creates a token for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param token_name: The name of the token. + :type token_name: str + :param token_create_parameters: The parameters for creating a token. + :type token_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Token or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + token_name=token_name, + token_create_parameters=token_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + token_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'tokenName': self._serialize.url("token_name", token_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + token_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a token from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param token_name: The name of the token. + :type token_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + token_name=token_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + token_name: str, + token_update_parameters: "models.TokenUpdateParameters", + **kwargs + ) -> "models.Token": + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'tokenName': self._serialize.url("token_name", token_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(token_update_parameters, 'TokenUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Token', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + token_name: str, + token_update_parameters: "models.TokenUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.Token"]: + """Updates a token with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param token_name: The name of the token. + :type token_name: str + :param token_update_parameters: The parameters for updating a token. + :type token_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Token or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + token_name=token_name, + token_update_parameters=token_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.TokenListResult"]: + """Lists all the tokens for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TokenListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TokenListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('TokenListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_webhooks_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_webhooks_operations.py new file mode 100644 index 00000000000..efa7c23b584 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/aio/operations/_webhooks_operations.py @@ -0,0 +1,752 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class WebhooksOperations: + """WebhooksOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + **kwargs + ) -> "models.Webhook": + """Gets the properties of the specified webhook. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Webhook, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Webhook + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + async def _create_initial( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + webhook_create_parameters: "models.WebhookCreateParameters", + **kwargs + ) -> "models.Webhook": + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(webhook_create_parameters, 'WebhookCreateParameters') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Webhook', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + async def begin_create( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + webhook_create_parameters: "models.WebhookCreateParameters", + **kwargs + ) -> AsyncLROPoller["models.Webhook"]: + """Creates a webhook for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :param webhook_create_parameters: The parameters for creating a webhook. + :type webhook_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookCreateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Webhook or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Webhook] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + webhook_name=webhook_name, + webhook_create_parameters=webhook_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Deletes a webhook from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + webhook_name=webhook_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + webhook_update_parameters: "models.WebhookUpdateParameters", + **kwargs + ) -> "models.Webhook": + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(webhook_update_parameters, 'WebhookUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Webhook', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + webhook_update_parameters: "models.WebhookUpdateParameters", + **kwargs + ) -> AsyncLROPoller["models.Webhook"]: + """Updates a webhook with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :param webhook_update_parameters: The parameters for updating a webhook. + :type webhook_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Webhook or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Webhook] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + webhook_name=webhook_name, + webhook_update_parameters=webhook_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + def list( + self, + resource_group_name: str, + registry_name: str, + **kwargs + ) -> AsyncIterable["models.WebhookListResult"]: + """Lists all the webhooks for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either WebhookListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.WebhookListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('WebhookListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks'} # type: ignore + + async def ping( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + **kwargs + ) -> "models.EventInfo": + """Triggers a ping event to be sent to the webhook. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: EventInfo, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventInfo + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.EventInfo"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.ping.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('EventInfo', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + ping.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}/ping'} # type: ignore + + async def get_callback_config( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + **kwargs + ) -> "models.CallbackConfig": + """Gets the configuration of service URI and custom headers for the webhook. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: CallbackConfig, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.CallbackConfig + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.CallbackConfig"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_callback_config.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('CallbackConfig', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_callback_config.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}/getCallbackConfig'} # type: ignore + + def list_events( + self, + resource_group_name: str, + registry_name: str, + webhook_name: str, + **kwargs + ) -> AsyncIterable["models.EventListResult"]: + """Lists recent events for the specified webhook. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either EventListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.EventListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_events.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('EventListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_events.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}/listEvents'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/__init__.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/__init__.py new file mode 100644 index 00000000000..6547f967921 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/__init__.py @@ -0,0 +1,534 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +try: + from ._models_py3 import ActiveDirectoryObject + from ._models_py3 import Actor + from ._models_py3 import AgentPool + from ._models_py3 import AgentPoolListResult + from ._models_py3 import AgentPoolQueueStatus + from ._models_py3 import AgentPoolUpdateParameters + from ._models_py3 import AgentProperties + from ._models_py3 import Argument + from ._models_py3 import AuthInfo + from ._models_py3 import AuthInfoUpdateParameters + from ._models_py3 import BaseImageDependency + from ._models_py3 import BaseImageTrigger + from ._models_py3 import BaseImageTriggerUpdateParameters + from ._models_py3 import CallbackConfig + from ._models_py3 import Credentials + from ._models_py3 import CustomRegistryCredentials + from ._models_py3 import DockerBuildRequest + from ._models_py3 import DockerBuildStep + from ._models_py3 import DockerBuildStepUpdateParameters + from ._models_py3 import EncodedTaskRunRequest + from ._models_py3 import EncodedTaskStep + from ._models_py3 import EncodedTaskStepUpdateParameters + from ._models_py3 import EncryptionProperty + from ._models_py3 import ErrorResponse + from ._models_py3 import ErrorResponseBody + from ._models_py3 import Event + from ._models_py3 import EventContent + from ._models_py3 import EventInfo + from ._models_py3 import EventListResult + from ._models_py3 import EventRequestMessage + from ._models_py3 import EventResponseMessage + from ._models_py3 import ExportPipeline + from ._models_py3 import ExportPipelineListResult + from ._models_py3 import ExportPipelineTargetProperties + from ._models_py3 import FileTaskRunRequest + from ._models_py3 import FileTaskStep + from ._models_py3 import FileTaskStepUpdateParameters + from ._models_py3 import GenerateCredentialsParameters + from ._models_py3 import GenerateCredentialsResult + from ._models_py3 import IPRule + from ._models_py3 import IdentityProperties + from ._models_py3 import ImageDescriptor + from ._models_py3 import ImageUpdateTrigger + from ._models_py3 import ImportImageParameters + from ._models_py3 import ImportPipeline + from ._models_py3 import ImportPipelineListResult + from ._models_py3 import ImportPipelineSourceProperties + from ._models_py3 import ImportSource + from ._models_py3 import ImportSourceCredentials + from ._models_py3 import InnerErrorDescription + from ._models_py3 import KeyVaultProperties + from ._models_py3 import NetworkRuleSet + from ._models_py3 import OperationDefinition + from ._models_py3 import OperationDisplayDefinition + from ._models_py3 import OperationListResult + from ._models_py3 import OperationMetricSpecificationDefinition + from ._models_py3 import OperationServiceSpecificationDefinition + from ._models_py3 import OverrideTaskStepProperties + from ._models_py3 import PipelineRun + from ._models_py3 import PipelineRunListResult + from ._models_py3 import PipelineRunRequest + from ._models_py3 import PipelineRunResponse + from ._models_py3 import PipelineRunSourceProperties + from ._models_py3 import PipelineRunTargetProperties + from ._models_py3 import PipelineSourceTriggerDescriptor + from ._models_py3 import PipelineSourceTriggerProperties + from ._models_py3 import PipelineTriggerDescriptor + from ._models_py3 import PipelineTriggerProperties + from ._models_py3 import PlatformProperties + from ._models_py3 import PlatformUpdateParameters + from ._models_py3 import Policies + from ._models_py3 import PrivateEndpoint + from ._models_py3 import PrivateEndpointConnection + from ._models_py3 import PrivateEndpointConnectionListResult + from ._models_py3 import PrivateLinkResource + from ._models_py3 import PrivateLinkResourceListResult + from ._models_py3 import PrivateLinkServiceConnectionState + from ._models_py3 import ProgressProperties + from ._models_py3 import ProxyResource + from ._models_py3 import QuarantinePolicy + from ._models_py3 import RegenerateCredentialParameters + from ._models_py3 import Registry + from ._models_py3 import RegistryListCredentialsResult + from ._models_py3 import RegistryListResult + from ._models_py3 import RegistryNameCheckRequest + from ._models_py3 import RegistryNameStatus + from ._models_py3 import RegistryPassword + from ._models_py3 import RegistryUpdateParameters + from ._models_py3 import RegistryUsage + from ._models_py3 import RegistryUsageListResult + from ._models_py3 import Replication + from ._models_py3 import ReplicationListResult + from ._models_py3 import ReplicationUpdateParameters + from ._models_py3 import Request + from ._models_py3 import Resource + from ._models_py3 import RetentionPolicy + from ._models_py3 import Run + from ._models_py3 import RunFilter + from ._models_py3 import RunGetLogResult + from ._models_py3 import RunListResult + from ._models_py3 import RunRequest + from ._models_py3 import RunUpdateParameters + from ._models_py3 import ScopeMap + from ._models_py3 import ScopeMapListResult + from ._models_py3 import ScopeMapUpdateParameters + from ._models_py3 import SecretObject + from ._models_py3 import SetValue + from ._models_py3 import Sku + from ._models_py3 import Source + from ._models_py3 import SourceProperties + from ._models_py3 import SourceRegistryCredentials + from ._models_py3 import SourceTrigger + from ._models_py3 import SourceTriggerDescriptor + from ._models_py3 import SourceTriggerUpdateParameters + from ._models_py3 import SourceUpdateParameters + from ._models_py3 import SourceUploadDefinition + from ._models_py3 import Status + from ._models_py3 import StorageAccountProperties + from ._models_py3 import Target + from ._models_py3 import Task + from ._models_py3 import TaskListResult + from ._models_py3 import TaskRun + from ._models_py3 import TaskRunListResult + from ._models_py3 import TaskRunRequest + from ._models_py3 import TaskRunUpdateParameters + from ._models_py3 import TaskStepProperties + from ._models_py3 import TaskStepUpdateParameters + from ._models_py3 import TaskUpdateParameters + from ._models_py3 import TimerTrigger + from ._models_py3 import TimerTriggerDescriptor + from ._models_py3 import TimerTriggerUpdateParameters + from ._models_py3 import Token + from ._models_py3 import TokenCertificate + from ._models_py3 import TokenCredentialsProperties + from ._models_py3 import TokenListResult + from ._models_py3 import TokenPassword + from ._models_py3 import TokenUpdateParameters + from ._models_py3 import TriggerProperties + from ._models_py3 import TriggerUpdateParameters + from ._models_py3 import TrustPolicy + from ._models_py3 import UserIdentityProperties + from ._models_py3 import VirtualNetworkRule + from ._models_py3 import Webhook + from ._models_py3 import WebhookCreateParameters + from ._models_py3 import WebhookListResult + from ._models_py3 import WebhookUpdateParameters +except (SyntaxError, ImportError): + from ._models import ActiveDirectoryObject # type: ignore + from ._models import Actor # type: ignore + from ._models import AgentPool # type: ignore + from ._models import AgentPoolListResult # type: ignore + from ._models import AgentPoolQueueStatus # type: ignore + from ._models import AgentPoolUpdateParameters # type: ignore + from ._models import AgentProperties # type: ignore + from ._models import Argument # type: ignore + from ._models import AuthInfo # type: ignore + from ._models import AuthInfoUpdateParameters # type: ignore + from ._models import BaseImageDependency # type: ignore + from ._models import BaseImageTrigger # type: ignore + from ._models import BaseImageTriggerUpdateParameters # type: ignore + from ._models import CallbackConfig # type: ignore + from ._models import Credentials # type: ignore + from ._models import CustomRegistryCredentials # type: ignore + from ._models import DockerBuildRequest # type: ignore + from ._models import DockerBuildStep # type: ignore + from ._models import DockerBuildStepUpdateParameters # type: ignore + from ._models import EncodedTaskRunRequest # type: ignore + from ._models import EncodedTaskStep # type: ignore + from ._models import EncodedTaskStepUpdateParameters # type: ignore + from ._models import EncryptionProperty # type: ignore + from ._models import ErrorResponse # type: ignore + from ._models import ErrorResponseBody # type: ignore + from ._models import Event # type: ignore + from ._models import EventContent # type: ignore + from ._models import EventInfo # type: ignore + from ._models import EventListResult # type: ignore + from ._models import EventRequestMessage # type: ignore + from ._models import EventResponseMessage # type: ignore + from ._models import ExportPipeline # type: ignore + from ._models import ExportPipelineListResult # type: ignore + from ._models import ExportPipelineTargetProperties # type: ignore + from ._models import FileTaskRunRequest # type: ignore + from ._models import FileTaskStep # type: ignore + from ._models import FileTaskStepUpdateParameters # type: ignore + from ._models import GenerateCredentialsParameters # type: ignore + from ._models import GenerateCredentialsResult # type: ignore + from ._models import IPRule # type: ignore + from ._models import IdentityProperties # type: ignore + from ._models import ImageDescriptor # type: ignore + from ._models import ImageUpdateTrigger # type: ignore + from ._models import ImportImageParameters # type: ignore + from ._models import ImportPipeline # type: ignore + from ._models import ImportPipelineListResult # type: ignore + from ._models import ImportPipelineSourceProperties # type: ignore + from ._models import ImportSource # type: ignore + from ._models import ImportSourceCredentials # type: ignore + from ._models import InnerErrorDescription # type: ignore + from ._models import KeyVaultProperties # type: ignore + from ._models import NetworkRuleSet # type: ignore + from ._models import OperationDefinition # type: ignore + from ._models import OperationDisplayDefinition # type: ignore + from ._models import OperationListResult # type: ignore + from ._models import OperationMetricSpecificationDefinition # type: ignore + from ._models import OperationServiceSpecificationDefinition # type: ignore + from ._models import OverrideTaskStepProperties # type: ignore + from ._models import PipelineRun # type: ignore + from ._models import PipelineRunListResult # type: ignore + from ._models import PipelineRunRequest # type: ignore + from ._models import PipelineRunResponse # type: ignore + from ._models import PipelineRunSourceProperties # type: ignore + from ._models import PipelineRunTargetProperties # type: ignore + from ._models import PipelineSourceTriggerDescriptor # type: ignore + from ._models import PipelineSourceTriggerProperties # type: ignore + from ._models import PipelineTriggerDescriptor # type: ignore + from ._models import PipelineTriggerProperties # type: ignore + from ._models import PlatformProperties # type: ignore + from ._models import PlatformUpdateParameters # type: ignore + from ._models import Policies # type: ignore + from ._models import PrivateEndpoint # type: ignore + from ._models import PrivateEndpointConnection # type: ignore + from ._models import PrivateEndpointConnectionListResult # type: ignore + from ._models import PrivateLinkResource # type: ignore + from ._models import PrivateLinkResourceListResult # type: ignore + from ._models import PrivateLinkServiceConnectionState # type: ignore + from ._models import ProgressProperties # type: ignore + from ._models import ProxyResource # type: ignore + from ._models import QuarantinePolicy # type: ignore + from ._models import RegenerateCredentialParameters # type: ignore + from ._models import Registry # type: ignore + from ._models import RegistryListCredentialsResult # type: ignore + from ._models import RegistryListResult # type: ignore + from ._models import RegistryNameCheckRequest # type: ignore + from ._models import RegistryNameStatus # type: ignore + from ._models import RegistryPassword # type: ignore + from ._models import RegistryUpdateParameters # type: ignore + from ._models import RegistryUsage # type: ignore + from ._models import RegistryUsageListResult # type: ignore + from ._models import Replication # type: ignore + from ._models import ReplicationListResult # type: ignore + from ._models import ReplicationUpdateParameters # type: ignore + from ._models import Request # type: ignore + from ._models import Resource # type: ignore + from ._models import RetentionPolicy # type: ignore + from ._models import Run # type: ignore + from ._models import RunFilter # type: ignore + from ._models import RunGetLogResult # type: ignore + from ._models import RunListResult # type: ignore + from ._models import RunRequest # type: ignore + from ._models import RunUpdateParameters # type: ignore + from ._models import ScopeMap # type: ignore + from ._models import ScopeMapListResult # type: ignore + from ._models import ScopeMapUpdateParameters # type: ignore + from ._models import SecretObject # type: ignore + from ._models import SetValue # type: ignore + from ._models import Sku # type: ignore + from ._models import Source # type: ignore + from ._models import SourceProperties # type: ignore + from ._models import SourceRegistryCredentials # type: ignore + from ._models import SourceTrigger # type: ignore + from ._models import SourceTriggerDescriptor # type: ignore + from ._models import SourceTriggerUpdateParameters # type: ignore + from ._models import SourceUpdateParameters # type: ignore + from ._models import SourceUploadDefinition # type: ignore + from ._models import Status # type: ignore + from ._models import StorageAccountProperties # type: ignore + from ._models import Target # type: ignore + from ._models import Task # type: ignore + from ._models import TaskListResult # type: ignore + from ._models import TaskRun # type: ignore + from ._models import TaskRunListResult # type: ignore + from ._models import TaskRunRequest # type: ignore + from ._models import TaskRunUpdateParameters # type: ignore + from ._models import TaskStepProperties # type: ignore + from ._models import TaskStepUpdateParameters # type: ignore + from ._models import TaskUpdateParameters # type: ignore + from ._models import TimerTrigger # type: ignore + from ._models import TimerTriggerDescriptor # type: ignore + from ._models import TimerTriggerUpdateParameters # type: ignore + from ._models import Token # type: ignore + from ._models import TokenCertificate # type: ignore + from ._models import TokenCredentialsProperties # type: ignore + from ._models import TokenListResult # type: ignore + from ._models import TokenPassword # type: ignore + from ._models import TokenUpdateParameters # type: ignore + from ._models import TriggerProperties # type: ignore + from ._models import TriggerUpdateParameters # type: ignore + from ._models import TrustPolicy # type: ignore + from ._models import UserIdentityProperties # type: ignore + from ._models import VirtualNetworkRule # type: ignore + from ._models import Webhook # type: ignore + from ._models import WebhookCreateParameters # type: ignore + from ._models import WebhookListResult # type: ignore + from ._models import WebhookUpdateParameters # type: ignore + +from ._container_registry_management_client_enums import ( + Action, + ActionsRequired, + Architecture, + BaseImageDependencyType, + BaseImageTriggerType, + ConnectionStatus, + DefaultAction, + EncryptionStatus, + ImportMode, + OS, + PasswordName, + PipelineOptions, + PipelineRunSourceType, + PipelineRunTargetType, + PipelineSourceType, + PolicyStatus, + ProvisioningState, + PublicNetworkAccess, + RegistryUsageUnit, + ResourceIdentityType, + RunStatus, + RunType, + SecretObjectType, + SkuName, + SkuTier, + SourceControlType, + SourceRegistryLoginMode, + SourceTriggerEvent, + StepType, + TaskStatus, + TokenCertificateName, + TokenPasswordName, + TokenStatus, + TokenType, + TriggerStatus, + TrustPolicyType, + UpdateTriggerPayloadType, + Variant, + WebhookAction, + WebhookStatus, +) + +__all__ = [ + 'ActiveDirectoryObject', + 'Actor', + 'AgentPool', + 'AgentPoolListResult', + 'AgentPoolQueueStatus', + 'AgentPoolUpdateParameters', + 'AgentProperties', + 'Argument', + 'AuthInfo', + 'AuthInfoUpdateParameters', + 'BaseImageDependency', + 'BaseImageTrigger', + 'BaseImageTriggerUpdateParameters', + 'CallbackConfig', + 'Credentials', + 'CustomRegistryCredentials', + 'DockerBuildRequest', + 'DockerBuildStep', + 'DockerBuildStepUpdateParameters', + 'EncodedTaskRunRequest', + 'EncodedTaskStep', + 'EncodedTaskStepUpdateParameters', + 'EncryptionProperty', + 'ErrorResponse', + 'ErrorResponseBody', + 'Event', + 'EventContent', + 'EventInfo', + 'EventListResult', + 'EventRequestMessage', + 'EventResponseMessage', + 'ExportPipeline', + 'ExportPipelineListResult', + 'ExportPipelineTargetProperties', + 'FileTaskRunRequest', + 'FileTaskStep', + 'FileTaskStepUpdateParameters', + 'GenerateCredentialsParameters', + 'GenerateCredentialsResult', + 'IPRule', + 'IdentityProperties', + 'ImageDescriptor', + 'ImageUpdateTrigger', + 'ImportImageParameters', + 'ImportPipeline', + 'ImportPipelineListResult', + 'ImportPipelineSourceProperties', + 'ImportSource', + 'ImportSourceCredentials', + 'InnerErrorDescription', + 'KeyVaultProperties', + 'NetworkRuleSet', + 'OperationDefinition', + 'OperationDisplayDefinition', + 'OperationListResult', + 'OperationMetricSpecificationDefinition', + 'OperationServiceSpecificationDefinition', + 'OverrideTaskStepProperties', + 'PipelineRun', + 'PipelineRunListResult', + 'PipelineRunRequest', + 'PipelineRunResponse', + 'PipelineRunSourceProperties', + 'PipelineRunTargetProperties', + 'PipelineSourceTriggerDescriptor', + 'PipelineSourceTriggerProperties', + 'PipelineTriggerDescriptor', + 'PipelineTriggerProperties', + 'PlatformProperties', + 'PlatformUpdateParameters', + 'Policies', + 'PrivateEndpoint', + 'PrivateEndpointConnection', + 'PrivateEndpointConnectionListResult', + 'PrivateLinkResource', + 'PrivateLinkResourceListResult', + 'PrivateLinkServiceConnectionState', + 'ProgressProperties', + 'ProxyResource', + 'QuarantinePolicy', + 'RegenerateCredentialParameters', + 'Registry', + 'RegistryListCredentialsResult', + 'RegistryListResult', + 'RegistryNameCheckRequest', + 'RegistryNameStatus', + 'RegistryPassword', + 'RegistryUpdateParameters', + 'RegistryUsage', + 'RegistryUsageListResult', + 'Replication', + 'ReplicationListResult', + 'ReplicationUpdateParameters', + 'Request', + 'Resource', + 'RetentionPolicy', + 'Run', + 'RunFilter', + 'RunGetLogResult', + 'RunListResult', + 'RunRequest', + 'RunUpdateParameters', + 'ScopeMap', + 'ScopeMapListResult', + 'ScopeMapUpdateParameters', + 'SecretObject', + 'SetValue', + 'Sku', + 'Source', + 'SourceProperties', + 'SourceRegistryCredentials', + 'SourceTrigger', + 'SourceTriggerDescriptor', + 'SourceTriggerUpdateParameters', + 'SourceUpdateParameters', + 'SourceUploadDefinition', + 'Status', + 'StorageAccountProperties', + 'Target', + 'Task', + 'TaskListResult', + 'TaskRun', + 'TaskRunListResult', + 'TaskRunRequest', + 'TaskRunUpdateParameters', + 'TaskStepProperties', + 'TaskStepUpdateParameters', + 'TaskUpdateParameters', + 'TimerTrigger', + 'TimerTriggerDescriptor', + 'TimerTriggerUpdateParameters', + 'Token', + 'TokenCertificate', + 'TokenCredentialsProperties', + 'TokenListResult', + 'TokenPassword', + 'TokenUpdateParameters', + 'TriggerProperties', + 'TriggerUpdateParameters', + 'TrustPolicy', + 'UserIdentityProperties', + 'VirtualNetworkRule', + 'Webhook', + 'WebhookCreateParameters', + 'WebhookListResult', + 'WebhookUpdateParameters', + 'Action', + 'ActionsRequired', + 'Architecture', + 'BaseImageDependencyType', + 'BaseImageTriggerType', + 'ConnectionStatus', + 'DefaultAction', + 'EncryptionStatus', + 'ImportMode', + 'OS', + 'PasswordName', + 'PipelineOptions', + 'PipelineRunSourceType', + 'PipelineRunTargetType', + 'PipelineSourceType', + 'PolicyStatus', + 'ProvisioningState', + 'PublicNetworkAccess', + 'RegistryUsageUnit', + 'ResourceIdentityType', + 'RunStatus', + 'RunType', + 'SecretObjectType', + 'SkuName', + 'SkuTier', + 'SourceControlType', + 'SourceRegistryLoginMode', + 'SourceTriggerEvent', + 'StepType', + 'TaskStatus', + 'TokenCertificateName', + 'TokenPasswordName', + 'TokenStatus', + 'TokenType', + 'TriggerStatus', + 'TrustPolicyType', + 'UpdateTriggerPayloadType', + 'Variant', + 'WebhookAction', + 'WebhookStatus', +] diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_container_registry_management_client_enums.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_container_registry_management_client_enums.py new file mode 100644 index 00000000000..674f174db73 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_container_registry_management_client_enums.py @@ -0,0 +1,329 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from enum import Enum, EnumMeta +from six import with_metaclass + +class _CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) + + +class Action(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The action of virtual network rule. + """ + + ALLOW = "Allow" + +class ActionsRequired(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """A message indicating if changes on the service provider require any updates on the consumer. + """ + + NONE = "None" + RECREATE = "Recreate" + +class Architecture(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The OS architecture. + """ + + AMD64 = "amd64" + X86 = "x86" + THREE_HUNDRED_EIGHTY_SIX = "386" + ARM = "arm" + ARM64 = "arm64" + +class BaseImageDependencyType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of the base image dependency. + """ + + BUILD_TIME = "BuildTime" + RUN_TIME = "RunTime" + +class BaseImageTriggerType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of the auto trigger for base image dependency updates. + """ + + ALL = "All" + RUNTIME = "Runtime" + +class ConnectionStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The private link service connection status. + """ + + APPROVED = "Approved" + PENDING = "Pending" + REJECTED = "Rejected" + DISCONNECTED = "Disconnected" + +class DefaultAction(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The default action of allow or deny when no other rules match. + """ + + ALLOW = "Allow" + DENY = "Deny" + +class EncryptionStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Indicates whether or not the encryption is enabled for container registry. + """ + + ENABLED = "enabled" + DISABLED = "disabled" + +class ImportMode(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """When Force, any existing target tags will be overwritten. When NoForce, any existing target + tags will fail the operation before any copying begins. + """ + + NO_FORCE = "NoForce" + FORCE = "Force" + +class OS(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The OS of agent machine + """ + + WINDOWS = "Windows" + LINUX = "Linux" + +class PasswordName(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The password name. + """ + + PASSWORD = "password" + PASSWORD2 = "password2" + +class PipelineOptions(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + + OVERWRITE_TAGS = "OverwriteTags" + OVERWRITE_BLOBS = "OverwriteBlobs" + DELETE_SOURCE_BLOB_ON_SUCCESS = "DeleteSourceBlobOnSuccess" + CONTINUE_ON_ERRORS = "ContinueOnErrors" + +class PipelineRunSourceType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of the source. + """ + + AZURE_STORAGE_BLOB = "AzureStorageBlob" + +class PipelineRunTargetType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of the target. + """ + + AZURE_STORAGE_BLOB = "AzureStorageBlob" + +class PipelineSourceType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of source for the import pipeline. + """ + + AZURE_STORAGE_BLOB_CONTAINER = "AzureStorageBlobContainer" + +class PolicyStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The value that indicates whether the policy is enabled or not. + """ + + ENABLED = "enabled" + DISABLED = "disabled" + +class ProvisioningState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Provisioning state of the resource. + """ + + CREATING = "Creating" + UPDATING = "Updating" + DELETING = "Deleting" + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "Canceled" + +class PublicNetworkAccess(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Whether or not public network access is allowed for the container registry. + """ + + ENABLED = "Enabled" + DISABLED = "Disabled" + +class RegistryUsageUnit(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The unit of measurement. + """ + + COUNT = "Count" + BYTES = "Bytes" + +class ResourceIdentityType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The identity type. + """ + + SYSTEM_ASSIGNED = "SystemAssigned" + USER_ASSIGNED = "UserAssigned" + SYSTEM_ASSIGNED_USER_ASSIGNED = "SystemAssigned, UserAssigned" + NONE = "None" + +class RunStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The current status of the run. + """ + + QUEUED = "Queued" + STARTED = "Started" + RUNNING = "Running" + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "Canceled" + ERROR = "Error" + TIMEOUT = "Timeout" + +class RunType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of run. + """ + + QUICK_BUILD = "QuickBuild" + QUICK_RUN = "QuickRun" + AUTO_BUILD = "AutoBuild" + AUTO_RUN = "AutoRun" + +class SecretObjectType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of the secret object which determines how the value of the secret object has to be + interpreted. + """ + + OPAQUE = "Opaque" + VAULTSECRET = "Vaultsecret" + +class SkuName(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The SKU name of the container registry. Required for registry creation. + """ + + CLASSIC = "Classic" + BASIC = "Basic" + STANDARD = "Standard" + PREMIUM = "Premium" + +class SkuTier(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The SKU tier based on the SKU name. + """ + + CLASSIC = "Classic" + BASIC = "Basic" + STANDARD = "Standard" + PREMIUM = "Premium" + +class SourceControlType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of source control service. + """ + + GITHUB = "Github" + VISUAL_STUDIO_TEAM_SERVICE = "VisualStudioTeamService" + +class SourceRegistryLoginMode(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The authentication mode which determines the source registry login scope. The credentials for + the source registry + will be generated using the given scope. These credentials will be used to login to + the source registry during the run. + """ + + NONE = "None" + DEFAULT = "Default" + +class SourceTriggerEvent(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + + COMMIT = "commit" + PULLREQUEST = "pullrequest" + +class StepType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of the step. + """ + + DOCKER = "Docker" + FILE_TASK = "FileTask" + ENCODED_TASK = "EncodedTask" + +class TaskStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The current status of task. + """ + + DISABLED = "Disabled" + ENABLED = "Enabled" + +class TokenCertificateName(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + + CERTIFICATE1 = "certificate1" + CERTIFICATE2 = "certificate2" + +class TokenPasswordName(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The password name "password1" or "password2" + """ + + PASSWORD1 = "password1" + PASSWORD2 = "password2" + +class TokenStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The status of the token example enabled or disabled. + """ + + ENABLED = "enabled" + DISABLED = "disabled" + +class TokenType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of Auth token. + """ + + PAT = "PAT" + O_AUTH = "OAuth" + +class TriggerStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The current status of trigger. + """ + + DISABLED = "Disabled" + ENABLED = "Enabled" + +class TrustPolicyType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of trust policy. + """ + + NOTARY = "Notary" + +class UpdateTriggerPayloadType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Type of Payload body for Base image update triggers. + """ + + DEFAULT = "Default" + TOKEN = "Token" + +class Variant(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Variant of the CPU. + """ + + V6 = "v6" + V7 = "v7" + V8 = "v8" + +class WebhookAction(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + + PUSH = "push" + DELETE = "delete" + QUARANTINE = "quarantine" + CHART_PUSH = "chart_push" + CHART_DELETE = "chart_delete" + +class WebhookStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The status of the webhook at the time the operation was called. + """ + + ENABLED = "enabled" + DISABLED = "disabled" diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_models.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_models.py new file mode 100644 index 00000000000..d258f03f426 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_models.py @@ -0,0 +1,5411 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + + +class ActiveDirectoryObject(msrest.serialization.Model): + """The Active Directory Object that will be used for authenticating the token of a container registry. + + :param object_id: The user/group/application object ID for Active Directory Object that will be + used for authenticating the token of a container registry. + :type object_id: str + :param tenant_id: The tenant ID of user/group/application object Active Directory Object that + will be used for authenticating the token of a container registry. + :type tenant_id: str + """ + + _attribute_map = { + 'object_id': {'key': 'objectId', 'type': 'str'}, + 'tenant_id': {'key': 'tenantId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ActiveDirectoryObject, self).__init__(**kwargs) + self.object_id = kwargs.get('object_id', None) + self.tenant_id = kwargs.get('tenant_id', None) + + +class Actor(msrest.serialization.Model): + """The agent that initiated the event. For most situations, this could be from the authorization context of the request. + + :param name: The subject or username associated with the request context that generated the + event. + :type name: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Actor, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + + +class Resource(msrest.serialization.Model): + """An Azure resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + **kwargs + ): + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.location = kwargs['location'] + self.tags = kwargs.get('tags', None) + + +class AgentPool(Resource): + """The agentpool that has the ARM resource and properties. +The agentpool will have all information to create an agent pool. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :param count: The count of agent machine. + :type count: int + :param tier: The Tier of agent machine. + :type tier: str + :param os: The OS of agent machine. Possible values include: "Windows", "Linux". + :type os: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OS + :param virtual_network_subnet_resource_id: The Virtual Network Subnet Resource Id of the agent + machine. + :type virtual_network_subnet_resource_id: str + :ivar provisioning_state: The provisioning state of this agent pool. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'count': {'key': 'properties.count', 'type': 'int'}, + 'tier': {'key': 'properties.tier', 'type': 'str'}, + 'os': {'key': 'properties.os', 'type': 'str'}, + 'virtual_network_subnet_resource_id': {'key': 'properties.virtualNetworkSubnetResourceId', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AgentPool, self).__init__(**kwargs) + self.count = kwargs.get('count', None) + self.tier = kwargs.get('tier', None) + self.os = kwargs.get('os', None) + self.virtual_network_subnet_resource_id = kwargs.get('virtual_network_subnet_resource_id', None) + self.provisioning_state = None + + +class AgentPoolListResult(msrest.serialization.Model): + """The collection of agent pools. + + :param value: The collection value. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool] + :param next_link: The URI that can be used to request the next set of paged results. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[AgentPool]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AgentPoolListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class AgentPoolQueueStatus(msrest.serialization.Model): + """The QueueStatus of Agent Pool. + + :param count: The number of pending runs in the queue. + :type count: int + """ + + _attribute_map = { + 'count': {'key': 'count', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(AgentPoolQueueStatus, self).__init__(**kwargs) + self.count = kwargs.get('count', None) + + +class AgentPoolUpdateParameters(msrest.serialization.Model): + """The parameters for updating an agent pool. + + :param tags: A set of tags. The ARM resource tags. + :type tags: dict[str, str] + :param count: The count of agent machine. + :type count: int + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'count': {'key': 'properties.count', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(AgentPoolUpdateParameters, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.count = kwargs.get('count', None) + + +class AgentProperties(msrest.serialization.Model): + """The properties that determine the run agent configuration. + + :param cpu: The CPU configuration in terms of number of cores required for the run. + :type cpu: int + """ + + _attribute_map = { + 'cpu': {'key': 'cpu', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(AgentProperties, self).__init__(**kwargs) + self.cpu = kwargs.get('cpu', None) + + +class Argument(msrest.serialization.Model): + """The properties of a run argument. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the argument. + :type name: str + :param value: Required. The value of the argument. + :type value: str + :param is_secret: Flag to indicate whether the argument represents a secret and want to be + removed from build logs. + :type is_secret: bool + """ + + _validation = { + 'name': {'required': True}, + 'value': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'str'}, + 'is_secret': {'key': 'isSecret', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(Argument, self).__init__(**kwargs) + self.name = kwargs['name'] + self.value = kwargs['value'] + self.is_secret = kwargs.get('is_secret', False) + + +class AuthInfo(msrest.serialization.Model): + """The authorization properties for accessing the source code repository. + + All required parameters must be populated in order to send to Azure. + + :param token_type: Required. The type of Auth token. Possible values include: "PAT", "OAuth". + :type token_type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenType + :param token: Required. The access token used to access the source control provider. + :type token: str + :param refresh_token: The refresh token used to refresh the access token. + :type refresh_token: str + :param scope: The scope of the access token. + :type scope: str + :param expires_in: Time in seconds that the token remains valid. + :type expires_in: int + """ + + _validation = { + 'token_type': {'required': True}, + 'token': {'required': True}, + } + + _attribute_map = { + 'token_type': {'key': 'tokenType', 'type': 'str'}, + 'token': {'key': 'token', 'type': 'str'}, + 'refresh_token': {'key': 'refreshToken', 'type': 'str'}, + 'scope': {'key': 'scope', 'type': 'str'}, + 'expires_in': {'key': 'expiresIn', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(AuthInfo, self).__init__(**kwargs) + self.token_type = kwargs['token_type'] + self.token = kwargs['token'] + self.refresh_token = kwargs.get('refresh_token', None) + self.scope = kwargs.get('scope', None) + self.expires_in = kwargs.get('expires_in', None) + + +class AuthInfoUpdateParameters(msrest.serialization.Model): + """The authorization properties for accessing the source code repository. + + :param token_type: The type of Auth token. Possible values include: "PAT", "OAuth". + :type token_type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenType + :param token: The access token used to access the source control provider. + :type token: str + :param refresh_token: The refresh token used to refresh the access token. + :type refresh_token: str + :param scope: The scope of the access token. + :type scope: str + :param expires_in: Time in seconds that the token remains valid. + :type expires_in: int + """ + + _attribute_map = { + 'token_type': {'key': 'tokenType', 'type': 'str'}, + 'token': {'key': 'token', 'type': 'str'}, + 'refresh_token': {'key': 'refreshToken', 'type': 'str'}, + 'scope': {'key': 'scope', 'type': 'str'}, + 'expires_in': {'key': 'expiresIn', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(AuthInfoUpdateParameters, self).__init__(**kwargs) + self.token_type = kwargs.get('token_type', None) + self.token = kwargs.get('token', None) + self.refresh_token = kwargs.get('refresh_token', None) + self.scope = kwargs.get('scope', None) + self.expires_in = kwargs.get('expires_in', None) + + +class BaseImageDependency(msrest.serialization.Model): + """Properties that describe a base image dependency. + + :param type: The type of the base image dependency. Possible values include: "BuildTime", + "RunTime". + :type type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependencyType + :param registry: The registry login server. + :type registry: str + :param repository: The repository name. + :type repository: str + :param tag: The tag name. + :type tag: str + :param digest: The sha256-based digest of the image manifest. + :type digest: str + """ + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'registry': {'key': 'registry', 'type': 'str'}, + 'repository': {'key': 'repository', 'type': 'str'}, + 'tag': {'key': 'tag', 'type': 'str'}, + 'digest': {'key': 'digest', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(BaseImageDependency, self).__init__(**kwargs) + self.type = kwargs.get('type', None) + self.registry = kwargs.get('registry', None) + self.repository = kwargs.get('repository', None) + self.tag = kwargs.get('tag', None) + self.digest = kwargs.get('digest', None) + + +class BaseImageTrigger(msrest.serialization.Model): + """The trigger based on base image dependency. + + All required parameters must be populated in order to send to Azure. + + :param base_image_trigger_type: Required. The type of the auto trigger for base image + dependency updates. Possible values include: "All", "Runtime". + :type base_image_trigger_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageTriggerType + :param update_trigger_endpoint: The endpoint URL for receiving update triggers. + :type update_trigger_endpoint: str + :param update_trigger_payload_type: Type of Payload body for Base image update triggers. + Possible values include: "Default", "Token". + :type update_trigger_payload_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.UpdateTriggerPayloadType + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'base_image_trigger_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'base_image_trigger_type': {'key': 'baseImageTriggerType', 'type': 'str'}, + 'update_trigger_endpoint': {'key': 'updateTriggerEndpoint', 'type': 'str'}, + 'update_trigger_payload_type': {'key': 'updateTriggerPayloadType', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(BaseImageTrigger, self).__init__(**kwargs) + self.base_image_trigger_type = kwargs['base_image_trigger_type'] + self.update_trigger_endpoint = kwargs.get('update_trigger_endpoint', None) + self.update_trigger_payload_type = kwargs.get('update_trigger_payload_type', None) + self.status = kwargs.get('status', None) + self.name = kwargs['name'] + + +class BaseImageTriggerUpdateParameters(msrest.serialization.Model): + """The properties for updating base image dependency trigger. + + All required parameters must be populated in order to send to Azure. + + :param base_image_trigger_type: The type of the auto trigger for base image dependency updates. + Possible values include: "All", "Runtime". + :type base_image_trigger_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageTriggerType + :param update_trigger_endpoint: The endpoint URL for receiving update triggers. + :type update_trigger_endpoint: str + :param update_trigger_payload_type: Type of Payload body for Base image update triggers. + Possible values include: "Default", "Token". + :type update_trigger_payload_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.UpdateTriggerPayloadType + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'base_image_trigger_type': {'key': 'baseImageTriggerType', 'type': 'str'}, + 'update_trigger_endpoint': {'key': 'updateTriggerEndpoint', 'type': 'str'}, + 'update_trigger_payload_type': {'key': 'updateTriggerPayloadType', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(BaseImageTriggerUpdateParameters, self).__init__(**kwargs) + self.base_image_trigger_type = kwargs.get('base_image_trigger_type', None) + self.update_trigger_endpoint = kwargs.get('update_trigger_endpoint', None) + self.update_trigger_payload_type = kwargs.get('update_trigger_payload_type', None) + self.status = kwargs.get('status', None) + self.name = kwargs['name'] + + +class CallbackConfig(msrest.serialization.Model): + """The configuration of service URI and custom headers for the webhook. + + All required parameters must be populated in order to send to Azure. + + :param service_uri: Required. The service URI for the webhook to post notifications. + :type service_uri: str + :param custom_headers: Custom headers that will be added to the webhook notifications. + :type custom_headers: dict[str, str] + """ + + _validation = { + 'service_uri': {'required': True}, + } + + _attribute_map = { + 'service_uri': {'key': 'serviceUri', 'type': 'str'}, + 'custom_headers': {'key': 'customHeaders', 'type': '{str}'}, + } + + def __init__( + self, + **kwargs + ): + super(CallbackConfig, self).__init__(**kwargs) + self.service_uri = kwargs['service_uri'] + self.custom_headers = kwargs.get('custom_headers', None) + + +class Credentials(msrest.serialization.Model): + """The parameters that describes a set of credentials that will be used when a run is invoked. + + :param source_registry: Describes the credential parameters for accessing the source registry. + :type source_registry: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceRegistryCredentials + :param custom_registries: Describes the credential parameters for accessing other custom + registries. The key + for the dictionary item will be the registry login server (myregistry.azurecr.io) and + the value of the item will be the registry credentials for accessing the registry. + :type custom_registries: dict[str, + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.CustomRegistryCredentials] + """ + + _attribute_map = { + 'source_registry': {'key': 'sourceRegistry', 'type': 'SourceRegistryCredentials'}, + 'custom_registries': {'key': 'customRegistries', 'type': '{CustomRegistryCredentials}'}, + } + + def __init__( + self, + **kwargs + ): + super(Credentials, self).__init__(**kwargs) + self.source_registry = kwargs.get('source_registry', None) + self.custom_registries = kwargs.get('custom_registries', None) + + +class CustomRegistryCredentials(msrest.serialization.Model): + """Describes the credentials that will be used to access a custom registry during a run. + + :param user_name: The username for logging into the custom registry. + :type user_name: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SecretObject + :param password: The password for logging into the custom registry. The password is a secret + object that allows multiple ways of providing the value for it. + :type password: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SecretObject + :param identity: Indicates the managed identity assigned to the custom credential. If a user- + assigned identity + this value is the Client ID. If a system-assigned identity, the value will be ``system``. In + the case of a system-assigned identity, the Client ID will be determined by the runner. This + identity may be used to authenticate to key vault to retrieve credentials or it may be the + only + source of authentication used for accessing the registry. + :type identity: str + """ + + _attribute_map = { + 'user_name': {'key': 'userName', 'type': 'SecretObject'}, + 'password': {'key': 'password', 'type': 'SecretObject'}, + 'identity': {'key': 'identity', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(CustomRegistryCredentials, self).__init__(**kwargs) + self.user_name = kwargs.get('user_name', None) + self.password = kwargs.get('password', None) + self.identity = kwargs.get('identity', None) + + +class RunRequest(msrest.serialization.Model): + """The request parameters for scheduling a run. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DockerBuildRequest, EncodedTaskRunRequest, FileTaskRunRequest, TaskRunRequest. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'DockerBuildRequest': 'DockerBuildRequest', 'EncodedTaskRunRequest': 'EncodedTaskRunRequest', 'FileTaskRunRequest': 'FileTaskRunRequest', 'TaskRunRequest': 'TaskRunRequest'} + } + + def __init__( + self, + **kwargs + ): + super(RunRequest, self).__init__(**kwargs) + self.type = None # type: Optional[str] + self.is_archive_enabled = kwargs.get('is_archive_enabled', False) + self.agent_pool_name = kwargs.get('agent_pool_name', None) + + +class DockerBuildRequest(RunRequest): + """The parameters for a docker quick build. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param image_names: The fully qualified image names including the repository and tag. + :type image_names: list[str] + :param is_push_enabled: The value of this property indicates whether the image built should be + pushed to the registry or not. + :type is_push_enabled: bool + :param no_cache: The value of this property indicates whether the image cache is enabled or + not. + :type no_cache: bool + :param docker_file_path: Required. The Docker file path relative to the source location. + :type docker_file_path: str + :param target: The name of the target build stage for the docker build. + :type target: str + :param arguments: The collection of override arguments to be used when executing the run. + :type arguments: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Argument] + :param timeout: Run timeout in seconds. + :type timeout: int + :param platform: Required. The platform properties against which the run has to happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param source_location: The URL(absolute or relative) of the source context. It can be an URL + to a tar or git repository. + If it is relative URL, the relative path should be obtained from calling + listBuildSourceUploadUrl API. + :type source_location: str + :param credentials: The properties that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _validation = { + 'type': {'required': True}, + 'docker_file_path': {'required': True}, + 'timeout': {'maximum': 28800, 'minimum': 300}, + 'platform': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + 'image_names': {'key': 'imageNames', 'type': '[str]'}, + 'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'}, + 'no_cache': {'key': 'noCache', 'type': 'bool'}, + 'docker_file_path': {'key': 'dockerFilePath', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'arguments': {'key': 'arguments', 'type': '[Argument]'}, + 'timeout': {'key': 'timeout', 'type': 'int'}, + 'platform': {'key': 'platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'agentConfiguration', 'type': 'AgentProperties'}, + 'source_location': {'key': 'sourceLocation', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + **kwargs + ): + super(DockerBuildRequest, self).__init__(**kwargs) + self.type = 'DockerBuildRequest' # type: str + self.image_names = kwargs.get('image_names', None) + self.is_push_enabled = kwargs.get('is_push_enabled', True) + self.no_cache = kwargs.get('no_cache', False) + self.docker_file_path = kwargs['docker_file_path'] + self.target = kwargs.get('target', None) + self.arguments = kwargs.get('arguments', None) + self.timeout = kwargs.get('timeout', 3600) + self.platform = kwargs['platform'] + self.agent_configuration = kwargs.get('agent_configuration', None) + self.source_location = kwargs.get('source_location', None) + self.credentials = kwargs.get('credentials', None) + + +class TaskStepProperties(msrest.serialization.Model): + """Base properties for any task step. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DockerBuildStep, EncodedTaskStep, FileTaskStep. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :ivar base_image_dependencies: List of base image dependencies for a step. + :vartype base_image_dependencies: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependency] + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + """ + + _validation = { + 'type': {'required': True}, + 'base_image_dependencies': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'base_image_dependencies': {'key': 'baseImageDependencies', 'type': '[BaseImageDependency]'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'Docker': 'DockerBuildStep', 'EncodedTask': 'EncodedTaskStep', 'FileTask': 'FileTaskStep'} + } + + def __init__( + self, + **kwargs + ): + super(TaskStepProperties, self).__init__(**kwargs) + self.type = None # type: Optional[str] + self.base_image_dependencies = None + self.context_path = kwargs.get('context_path', None) + self.context_access_token = kwargs.get('context_access_token', None) + + +class DockerBuildStep(TaskStepProperties): + """The Docker build step. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :ivar base_image_dependencies: List of base image dependencies for a step. + :vartype base_image_dependencies: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependency] + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param image_names: The fully qualified image names including the repository and tag. + :type image_names: list[str] + :param is_push_enabled: The value of this property indicates whether the image built should be + pushed to the registry or not. + :type is_push_enabled: bool + :param no_cache: The value of this property indicates whether the image cache is enabled or + not. + :type no_cache: bool + :param docker_file_path: Required. The Docker file path relative to the source context. + :type docker_file_path: str + :param target: The name of the target build stage for the docker build. + :type target: str + :param arguments: The collection of override arguments to be used when executing this build + step. + :type arguments: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Argument] + """ + + _validation = { + 'type': {'required': True}, + 'base_image_dependencies': {'readonly': True}, + 'docker_file_path': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'base_image_dependencies': {'key': 'baseImageDependencies', 'type': '[BaseImageDependency]'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'image_names': {'key': 'imageNames', 'type': '[str]'}, + 'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'}, + 'no_cache': {'key': 'noCache', 'type': 'bool'}, + 'docker_file_path': {'key': 'dockerFilePath', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'arguments': {'key': 'arguments', 'type': '[Argument]'}, + } + + def __init__( + self, + **kwargs + ): + super(DockerBuildStep, self).__init__(**kwargs) + self.type = 'Docker' # type: str + self.image_names = kwargs.get('image_names', None) + self.is_push_enabled = kwargs.get('is_push_enabled', True) + self.no_cache = kwargs.get('no_cache', False) + self.docker_file_path = kwargs['docker_file_path'] + self.target = kwargs.get('target', None) + self.arguments = kwargs.get('arguments', None) + + +class TaskStepUpdateParameters(msrest.serialization.Model): + """Base properties for updating any task step. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DockerBuildStepUpdateParameters, EncodedTaskStepUpdateParameters, FileTaskStepUpdateParameters. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'Docker': 'DockerBuildStepUpdateParameters', 'EncodedTask': 'EncodedTaskStepUpdateParameters', 'FileTask': 'FileTaskStepUpdateParameters'} + } + + def __init__( + self, + **kwargs + ): + super(TaskStepUpdateParameters, self).__init__(**kwargs) + self.type = None # type: Optional[str] + self.context_path = kwargs.get('context_path', None) + self.context_access_token = kwargs.get('context_access_token', None) + + +class DockerBuildStepUpdateParameters(TaskStepUpdateParameters): + """The properties for updating a docker build step. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param image_names: The fully qualified image names including the repository and tag. + :type image_names: list[str] + :param is_push_enabled: The value of this property indicates whether the image built should be + pushed to the registry or not. + :type is_push_enabled: bool + :param no_cache: The value of this property indicates whether the image cache is enabled or + not. + :type no_cache: bool + :param docker_file_path: The Docker file path relative to the source context. + :type docker_file_path: str + :param arguments: The collection of override arguments to be used when executing this build + step. + :type arguments: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Argument] + :param target: The name of the target build stage for the docker build. + :type target: str + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'image_names': {'key': 'imageNames', 'type': '[str]'}, + 'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'}, + 'no_cache': {'key': 'noCache', 'type': 'bool'}, + 'docker_file_path': {'key': 'dockerFilePath', 'type': 'str'}, + 'arguments': {'key': 'arguments', 'type': '[Argument]'}, + 'target': {'key': 'target', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DockerBuildStepUpdateParameters, self).__init__(**kwargs) + self.type = 'Docker' # type: str + self.image_names = kwargs.get('image_names', None) + self.is_push_enabled = kwargs.get('is_push_enabled', None) + self.no_cache = kwargs.get('no_cache', None) + self.docker_file_path = kwargs.get('docker_file_path', None) + self.arguments = kwargs.get('arguments', None) + self.target = kwargs.get('target', None) + + +class EncodedTaskRunRequest(RunRequest): + """The parameters for a quick task run request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param encoded_task_content: Required. Base64 encoded value of the template/definition file + content. + :type encoded_task_content: str + :param encoded_values_content: Base64 encoded value of the parameters/values file content. + :type encoded_values_content: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + :param timeout: Run timeout in seconds. + :type timeout: int + :param platform: Required. The platform properties against which the run has to happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param source_location: The URL(absolute or relative) of the source context. It can be an URL + to a tar or git repository. + If it is relative URL, the relative path should be obtained from calling + listBuildSourceUploadUrl API. + :type source_location: str + :param credentials: The properties that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _validation = { + 'type': {'required': True}, + 'encoded_task_content': {'required': True}, + 'timeout': {'maximum': 28800, 'minimum': 300}, + 'platform': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + 'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'}, + 'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + 'timeout': {'key': 'timeout', 'type': 'int'}, + 'platform': {'key': 'platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'agentConfiguration', 'type': 'AgentProperties'}, + 'source_location': {'key': 'sourceLocation', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + **kwargs + ): + super(EncodedTaskRunRequest, self).__init__(**kwargs) + self.type = 'EncodedTaskRunRequest' # type: str + self.encoded_task_content = kwargs['encoded_task_content'] + self.encoded_values_content = kwargs.get('encoded_values_content', None) + self.values = kwargs.get('values', None) + self.timeout = kwargs.get('timeout', 3600) + self.platform = kwargs['platform'] + self.agent_configuration = kwargs.get('agent_configuration', None) + self.source_location = kwargs.get('source_location', None) + self.credentials = kwargs.get('credentials', None) + + +class EncodedTaskStep(TaskStepProperties): + """The properties of a encoded task step. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :ivar base_image_dependencies: List of base image dependencies for a step. + :vartype base_image_dependencies: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependency] + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param encoded_task_content: Required. Base64 encoded value of the template/definition file + content. + :type encoded_task_content: str + :param encoded_values_content: Base64 encoded value of the parameters/values file content. + :type encoded_values_content: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + """ + + _validation = { + 'type': {'required': True}, + 'base_image_dependencies': {'readonly': True}, + 'encoded_task_content': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'base_image_dependencies': {'key': 'baseImageDependencies', 'type': '[BaseImageDependency]'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'}, + 'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + } + + def __init__( + self, + **kwargs + ): + super(EncodedTaskStep, self).__init__(**kwargs) + self.type = 'EncodedTask' # type: str + self.encoded_task_content = kwargs['encoded_task_content'] + self.encoded_values_content = kwargs.get('encoded_values_content', None) + self.values = kwargs.get('values', None) + + +class EncodedTaskStepUpdateParameters(TaskStepUpdateParameters): + """The properties for updating encoded task step. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param encoded_task_content: Base64 encoded value of the template/definition file content. + :type encoded_task_content: str + :param encoded_values_content: Base64 encoded value of the parameters/values file content. + :type encoded_values_content: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'}, + 'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + } + + def __init__( + self, + **kwargs + ): + super(EncodedTaskStepUpdateParameters, self).__init__(**kwargs) + self.type = 'EncodedTask' # type: str + self.encoded_task_content = kwargs.get('encoded_task_content', None) + self.encoded_values_content = kwargs.get('encoded_values_content', None) + self.values = kwargs.get('values', None) + + +class EncryptionProperty(msrest.serialization.Model): + """EncryptionProperty. + + :param status: Indicates whether or not the encryption is enabled for container registry. + Possible values include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EncryptionStatus + :param key_vault_properties: Key vault properties. + :type key_vault_properties: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.KeyVaultProperties + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'key_vault_properties': {'key': 'keyVaultProperties', 'type': 'KeyVaultProperties'}, + } + + def __init__( + self, + **kwargs + ): + super(EncryptionProperty, self).__init__(**kwargs) + self.status = kwargs.get('status', None) + self.key_vault_properties = kwargs.get('key_vault_properties', None) + + +class ErrorResponse(msrest.serialization.Model): + """An error response from the Azure Container Registry service. + + :param error: Azure container registry build API error body. + :type error: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ErrorResponseBody + """ + + _attribute_map = { + 'error': {'key': 'error', 'type': 'ErrorResponseBody'}, + } + + def __init__( + self, + **kwargs + ): + super(ErrorResponse, self).__init__(**kwargs) + self.error = kwargs.get('error', None) + + +class ErrorResponseBody(msrest.serialization.Model): + """An error response from the Azure Container Registry service. + + All required parameters must be populated in order to send to Azure. + + :param code: Required. error code. + :type code: str + :param message: Required. error message. + :type message: str + :param target: target of the particular error. + :type target: str + :param details: an array of additional nested error response info objects, as described by this + contract. + :type details: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.InnerErrorDescription + """ + + _validation = { + 'code': {'required': True}, + 'message': {'required': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': 'InnerErrorDescription'}, + } + + def __init__( + self, + **kwargs + ): + super(ErrorResponseBody, self).__init__(**kwargs) + self.code = kwargs['code'] + self.message = kwargs['message'] + self.target = kwargs.get('target', None) + self.details = kwargs.get('details', None) + + +class EventInfo(msrest.serialization.Model): + """The basic information of an event. + + :param id: The event ID. + :type id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(EventInfo, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + + +class Event(EventInfo): + """The event for a webhook. + + :param id: The event ID. + :type id: str + :param event_request_message: The event request message sent to the service URI. + :type event_request_message: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventRequestMessage + :param event_response_message: The event response message received from the service URI. + :type event_response_message: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventResponseMessage + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'event_request_message': {'key': 'eventRequestMessage', 'type': 'EventRequestMessage'}, + 'event_response_message': {'key': 'eventResponseMessage', 'type': 'EventResponseMessage'}, + } + + def __init__( + self, + **kwargs + ): + super(Event, self).__init__(**kwargs) + self.event_request_message = kwargs.get('event_request_message', None) + self.event_response_message = kwargs.get('event_response_message', None) + + +class EventContent(msrest.serialization.Model): + """The content of the event request message. + + :param id: The event ID. + :type id: str + :param timestamp: The time at which the event occurred. + :type timestamp: ~datetime.datetime + :param action: The action that encompasses the provided event. + :type action: str + :param target: The target of the event. + :type target: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Target + :param request: The request that generated the event. + :type request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Request + :param actor: The agent that initiated the event. For most situations, this could be from the + authorization context of the request. + :type actor: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Actor + :param source: The registry node that generated the event. Put differently, while the actor + initiates the event, the source generates it. + :type source: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Source + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'timestamp': {'key': 'timestamp', 'type': 'iso-8601'}, + 'action': {'key': 'action', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'Target'}, + 'request': {'key': 'request', 'type': 'Request'}, + 'actor': {'key': 'actor', 'type': 'Actor'}, + 'source': {'key': 'source', 'type': 'Source'}, + } + + def __init__( + self, + **kwargs + ): + super(EventContent, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + self.timestamp = kwargs.get('timestamp', None) + self.action = kwargs.get('action', None) + self.target = kwargs.get('target', None) + self.request = kwargs.get('request', None) + self.actor = kwargs.get('actor', None) + self.source = kwargs.get('source', None) + + +class EventListResult(msrest.serialization.Model): + """The result of a request to list events for a webhook. + + :param value: The list of events. Since this list may be incomplete, the nextLink field should + be used to request the next list of events. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Event] + :param next_link: The URI that can be used to request the next list of events. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Event]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(EventListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class EventRequestMessage(msrest.serialization.Model): + """The event request message sent to the service URI. + + :param content: The content of the event request message. + :type content: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventContent + :param headers: The headers of the event request message. + :type headers: dict[str, str] + :param method: The HTTP method used to send the event request message. + :type method: str + :param request_uri: The URI used to send the event request message. + :type request_uri: str + :param version: The HTTP message version. + :type version: str + """ + + _attribute_map = { + 'content': {'key': 'content', 'type': 'EventContent'}, + 'headers': {'key': 'headers', 'type': '{str}'}, + 'method': {'key': 'method', 'type': 'str'}, + 'request_uri': {'key': 'requestUri', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(EventRequestMessage, self).__init__(**kwargs) + self.content = kwargs.get('content', None) + self.headers = kwargs.get('headers', None) + self.method = kwargs.get('method', None) + self.request_uri = kwargs.get('request_uri', None) + self.version = kwargs.get('version', None) + + +class EventResponseMessage(msrest.serialization.Model): + """The event response message received from the service URI. + + :param content: The content of the event response message. + :type content: str + :param headers: The headers of the event response message. + :type headers: dict[str, str] + :param reason_phrase: The reason phrase of the event response message. + :type reason_phrase: str + :param status_code: The status code of the event response message. + :type status_code: str + :param version: The HTTP message version. + :type version: str + """ + + _attribute_map = { + 'content': {'key': 'content', 'type': 'str'}, + 'headers': {'key': 'headers', 'type': '{str}'}, + 'reason_phrase': {'key': 'reasonPhrase', 'type': 'str'}, + 'status_code': {'key': 'statusCode', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(EventResponseMessage, self).__init__(**kwargs) + self.content = kwargs.get('content', None) + self.headers = kwargs.get('headers', None) + self.reason_phrase = kwargs.get('reason_phrase', None) + self.status_code = kwargs.get('status_code', None) + self.version = kwargs.get('version', None) + + +class ProxyResource(msrest.serialization.Model): + """The resource model definition for a ARM proxy resource. It will have everything other than required location and tags. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ProxyResource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + + +class ExportPipeline(ProxyResource): + """An object that represents an export pipeline for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: The location of the export pipeline. + :type location: str + :param identity: The identity of the export pipeline. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param target: The target properties of the export pipeline. + :type target: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipelineTargetProperties + :param options: The list of all options configured for the pipeline. + :type options: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineOptions] + :ivar provisioning_state: The provisioning state of the pipeline at the time the operation was + called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", + "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'target': {'key': 'properties.target', 'type': 'ExportPipelineTargetProperties'}, + 'options': {'key': 'properties.options', 'type': '[str]'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ExportPipeline, self).__init__(**kwargs) + self.location = kwargs.get('location', None) + self.identity = kwargs.get('identity', None) + self.target = kwargs.get('target', None) + self.options = kwargs.get('options', None) + self.provisioning_state = None + + +class ExportPipelineListResult(msrest.serialization.Model): + """The result of a request to list export pipelines for a container registry. + + :param value: The list of export pipelines. Since this list may be incomplete, the nextLink + field should be used to request the next list of export pipelines. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipeline] + :param next_link: The URI that can be used to request the next list of pipeline runs. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ExportPipeline]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ExportPipelineListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class ExportPipelineTargetProperties(msrest.serialization.Model): + """The properties of the export pipeline target. + + All required parameters must be populated in order to send to Azure. + + :param type: The type of target for the export pipeline. + :type type: str + :param uri: The target uri of the export pipeline. + When 'AzureStorageBlob': "https://accountName.blob.core.windows.net/containerName/blobName" + When 'AzureStorageBlobContainer': "https://accountName.blob.core.windows.net/containerName". + :type uri: str + :param key_vault_uri: Required. They key vault secret uri to obtain the target storage SAS + token. + :type key_vault_uri: str + """ + + _validation = { + 'key_vault_uri': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'uri': {'key': 'uri', 'type': 'str'}, + 'key_vault_uri': {'key': 'keyVaultUri', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ExportPipelineTargetProperties, self).__init__(**kwargs) + self.type = kwargs.get('type', None) + self.uri = kwargs.get('uri', None) + self.key_vault_uri = kwargs['key_vault_uri'] + + +class FileTaskRunRequest(RunRequest): + """The request parameters for a scheduling run against a task file. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param task_file_path: Required. The template/definition file path relative to the source. + :type task_file_path: str + :param values_file_path: The values/parameters file path relative to the source. + :type values_file_path: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + :param timeout: Run timeout in seconds. + :type timeout: int + :param platform: Required. The platform properties against which the run has to happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param source_location: The URL(absolute or relative) of the source context. It can be an URL + to a tar or git repository. + If it is relative URL, the relative path should be obtained from calling + listBuildSourceUploadUrl API. + :type source_location: str + :param credentials: The properties that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _validation = { + 'type': {'required': True}, + 'task_file_path': {'required': True}, + 'timeout': {'maximum': 28800, 'minimum': 300}, + 'platform': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + 'task_file_path': {'key': 'taskFilePath', 'type': 'str'}, + 'values_file_path': {'key': 'valuesFilePath', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + 'timeout': {'key': 'timeout', 'type': 'int'}, + 'platform': {'key': 'platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'agentConfiguration', 'type': 'AgentProperties'}, + 'source_location': {'key': 'sourceLocation', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + **kwargs + ): + super(FileTaskRunRequest, self).__init__(**kwargs) + self.type = 'FileTaskRunRequest' # type: str + self.task_file_path = kwargs['task_file_path'] + self.values_file_path = kwargs.get('values_file_path', None) + self.values = kwargs.get('values', None) + self.timeout = kwargs.get('timeout', 3600) + self.platform = kwargs['platform'] + self.agent_configuration = kwargs.get('agent_configuration', None) + self.source_location = kwargs.get('source_location', None) + self.credentials = kwargs.get('credentials', None) + + +class FileTaskStep(TaskStepProperties): + """The properties of a task step. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :ivar base_image_dependencies: List of base image dependencies for a step. + :vartype base_image_dependencies: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependency] + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param task_file_path: Required. The task template/definition file path relative to the source + context. + :type task_file_path: str + :param values_file_path: The task values/parameters file path relative to the source context. + :type values_file_path: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + """ + + _validation = { + 'type': {'required': True}, + 'base_image_dependencies': {'readonly': True}, + 'task_file_path': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'base_image_dependencies': {'key': 'baseImageDependencies', 'type': '[BaseImageDependency]'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'task_file_path': {'key': 'taskFilePath', 'type': 'str'}, + 'values_file_path': {'key': 'valuesFilePath', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + } + + def __init__( + self, + **kwargs + ): + super(FileTaskStep, self).__init__(**kwargs) + self.type = 'FileTask' # type: str + self.task_file_path = kwargs['task_file_path'] + self.values_file_path = kwargs.get('values_file_path', None) + self.values = kwargs.get('values', None) + + +class FileTaskStepUpdateParameters(TaskStepUpdateParameters): + """The properties of updating a task step. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param task_file_path: The task template/definition file path relative to the source context. + :type task_file_path: str + :param values_file_path: The values/parameters file path relative to the source context. + :type values_file_path: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'task_file_path': {'key': 'taskFilePath', 'type': 'str'}, + 'values_file_path': {'key': 'valuesFilePath', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + } + + def __init__( + self, + **kwargs + ): + super(FileTaskStepUpdateParameters, self).__init__(**kwargs) + self.type = 'FileTask' # type: str + self.task_file_path = kwargs.get('task_file_path', None) + self.values_file_path = kwargs.get('values_file_path', None) + self.values = kwargs.get('values', None) + + +class GenerateCredentialsParameters(msrest.serialization.Model): + """The parameters used to generate credentials for a specified token or user of a container registry. + + :param token_id: The resource ID of the token for which credentials have to be generated. + :type token_id: str + :param expiry: The expiry date of the generated credentials after which the credentials become + invalid. + :type expiry: ~datetime.datetime + :param name: Specifies name of the password which should be regenerated if any -- password1 or + password2. Possible values include: "password1", "password2". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenPasswordName + """ + + _attribute_map = { + 'token_id': {'key': 'tokenId', 'type': 'str'}, + 'expiry': {'key': 'expiry', 'type': 'iso-8601'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(GenerateCredentialsParameters, self).__init__(**kwargs) + self.token_id = kwargs.get('token_id', None) + self.expiry = kwargs.get('expiry', None) + self.name = kwargs.get('name', None) + + +class GenerateCredentialsResult(msrest.serialization.Model): + """The response from the GenerateCredentials operation. + + :param username: The username for a container registry. + :type username: str + :param passwords: The list of passwords for a container registry. + :type passwords: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenPassword] + """ + + _attribute_map = { + 'username': {'key': 'username', 'type': 'str'}, + 'passwords': {'key': 'passwords', 'type': '[TokenPassword]'}, + } + + def __init__( + self, + **kwargs + ): + super(GenerateCredentialsResult, self).__init__(**kwargs) + self.username = kwargs.get('username', None) + self.passwords = kwargs.get('passwords', None) + + +class IdentityProperties(msrest.serialization.Model): + """Managed identity for the resource. + + :param principal_id: The principal ID of resource identity. + :type principal_id: str + :param tenant_id: The tenant ID of resource. + :type tenant_id: str + :param type: The identity type. Possible values include: "SystemAssigned", "UserAssigned", + "SystemAssigned, UserAssigned", "None". + :type type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ResourceIdentityType + :param user_assigned_identities: The list of user identities associated with the resource. The + user identity + dictionary key references will be ARM resource ids in the form: + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/ + providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. + :type user_assigned_identities: dict[str, + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.UserIdentityProperties] + """ + + _attribute_map = { + 'principal_id': {'key': 'principalId', 'type': 'str'}, + 'tenant_id': {'key': 'tenantId', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserIdentityProperties}'}, + } + + def __init__( + self, + **kwargs + ): + super(IdentityProperties, self).__init__(**kwargs) + self.principal_id = kwargs.get('principal_id', None) + self.tenant_id = kwargs.get('tenant_id', None) + self.type = kwargs.get('type', None) + self.user_assigned_identities = kwargs.get('user_assigned_identities', None) + + +class ImageDescriptor(msrest.serialization.Model): + """Properties for a registry image. + + :param registry: The registry login server. + :type registry: str + :param repository: The repository name. + :type repository: str + :param tag: The tag name. + :type tag: str + :param digest: The sha256-based digest of the image manifest. + :type digest: str + """ + + _attribute_map = { + 'registry': {'key': 'registry', 'type': 'str'}, + 'repository': {'key': 'repository', 'type': 'str'}, + 'tag': {'key': 'tag', 'type': 'str'}, + 'digest': {'key': 'digest', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ImageDescriptor, self).__init__(**kwargs) + self.registry = kwargs.get('registry', None) + self.repository = kwargs.get('repository', None) + self.tag = kwargs.get('tag', None) + self.digest = kwargs.get('digest', None) + + +class ImageUpdateTrigger(msrest.serialization.Model): + """The image update trigger that caused a build. + + :param id: The unique ID of the trigger. + :type id: str + :param timestamp: The timestamp when the image update happened. + :type timestamp: ~datetime.datetime + :param images: The list of image updates that caused the build. + :type images: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImageDescriptor] + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'timestamp': {'key': 'timestamp', 'type': 'iso-8601'}, + 'images': {'key': 'images', 'type': '[ImageDescriptor]'}, + } + + def __init__( + self, + **kwargs + ): + super(ImageUpdateTrigger, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + self.timestamp = kwargs.get('timestamp', None) + self.images = kwargs.get('images', None) + + +class ImportImageParameters(msrest.serialization.Model): + """ImportImageParameters. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The source of the image. + :type source: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportSource + :param target_tags: List of strings of the form repo[:tag]. When tag is omitted the source will + be used (or 'latest' if source tag is also omitted). + :type target_tags: list[str] + :param untagged_target_repositories: List of strings of repository names to do a manifest only + copy. No tag will be created. + :type untagged_target_repositories: list[str] + :param mode: When Force, any existing target tags will be overwritten. When NoForce, any + existing target tags will fail the operation before any copying begins. Possible values + include: "NoForce", "Force". Default value: "NoForce". + :type mode: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportMode + """ + + _validation = { + 'source': {'required': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'ImportSource'}, + 'target_tags': {'key': 'targetTags', 'type': '[str]'}, + 'untagged_target_repositories': {'key': 'untaggedTargetRepositories', 'type': '[str]'}, + 'mode': {'key': 'mode', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ImportImageParameters, self).__init__(**kwargs) + self.source = kwargs['source'] + self.target_tags = kwargs.get('target_tags', None) + self.untagged_target_repositories = kwargs.get('untagged_target_repositories', None) + self.mode = kwargs.get('mode', "NoForce") + + +class ImportPipeline(ProxyResource): + """An object that represents an import pipeline for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: The location of the import pipeline. + :type location: str + :param identity: The identity of the import pipeline. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param source: The source properties of the import pipeline. + :type source: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipelineSourceProperties + :param trigger: The properties that describe the trigger of the import pipeline. + :type trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineTriggerProperties + :param options: The list of all options configured for the pipeline. + :type options: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineOptions] + :ivar provisioning_state: The provisioning state of the pipeline at the time the operation was + called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", + "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'source': {'key': 'properties.source', 'type': 'ImportPipelineSourceProperties'}, + 'trigger': {'key': 'properties.trigger', 'type': 'PipelineTriggerProperties'}, + 'options': {'key': 'properties.options', 'type': '[str]'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ImportPipeline, self).__init__(**kwargs) + self.location = kwargs.get('location', None) + self.identity = kwargs.get('identity', None) + self.source = kwargs.get('source', None) + self.trigger = kwargs.get('trigger', None) + self.options = kwargs.get('options', None) + self.provisioning_state = None + + +class ImportPipelineListResult(msrest.serialization.Model): + """The result of a request to list import pipelines for a container registry. + + :param value: The list of import pipelines. Since this list may be incomplete, the nextLink + field should be used to request the next list of import pipelines. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipeline] + :param next_link: The URI that can be used to request the next list of pipeline runs. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ImportPipeline]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ImportPipelineListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class ImportPipelineSourceProperties(msrest.serialization.Model): + """The properties of the import pipeline source. + + All required parameters must be populated in order to send to Azure. + + :param type: The type of source for the import pipeline. Possible values include: + "AzureStorageBlobContainer". Default value: "AzureStorageBlobContainer". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineSourceType + :param uri: The source uri of the import pipeline. + When 'AzureStorageBlob': "https://accountName.blob.core.windows.net/containerName/blobName" + When 'AzureStorageBlobContainer': "https://accountName.blob.core.windows.net/containerName". + :type uri: str + :param key_vault_uri: Required. They key vault secret uri to obtain the source storage SAS + token. + :type key_vault_uri: str + """ + + _validation = { + 'key_vault_uri': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'uri': {'key': 'uri', 'type': 'str'}, + 'key_vault_uri': {'key': 'keyVaultUri', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ImportPipelineSourceProperties, self).__init__(**kwargs) + self.type = kwargs.get('type', "AzureStorageBlobContainer") + self.uri = kwargs.get('uri', None) + self.key_vault_uri = kwargs['key_vault_uri'] + + +class ImportSource(msrest.serialization.Model): + """ImportSource. + + All required parameters must be populated in order to send to Azure. + + :param resource_id: The resource identifier of the source Azure Container Registry. + :type resource_id: str + :param registry_uri: The address of the source registry (e.g. 'mcr.microsoft.com'). + :type registry_uri: str + :param credentials: Credentials used when importing from a registry uri. + :type credentials: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportSourceCredentials + :param source_image: Required. Repository name of the source image. + Specify an image by repository ('hello-world'). This will use the 'latest' tag. + Specify an image by tag ('hello-world:latest'). + Specify an image by sha256-based manifest digest ('hello-world@sha256:abc123'). + :type source_image: str + """ + + _validation = { + 'source_image': {'required': True}, + } + + _attribute_map = { + 'resource_id': {'key': 'resourceId', 'type': 'str'}, + 'registry_uri': {'key': 'registryUri', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'ImportSourceCredentials'}, + 'source_image': {'key': 'sourceImage', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ImportSource, self).__init__(**kwargs) + self.resource_id = kwargs.get('resource_id', None) + self.registry_uri = kwargs.get('registry_uri', None) + self.credentials = kwargs.get('credentials', None) + self.source_image = kwargs['source_image'] + + +class ImportSourceCredentials(msrest.serialization.Model): + """ImportSourceCredentials. + + All required parameters must be populated in order to send to Azure. + + :param username: The username to authenticate with the source registry. + :type username: str + :param password: Required. The password used to authenticate with the source registry. + :type password: str + """ + + _validation = { + 'password': {'required': True}, + } + + _attribute_map = { + 'username': {'key': 'username', 'type': 'str'}, + 'password': {'key': 'password', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ImportSourceCredentials, self).__init__(**kwargs) + self.username = kwargs.get('username', None) + self.password = kwargs['password'] + + +class InnerErrorDescription(msrest.serialization.Model): + """inner error. + + All required parameters must be populated in order to send to Azure. + + :param code: Required. error code. + :type code: str + :param message: Required. error message. + :type message: str + :param target: target of the particular error. + :type target: str + """ + + _validation = { + 'code': {'required': True}, + 'message': {'required': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(InnerErrorDescription, self).__init__(**kwargs) + self.code = kwargs['code'] + self.message = kwargs['message'] + self.target = kwargs.get('target', None) + + +class IPRule(msrest.serialization.Model): + """IP rule with specific IP or IP range in CIDR format. + + All required parameters must be populated in order to send to Azure. + + :param action: The action of IP ACL rule. Possible values include: "Allow". + :type action: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Action + :param ip_address_or_range: Required. Specifies the IP or IP range in CIDR format. Only IPV4 + address is allowed. + :type ip_address_or_range: str + """ + + _validation = { + 'ip_address_or_range': {'required': True}, + } + + _attribute_map = { + 'action': {'key': 'action', 'type': 'str'}, + 'ip_address_or_range': {'key': 'value', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IPRule, self).__init__(**kwargs) + self.action = kwargs.get('action', None) + self.ip_address_or_range = kwargs['ip_address_or_range'] + + +class KeyVaultProperties(msrest.serialization.Model): + """KeyVaultProperties. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param key_identifier: Key vault uri to access the encryption key. + :type key_identifier: str + :ivar versioned_key_identifier: The fully qualified key identifier that includes the version of + the key that is actually used for encryption. + :vartype versioned_key_identifier: str + :param identity: The client id of the identity which will be used to access key vault. + :type identity: str + """ + + _validation = { + 'versioned_key_identifier': {'readonly': True}, + } + + _attribute_map = { + 'key_identifier': {'key': 'keyIdentifier', 'type': 'str'}, + 'versioned_key_identifier': {'key': 'versionedKeyIdentifier', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(KeyVaultProperties, self).__init__(**kwargs) + self.key_identifier = kwargs.get('key_identifier', None) + self.versioned_key_identifier = None + self.identity = kwargs.get('identity', None) + + +class NetworkRuleSet(msrest.serialization.Model): + """The network rule set for a container registry. + + All required parameters must be populated in order to send to Azure. + + :param default_action: Required. The default action of allow or deny when no other rules match. + Possible values include: "Allow", "Deny". Default value: "Allow". + :type default_action: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.DefaultAction + :param virtual_network_rules: The virtual network rules. + :type virtual_network_rules: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.VirtualNetworkRule] + :param ip_rules: The IP ACL rules. + :type ip_rules: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.IPRule] + """ + + _validation = { + 'default_action': {'required': True}, + } + + _attribute_map = { + 'default_action': {'key': 'defaultAction', 'type': 'str'}, + 'virtual_network_rules': {'key': 'virtualNetworkRules', 'type': '[VirtualNetworkRule]'}, + 'ip_rules': {'key': 'ipRules', 'type': '[IPRule]'}, + } + + def __init__( + self, + **kwargs + ): + super(NetworkRuleSet, self).__init__(**kwargs) + self.default_action = kwargs.get('default_action', "Allow") + self.virtual_network_rules = kwargs.get('virtual_network_rules', None) + self.ip_rules = kwargs.get('ip_rules', None) + + +class OperationDefinition(msrest.serialization.Model): + """The definition of a container registry operation. + + :param origin: The origin information of the container registry operation. + :type origin: str + :param name: Operation name: {provider}/{resource}/{operation}. + :type name: str + :param display: The display information for the container registry operation. + :type display: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationDisplayDefinition + :param service_specification: The definition of Azure Monitoring service. + :type service_specification: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationServiceSpecificationDefinition + """ + + _attribute_map = { + 'origin': {'key': 'origin', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'display': {'key': 'display', 'type': 'OperationDisplayDefinition'}, + 'service_specification': {'key': 'properties.serviceSpecification', 'type': 'OperationServiceSpecificationDefinition'}, + } + + def __init__( + self, + **kwargs + ): + super(OperationDefinition, self).__init__(**kwargs) + self.origin = kwargs.get('origin', None) + self.name = kwargs.get('name', None) + self.display = kwargs.get('display', None) + self.service_specification = kwargs.get('service_specification', None) + + +class OperationDisplayDefinition(msrest.serialization.Model): + """The display information for a container registry operation. + + :param provider: The resource provider name: Microsoft.ContainerRegistry. + :type provider: str + :param resource: The resource on which the operation is performed. + :type resource: str + :param operation: The operation that users can perform. + :type operation: str + :param description: The description for the operation. + :type description: str + """ + + _attribute_map = { + 'provider': {'key': 'provider', 'type': 'str'}, + 'resource': {'key': 'resource', 'type': 'str'}, + 'operation': {'key': 'operation', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OperationDisplayDefinition, self).__init__(**kwargs) + self.provider = kwargs.get('provider', None) + self.resource = kwargs.get('resource', None) + self.operation = kwargs.get('operation', None) + self.description = kwargs.get('description', None) + + +class OperationListResult(msrest.serialization.Model): + """The result of a request to list container registry operations. + + :param value: The list of container registry operations. Since this list may be incomplete, the + nextLink field should be used to request the next list of operations. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationDefinition] + :param next_link: The URI that can be used to request the next list of container registry + operations. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OperationDefinition]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OperationListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class OperationMetricSpecificationDefinition(msrest.serialization.Model): + """The definition of Azure Monitoring metric. + + :param name: Metric name. + :type name: str + :param display_name: Metric display name. + :type display_name: str + :param display_description: Metric description. + :type display_description: str + :param unit: Metric unit. + :type unit: str + :param aggregation_type: Metric aggregation type. + :type aggregation_type: str + :param internal_metric_name: Internal metric name. + :type internal_metric_name: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'display_description': {'key': 'displayDescription', 'type': 'str'}, + 'unit': {'key': 'unit', 'type': 'str'}, + 'aggregation_type': {'key': 'aggregationType', 'type': 'str'}, + 'internal_metric_name': {'key': 'internalMetricName', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OperationMetricSpecificationDefinition, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.display_name = kwargs.get('display_name', None) + self.display_description = kwargs.get('display_description', None) + self.unit = kwargs.get('unit', None) + self.aggregation_type = kwargs.get('aggregation_type', None) + self.internal_metric_name = kwargs.get('internal_metric_name', None) + + +class OperationServiceSpecificationDefinition(msrest.serialization.Model): + """The definition of Azure Monitoring list. + + :param metric_specifications: A list of Azure Monitoring metrics definition. + :type metric_specifications: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationMetricSpecificationDefinition] + """ + + _attribute_map = { + 'metric_specifications': {'key': 'metricSpecifications', 'type': '[OperationMetricSpecificationDefinition]'}, + } + + def __init__( + self, + **kwargs + ): + super(OperationServiceSpecificationDefinition, self).__init__(**kwargs) + self.metric_specifications = kwargs.get('metric_specifications', None) + + +class OverrideTaskStepProperties(msrest.serialization.Model): + """OverrideTaskStepProperties. + + :param context_path: The source context against which run has to be queued. + :type context_path: str + :param file: The file against which run has to be queued. + :type file: str + :param arguments: Gets or sets the collection of override arguments to be used when + executing a build step. + :type arguments: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Argument] + :param target: The name of the target build stage for the docker build. + :type target: str + :param values: The collection of overridable values that can be passed when running a Task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + :param update_trigger_token: Base64 encoded update trigger token that will be attached with the + base image trigger webhook. + :type update_trigger_token: str + """ + + _attribute_map = { + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'file': {'key': 'file', 'type': 'str'}, + 'arguments': {'key': 'arguments', 'type': '[Argument]'}, + 'target': {'key': 'target', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + 'update_trigger_token': {'key': 'updateTriggerToken', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OverrideTaskStepProperties, self).__init__(**kwargs) + self.context_path = kwargs.get('context_path', None) + self.file = kwargs.get('file', None) + self.arguments = kwargs.get('arguments', None) + self.target = kwargs.get('target', None) + self.values = kwargs.get('values', None) + self.update_trigger_token = kwargs.get('update_trigger_token', None) + + +class PipelineRun(ProxyResource): + """An object that represents a pipeline run for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :ivar provisioning_state: The provisioning state of a pipeline run. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param request: The request parameters for a pipeline run. + :type request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunRequest + :ivar response: The response of a pipeline run. + :vartype response: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunResponse + :param force_update_tag: How the pipeline run should be forced to recreate even if the pipeline + run configuration has not changed. + :type force_update_tag: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'response': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'request': {'key': 'properties.request', 'type': 'PipelineRunRequest'}, + 'response': {'key': 'properties.response', 'type': 'PipelineRunResponse'}, + 'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineRun, self).__init__(**kwargs) + self.provisioning_state = None + self.request = kwargs.get('request', None) + self.response = None + self.force_update_tag = kwargs.get('force_update_tag', None) + + +class PipelineRunListResult(msrest.serialization.Model): + """The result of a request to list pipeline runs for a container registry. + + :param value: The list of pipeline runs. Since this list may be incomplete, the nextLink field + should be used to request the next list of pipeline runs. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRun] + :param next_link: The URI that can be used to request the next list of pipeline runs. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[PipelineRun]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineRunListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class PipelineRunRequest(msrest.serialization.Model): + """The request properties provided for a pipeline run. + + :param pipeline_resource_id: The resource ID of the pipeline to run. + :type pipeline_resource_id: str + :param artifacts: List of source artifacts to be transferred by the pipeline. + Specify an image by repository ('hello-world'). This will use the 'latest' tag. + Specify an image by tag ('hello-world:latest'). + Specify an image by sha256-based manifest digest ('hello-world@sha256:abc123'). + :type artifacts: list[str] + :param source: The source properties of the pipeline run. + :type source: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunSourceProperties + :param target: The target properties of the pipeline run. + :type target: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunTargetProperties + :param catalog_digest: The digest of the tar used to transfer the artifacts. + :type catalog_digest: str + """ + + _attribute_map = { + 'pipeline_resource_id': {'key': 'pipelineResourceId', 'type': 'str'}, + 'artifacts': {'key': 'artifacts', 'type': '[str]'}, + 'source': {'key': 'source', 'type': 'PipelineRunSourceProperties'}, + 'target': {'key': 'target', 'type': 'PipelineRunTargetProperties'}, + 'catalog_digest': {'key': 'catalogDigest', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineRunRequest, self).__init__(**kwargs) + self.pipeline_resource_id = kwargs.get('pipeline_resource_id', None) + self.artifacts = kwargs.get('artifacts', None) + self.source = kwargs.get('source', None) + self.target = kwargs.get('target', None) + self.catalog_digest = kwargs.get('catalog_digest', None) + + +class PipelineRunResponse(msrest.serialization.Model): + """The response properties returned for a pipeline run. + + :param status: The current status of the pipeline run. + :type status: str + :param imported_artifacts: The artifacts imported in the pipeline run. + :type imported_artifacts: list[str] + :param progress: The current progress of the copy operation. + :type progress: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProgressProperties + :param start_time: The time the pipeline run started. + :type start_time: ~datetime.datetime + :param finish_time: The time the pipeline run finished. + :type finish_time: ~datetime.datetime + :param source: The source of the pipeline run. + :type source: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipelineSourceProperties + :param target: The target of the pipeline run. + :type target: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipelineTargetProperties + :param catalog_digest: The digest of the tar used to transfer the artifacts. + :type catalog_digest: str + :param trigger: The trigger that caused the pipeline run. + :type trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineTriggerDescriptor + :param pipeline_run_error_message: The detailed error message for the pipeline run in the case + of failure. + :type pipeline_run_error_message: str + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'imported_artifacts': {'key': 'importedArtifacts', 'type': '[str]'}, + 'progress': {'key': 'progress', 'type': 'ProgressProperties'}, + 'start_time': {'key': 'startTime', 'type': 'iso-8601'}, + 'finish_time': {'key': 'finishTime', 'type': 'iso-8601'}, + 'source': {'key': 'source', 'type': 'ImportPipelineSourceProperties'}, + 'target': {'key': 'target', 'type': 'ExportPipelineTargetProperties'}, + 'catalog_digest': {'key': 'catalogDigest', 'type': 'str'}, + 'trigger': {'key': 'trigger', 'type': 'PipelineTriggerDescriptor'}, + 'pipeline_run_error_message': {'key': 'pipelineRunErrorMessage', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineRunResponse, self).__init__(**kwargs) + self.status = kwargs.get('status', None) + self.imported_artifacts = kwargs.get('imported_artifacts', None) + self.progress = kwargs.get('progress', None) + self.start_time = kwargs.get('start_time', None) + self.finish_time = kwargs.get('finish_time', None) + self.source = kwargs.get('source', None) + self.target = kwargs.get('target', None) + self.catalog_digest = kwargs.get('catalog_digest', None) + self.trigger = kwargs.get('trigger', None) + self.pipeline_run_error_message = kwargs.get('pipeline_run_error_message', None) + + +class PipelineRunSourceProperties(msrest.serialization.Model): + """PipelineRunSourceProperties. + + :param type: The type of the source. Possible values include: "AzureStorageBlob". Default + value: "AzureStorageBlob". + :type type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunSourceType + :param name: The name of the source. + :type name: str + """ + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineRunSourceProperties, self).__init__(**kwargs) + self.type = kwargs.get('type', "AzureStorageBlob") + self.name = kwargs.get('name', None) + + +class PipelineRunTargetProperties(msrest.serialization.Model): + """PipelineRunTargetProperties. + + :param type: The type of the target. Possible values include: "AzureStorageBlob". Default + value: "AzureStorageBlob". + :type type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunTargetType + :param name: The name of the target. + :type name: str + """ + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineRunTargetProperties, self).__init__(**kwargs) + self.type = kwargs.get('type', "AzureStorageBlob") + self.name = kwargs.get('name', None) + + +class PipelineSourceTriggerDescriptor(msrest.serialization.Model): + """PipelineSourceTriggerDescriptor. + + :param timestamp: The timestamp when the source update happened. + :type timestamp: ~datetime.datetime + """ + + _attribute_map = { + 'timestamp': {'key': 'timestamp', 'type': 'iso-8601'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineSourceTriggerDescriptor, self).__init__(**kwargs) + self.timestamp = kwargs.get('timestamp', None) + + +class PipelineSourceTriggerProperties(msrest.serialization.Model): + """PipelineSourceTriggerProperties. + + All required parameters must be populated in order to send to Azure. + + :param status: Required. The current status of the source trigger. Possible values include: + "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + """ + + _validation = { + 'status': {'required': True}, + } + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineSourceTriggerProperties, self).__init__(**kwargs) + self.status = kwargs['status'] + + +class PipelineTriggerDescriptor(msrest.serialization.Model): + """PipelineTriggerDescriptor. + + :param source_trigger: The source trigger that caused the pipeline run. + :type source_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineSourceTriggerDescriptor + """ + + _attribute_map = { + 'source_trigger': {'key': 'sourceTrigger', 'type': 'PipelineSourceTriggerDescriptor'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineTriggerDescriptor, self).__init__(**kwargs) + self.source_trigger = kwargs.get('source_trigger', None) + + +class PipelineTriggerProperties(msrest.serialization.Model): + """PipelineTriggerProperties. + + :param source_trigger: The source trigger properties of the pipeline. + :type source_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineSourceTriggerProperties + """ + + _attribute_map = { + 'source_trigger': {'key': 'sourceTrigger', 'type': 'PipelineSourceTriggerProperties'}, + } + + def __init__( + self, + **kwargs + ): + super(PipelineTriggerProperties, self).__init__(**kwargs) + self.source_trigger = kwargs.get('source_trigger', None) + + +class PlatformProperties(msrest.serialization.Model): + """The platform properties against which the run has to happen. + + All required parameters must be populated in order to send to Azure. + + :param os: Required. The operating system type required for the run. Possible values include: + "Windows", "Linux". + :type os: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OS + :param architecture: The OS architecture. Possible values include: "amd64", "x86", "386", + "arm", "arm64". + :type architecture: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Architecture + :param variant: Variant of the CPU. Possible values include: "v6", "v7", "v8". + :type variant: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Variant + """ + + _validation = { + 'os': {'required': True}, + } + + _attribute_map = { + 'os': {'key': 'os', 'type': 'str'}, + 'architecture': {'key': 'architecture', 'type': 'str'}, + 'variant': {'key': 'variant', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PlatformProperties, self).__init__(**kwargs) + self.os = kwargs['os'] + self.architecture = kwargs.get('architecture', None) + self.variant = kwargs.get('variant', None) + + +class PlatformUpdateParameters(msrest.serialization.Model): + """The properties for updating the platform configuration. + + :param os: The operating system type required for the run. Possible values include: "Windows", + "Linux". + :type os: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OS + :param architecture: The OS architecture. Possible values include: "amd64", "x86", "386", + "arm", "arm64". + :type architecture: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Architecture + :param variant: Variant of the CPU. Possible values include: "v6", "v7", "v8". + :type variant: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Variant + """ + + _attribute_map = { + 'os': {'key': 'os', 'type': 'str'}, + 'architecture': {'key': 'architecture', 'type': 'str'}, + 'variant': {'key': 'variant', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PlatformUpdateParameters, self).__init__(**kwargs) + self.os = kwargs.get('os', None) + self.architecture = kwargs.get('architecture', None) + self.variant = kwargs.get('variant', None) + + +class Policies(msrest.serialization.Model): + """The policies for a container registry. + + :param quarantine_policy: The quarantine policy for a container registry. + :type quarantine_policy: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.QuarantinePolicy + :param trust_policy: The content trust policy for a container registry. + :type trust_policy: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TrustPolicy + :param retention_policy: The retention policy for a container registry. + :type retention_policy: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RetentionPolicy + """ + + _attribute_map = { + 'quarantine_policy': {'key': 'quarantinePolicy', 'type': 'QuarantinePolicy'}, + 'trust_policy': {'key': 'trustPolicy', 'type': 'TrustPolicy'}, + 'retention_policy': {'key': 'retentionPolicy', 'type': 'RetentionPolicy'}, + } + + def __init__( + self, + **kwargs + ): + super(Policies, self).__init__(**kwargs) + self.quarantine_policy = kwargs.get('quarantine_policy', None) + self.trust_policy = kwargs.get('trust_policy', None) + self.retention_policy = kwargs.get('retention_policy', None) + + +class PrivateEndpoint(msrest.serialization.Model): + """The Private Endpoint resource. + + :param id: This is private endpoint resource created with Microsoft.Network resource provider. + :type id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PrivateEndpoint, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + + +class PrivateEndpointConnection(ProxyResource): + """An object that represents a private endpoint connection for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param private_endpoint: The resource of private endpoint. + :type private_endpoint: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpoint + :param private_link_service_connection_state: A collection of information about the state of + the connection between service consumer and provider. + :type private_link_service_connection_state: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateLinkServiceConnectionState + :ivar provisioning_state: The provisioning state of private endpoint connection resource. + Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpoint'}, + 'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'PrivateLinkServiceConnectionState'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PrivateEndpointConnection, self).__init__(**kwargs) + self.private_endpoint = kwargs.get('private_endpoint', None) + self.private_link_service_connection_state = kwargs.get('private_link_service_connection_state', None) + self.provisioning_state = None + + +class PrivateEndpointConnectionListResult(msrest.serialization.Model): + """The result of a request to list private endpoint connections for a container registry. + + :param value: The list of private endpoint connections. Since this list may be incomplete, the + nextLink field should be used to request the next list of private endpoint connections. + :type value: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection] + :param next_link: The URI that can be used to request the next list of private endpoint + connections. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[PrivateEndpointConnection]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PrivateEndpointConnectionListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class PrivateLinkResource(msrest.serialization.Model): + """A resource that supports private link capabilities. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar type: The resource type is private link resource. + :vartype type: str + :param id: The resource ID. + :type id: str + :param name: The name of the resource. + :type name: str + :param group_id: The private link resource group id. + :type group_id: str + :param required_members: The private link resource required member names. + :type required_members: list[str] + :param required_zone_names: The private link resource Private link DNS zone name. + :type required_zone_names: list[str] + """ + + _validation = { + 'type': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'group_id': {'key': 'properties.groupId', 'type': 'str'}, + 'required_members': {'key': 'properties.requiredMembers', 'type': '[str]'}, + 'required_zone_names': {'key': 'properties.requiredZoneNames', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(PrivateLinkResource, self).__init__(**kwargs) + self.type = None + self.id = kwargs.get('id', None) + self.name = kwargs.get('name', None) + self.group_id = kwargs.get('group_id', None) + self.required_members = kwargs.get('required_members', None) + self.required_zone_names = kwargs.get('required_zone_names', None) + + +class PrivateLinkResourceListResult(msrest.serialization.Model): + """The result of a request to list private link resources for a container registry. + + :param value: The list of private link resources. Since this list may be incomplete, the + nextLink field should be used to request the next list of private link resources. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateLinkResource] + :param next_link: The URI that can be used to request the next list of private link resources. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[PrivateLinkResource]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PrivateLinkResourceListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class PrivateLinkServiceConnectionState(msrest.serialization.Model): + """The state of a private link service connection. + + :param status: The private link service connection status. Possible values include: "Approved", + "Pending", "Rejected", "Disconnected". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ConnectionStatus + :param description: The description for connection status. For example if connection is + rejected it can indicate reason for rejection. + :type description: str + :param actions_required: A message indicating if changes on the service provider require any + updates on the consumer. Possible values include: "None", "Recreate". + :type actions_required: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ActionsRequired + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'actions_required': {'key': 'actionsRequired', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PrivateLinkServiceConnectionState, self).__init__(**kwargs) + self.status = kwargs.get('status', None) + self.description = kwargs.get('description', None) + self.actions_required = kwargs.get('actions_required', None) + + +class ProgressProperties(msrest.serialization.Model): + """ProgressProperties. + + :param percentage: The percentage complete of the copy operation. + :type percentage: str + """ + + _attribute_map = { + 'percentage': {'key': 'percentage', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ProgressProperties, self).__init__(**kwargs) + self.percentage = kwargs.get('percentage', None) + + +class QuarantinePolicy(msrest.serialization.Model): + """The quarantine policy for a container registry. + + :param status: The value that indicates whether the policy is enabled or not. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PolicyStatus + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(QuarantinePolicy, self).__init__(**kwargs) + self.status = kwargs.get('status', None) + + +class RegenerateCredentialParameters(msrest.serialization.Model): + """The parameters used to regenerate the login credential. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. Specifies name of the password which should be regenerated -- password + or password2. Possible values include: "password", "password2". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PasswordName + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RegenerateCredentialParameters, self).__init__(**kwargs) + self.name = kwargs['name'] + + +class Registry(Resource): + """An object that represents a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :param sku: Required. The SKU of the container registry. + :type sku: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Sku + :param identity: The identity of the container registry. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :ivar login_server: The URL that can be used to log into the container registry. + :vartype login_server: str + :ivar creation_date: The creation date of the container registry in ISO8601 format. + :vartype creation_date: ~datetime.datetime + :ivar provisioning_state: The provisioning state of the container registry at the time the + operation was called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", + "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :ivar status: The status of the container registry at the time the operation was called. + :vartype status: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Status + :param admin_user_enabled: The value that indicates whether the admin user is enabled. + :type admin_user_enabled: bool + :param storage_account: The properties of the storage account for the container registry. Only + applicable to Classic SKU. + :type storage_account: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StorageAccountProperties + :param network_rule_set: The network rule set for a container registry. + :type network_rule_set: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.NetworkRuleSet + :param policies: The policies for a container registry. + :type policies: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Policies + :param encryption: The encryption settings of container registry. + :type encryption: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EncryptionProperty + :param data_endpoint_enabled: Enable a single data endpoint per region for serving data. + :type data_endpoint_enabled: bool + :ivar data_endpoint_host_names: List of host names that will serve data when + dataEndpointEnabled is true. + :vartype data_endpoint_host_names: list[str] + :ivar private_endpoint_connections: List of private endpoint connections for a container + registry. + :vartype private_endpoint_connections: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection] + :param public_network_access: Whether or not public network access is allowed for the container + registry. Possible values include: "Enabled", "Disabled". + :type public_network_access: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PublicNetworkAccess + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'sku': {'required': True}, + 'login_server': {'readonly': True}, + 'creation_date': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'status': {'readonly': True}, + 'data_endpoint_host_names': {'readonly': True}, + 'private_endpoint_connections': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'sku': {'key': 'sku', 'type': 'Sku'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'login_server': {'key': 'properties.loginServer', 'type': 'str'}, + 'creation_date': {'key': 'properties.creationDate', 'type': 'iso-8601'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'Status'}, + 'admin_user_enabled': {'key': 'properties.adminUserEnabled', 'type': 'bool'}, + 'storage_account': {'key': 'properties.storageAccount', 'type': 'StorageAccountProperties'}, + 'network_rule_set': {'key': 'properties.networkRuleSet', 'type': 'NetworkRuleSet'}, + 'policies': {'key': 'properties.policies', 'type': 'Policies'}, + 'encryption': {'key': 'properties.encryption', 'type': 'EncryptionProperty'}, + 'data_endpoint_enabled': {'key': 'properties.dataEndpointEnabled', 'type': 'bool'}, + 'data_endpoint_host_names': {'key': 'properties.dataEndpointHostNames', 'type': '[str]'}, + 'private_endpoint_connections': {'key': 'properties.privateEndpointConnections', 'type': '[PrivateEndpointConnection]'}, + 'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Registry, self).__init__(**kwargs) + self.sku = kwargs['sku'] + self.identity = kwargs.get('identity', None) + self.login_server = None + self.creation_date = None + self.provisioning_state = None + self.status = None + self.admin_user_enabled = kwargs.get('admin_user_enabled', False) + self.storage_account = kwargs.get('storage_account', None) + self.network_rule_set = kwargs.get('network_rule_set', None) + self.policies = kwargs.get('policies', None) + self.encryption = kwargs.get('encryption', None) + self.data_endpoint_enabled = kwargs.get('data_endpoint_enabled', None) + self.data_endpoint_host_names = None + self.private_endpoint_connections = None + self.public_network_access = kwargs.get('public_network_access', None) + + +class RegistryListCredentialsResult(msrest.serialization.Model): + """The response from the ListCredentials operation. + + :param username: The username for a container registry. + :type username: str + :param passwords: The list of passwords for a container registry. + :type passwords: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryPassword] + """ + + _attribute_map = { + 'username': {'key': 'username', 'type': 'str'}, + 'passwords': {'key': 'passwords', 'type': '[RegistryPassword]'}, + } + + def __init__( + self, + **kwargs + ): + super(RegistryListCredentialsResult, self).__init__(**kwargs) + self.username = kwargs.get('username', None) + self.passwords = kwargs.get('passwords', None) + + +class RegistryListResult(msrest.serialization.Model): + """The result of a request to list container registries. + + :param value: The list of container registries. Since this list may be incomplete, the nextLink + field should be used to request the next list of container registries. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry] + :param next_link: The URI that can be used to request the next list of container registries. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Registry]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RegistryListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class RegistryNameCheckRequest(msrest.serialization.Model): + """A request to check whether a container registry name is available. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the container registry. + :type name: str + :ivar type: Required. The resource type of the container registry. This field must be set to + 'Microsoft.ContainerRegistry/registries'. Default value: + "Microsoft.ContainerRegistry/registries". + :vartype type: str + """ + + _validation = { + 'name': {'required': True, 'max_length': 50, 'min_length': 5, 'pattern': r'^[a-zA-Z0-9]*$'}, + 'type': {'required': True, 'constant': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + type = "Microsoft.ContainerRegistry/registries" + + def __init__( + self, + **kwargs + ): + super(RegistryNameCheckRequest, self).__init__(**kwargs) + self.name = kwargs['name'] + + +class RegistryNameStatus(msrest.serialization.Model): + """The result of a request to check the availability of a container registry name. + + :param name_available: The value that indicates whether the name is available. + :type name_available: bool + :param reason: If any, the reason that the name is not available. + :type reason: str + :param message: If any, the error message that provides more detail for the reason that the + name is not available. + :type message: str + """ + + _attribute_map = { + 'name_available': {'key': 'nameAvailable', 'type': 'bool'}, + 'reason': {'key': 'reason', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RegistryNameStatus, self).__init__(**kwargs) + self.name_available = kwargs.get('name_available', None) + self.reason = kwargs.get('reason', None) + self.message = kwargs.get('message', None) + + +class RegistryPassword(msrest.serialization.Model): + """The login password for the container registry. + + :param name: The password name. Possible values include: "password", "password2". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PasswordName + :param value: The password value. + :type value: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RegistryPassword, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.value = kwargs.get('value', None) + + +class RegistryUpdateParameters(msrest.serialization.Model): + """The parameters for updating a container registry. + + :param tags: A set of tags. The tags for the container registry. + :type tags: dict[str, str] + :param sku: The SKU of the container registry. + :type sku: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Sku + :param identity: The identity of the container registry. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param admin_user_enabled: The value that indicates whether the admin user is enabled. + :type admin_user_enabled: bool + :param network_rule_set: The network rule set for a container registry. + :type network_rule_set: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.NetworkRuleSet + :param policies: The policies for a container registry. + :type policies: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Policies + :param encryption: The encryption settings of container registry. + :type encryption: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EncryptionProperty + :param data_endpoint_enabled: Enable a single data endpoint per region for serving data. + :type data_endpoint_enabled: bool + :param public_network_access: Whether or not public network access is allowed for the container + registry. Possible values include: "Enabled", "Disabled". + :type public_network_access: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PublicNetworkAccess + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'sku': {'key': 'sku', 'type': 'Sku'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'admin_user_enabled': {'key': 'properties.adminUserEnabled', 'type': 'bool'}, + 'network_rule_set': {'key': 'properties.networkRuleSet', 'type': 'NetworkRuleSet'}, + 'policies': {'key': 'properties.policies', 'type': 'Policies'}, + 'encryption': {'key': 'properties.encryption', 'type': 'EncryptionProperty'}, + 'data_endpoint_enabled': {'key': 'properties.dataEndpointEnabled', 'type': 'bool'}, + 'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RegistryUpdateParameters, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.sku = kwargs.get('sku', None) + self.identity = kwargs.get('identity', None) + self.admin_user_enabled = kwargs.get('admin_user_enabled', None) + self.network_rule_set = kwargs.get('network_rule_set', None) + self.policies = kwargs.get('policies', None) + self.encryption = kwargs.get('encryption', None) + self.data_endpoint_enabled = kwargs.get('data_endpoint_enabled', None) + self.public_network_access = kwargs.get('public_network_access', None) + + +class RegistryUsage(msrest.serialization.Model): + """The quota usage for a container registry. + + :param name: The name of the usage. + :type name: str + :param limit: The limit of the usage. + :type limit: long + :param current_value: The current value of the usage. + :type current_value: long + :param unit: The unit of measurement. Possible values include: "Count", "Bytes". + :type unit: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryUsageUnit + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'limit': {'key': 'limit', 'type': 'long'}, + 'current_value': {'key': 'currentValue', 'type': 'long'}, + 'unit': {'key': 'unit', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RegistryUsage, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.limit = kwargs.get('limit', None) + self.current_value = kwargs.get('current_value', None) + self.unit = kwargs.get('unit', None) + + +class RegistryUsageListResult(msrest.serialization.Model): + """The result of a request to get container registry quota usages. + + :param value: The list of container registry quota usages. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryUsage] + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[RegistryUsage]'}, + } + + def __init__( + self, + **kwargs + ): + super(RegistryUsageListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + + +class Replication(Resource): + """An object that represents a replication for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :ivar provisioning_state: The provisioning state of the replication at the time the operation + was called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", + "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :ivar status: The status of the replication at the time the operation was called. + :vartype status: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Status + :param region_endpoint_enabled: Specifies whether the replication's regional endpoint is + enabled. Requests will not be routed to a replication whose regional endpoint is disabled, + however its data will continue to be synced with other replications. + :type region_endpoint_enabled: bool + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + 'status': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'Status'}, + 'region_endpoint_enabled': {'key': 'properties.regionEndpointEnabled', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(Replication, self).__init__(**kwargs) + self.provisioning_state = None + self.status = None + self.region_endpoint_enabled = kwargs.get('region_endpoint_enabled', True) + + +class ReplicationListResult(msrest.serialization.Model): + """The result of a request to list replications for a container registry. + + :param value: The list of replications. Since this list may be incomplete, the nextLink field + should be used to request the next list of replications. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication] + :param next_link: The URI that can be used to request the next list of replications. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Replication]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ReplicationListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class ReplicationUpdateParameters(msrest.serialization.Model): + """The parameters for updating a replication. + + :param tags: A set of tags. The tags for the replication. + :type tags: dict[str, str] + :param region_endpoint_enabled: Specifies whether the replication's regional endpoint is + enabled. Requests will not be routed to a replication whose regional endpoint is disabled, + however its data will continue to be synced with other replications. + :type region_endpoint_enabled: bool + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'region_endpoint_enabled': {'key': 'properties.regionEndpointEnabled', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(ReplicationUpdateParameters, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.region_endpoint_enabled = kwargs.get('region_endpoint_enabled', None) + + +class Request(msrest.serialization.Model): + """The request that generated the event. + + :param id: The ID of the request that initiated the event. + :type id: str + :param addr: The IP or hostname and possibly port of the client connection that initiated the + event. This is the RemoteAddr from the standard http request. + :type addr: str + :param host: The externally accessible hostname of the registry instance, as specified by the + http host header on incoming requests. + :type host: str + :param method: The request method that generated the event. + :type method: str + :param useragent: The user agent header of the request. + :type useragent: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'addr': {'key': 'addr', 'type': 'str'}, + 'host': {'key': 'host', 'type': 'str'}, + 'method': {'key': 'method', 'type': 'str'}, + 'useragent': {'key': 'useragent', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Request, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + self.addr = kwargs.get('addr', None) + self.host = kwargs.get('host', None) + self.method = kwargs.get('method', None) + self.useragent = kwargs.get('useragent', None) + + +class RetentionPolicy(msrest.serialization.Model): + """The retention policy for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param days: The number of days to retain an untagged manifest after which it gets purged. + :type days: int + :ivar last_updated_time: The timestamp when the policy was last updated. + :vartype last_updated_time: ~datetime.datetime + :param status: The value that indicates whether the policy is enabled or not. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PolicyStatus + """ + + _validation = { + 'last_updated_time': {'readonly': True}, + } + + _attribute_map = { + 'days': {'key': 'days', 'type': 'int'}, + 'last_updated_time': {'key': 'lastUpdatedTime', 'type': 'iso-8601'}, + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RetentionPolicy, self).__init__(**kwargs) + self.days = kwargs.get('days', 7) + self.last_updated_time = None + self.status = kwargs.get('status', None) + + +class Run(ProxyResource): + """Run resource properties. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param run_id: The unique identifier for the run. + :type run_id: str + :param status: The current status of the run. Possible values include: "Queued", "Started", + "Running", "Succeeded", "Failed", "Canceled", "Error", "Timeout". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunStatus + :param last_updated_time: The last updated time for the run. + :type last_updated_time: ~datetime.datetime + :param run_type: The type of run. Possible values include: "QuickBuild", "QuickRun", + "AutoBuild", "AutoRun". + :type run_type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunType + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param create_time: The time the run was scheduled. + :type create_time: ~datetime.datetime + :param start_time: The time the run started. + :type start_time: ~datetime.datetime + :param finish_time: The time the run finished. + :type finish_time: ~datetime.datetime + :param output_images: The list of all images that were generated from the run. This is + applicable if the run generates base image dependencies. + :type output_images: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImageDescriptor] + :param task: The task against which run was scheduled. + :type task: str + :param image_update_trigger: The image update trigger that caused the run. This is applicable + if the task has base image trigger configured. + :type image_update_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImageUpdateTrigger + :param source_trigger: The source trigger that caused the run. + :type source_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTriggerDescriptor + :param timer_trigger: The timer trigger that caused the run. + :type timer_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TimerTriggerDescriptor + :param platform: The platform properties against which the run will happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param source_registry_auth: The scope of the credentials that were used to login to the source + registry during this run. + :type source_registry_auth: str + :param custom_registries: The list of custom registries that were logged in during this run. + :type custom_registries: list[str] + :ivar run_error_message: The error message received from backend systems after the run is + scheduled. + :vartype run_error_message: str + :param update_trigger_token: The update trigger token passed for the Run. + :type update_trigger_token: str + :param provisioning_state: The provisioning state of a run. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :type provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param is_archive_enabled: The value that indicates whether archiving is enabled or not. + :type is_archive_enabled: bool + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'run_error_message': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'run_id': {'key': 'properties.runId', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'last_updated_time': {'key': 'properties.lastUpdatedTime', 'type': 'iso-8601'}, + 'run_type': {'key': 'properties.runType', 'type': 'str'}, + 'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'}, + 'create_time': {'key': 'properties.createTime', 'type': 'iso-8601'}, + 'start_time': {'key': 'properties.startTime', 'type': 'iso-8601'}, + 'finish_time': {'key': 'properties.finishTime', 'type': 'iso-8601'}, + 'output_images': {'key': 'properties.outputImages', 'type': '[ImageDescriptor]'}, + 'task': {'key': 'properties.task', 'type': 'str'}, + 'image_update_trigger': {'key': 'properties.imageUpdateTrigger', 'type': 'ImageUpdateTrigger'}, + 'source_trigger': {'key': 'properties.sourceTrigger', 'type': 'SourceTriggerDescriptor'}, + 'timer_trigger': {'key': 'properties.timerTrigger', 'type': 'TimerTriggerDescriptor'}, + 'platform': {'key': 'properties.platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'}, + 'source_registry_auth': {'key': 'properties.sourceRegistryAuth', 'type': 'str'}, + 'custom_registries': {'key': 'properties.customRegistries', 'type': '[str]'}, + 'run_error_message': {'key': 'properties.runErrorMessage', 'type': 'str'}, + 'update_trigger_token': {'key': 'properties.updateTriggerToken', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'is_archive_enabled': {'key': 'properties.isArchiveEnabled', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(Run, self).__init__(**kwargs) + self.run_id = kwargs.get('run_id', None) + self.status = kwargs.get('status', None) + self.last_updated_time = kwargs.get('last_updated_time', None) + self.run_type = kwargs.get('run_type', None) + self.agent_pool_name = kwargs.get('agent_pool_name', None) + self.create_time = kwargs.get('create_time', None) + self.start_time = kwargs.get('start_time', None) + self.finish_time = kwargs.get('finish_time', None) + self.output_images = kwargs.get('output_images', None) + self.task = kwargs.get('task', None) + self.image_update_trigger = kwargs.get('image_update_trigger', None) + self.source_trigger = kwargs.get('source_trigger', None) + self.timer_trigger = kwargs.get('timer_trigger', None) + self.platform = kwargs.get('platform', None) + self.agent_configuration = kwargs.get('agent_configuration', None) + self.source_registry_auth = kwargs.get('source_registry_auth', None) + self.custom_registries = kwargs.get('custom_registries', None) + self.run_error_message = None + self.update_trigger_token = kwargs.get('update_trigger_token', None) + self.provisioning_state = kwargs.get('provisioning_state', None) + self.is_archive_enabled = kwargs.get('is_archive_enabled', False) + + +class RunFilter(msrest.serialization.Model): + """Properties that are enabled for Odata querying on runs. + + :param run_id: The unique identifier for the run. + :type run_id: str + :param run_type: The type of run. Possible values include: "QuickBuild", "QuickRun", + "AutoBuild", "AutoRun". + :type run_type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunType + :param status: The current status of the run. Possible values include: "Queued", "Started", + "Running", "Succeeded", "Failed", "Canceled", "Error", "Timeout". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunStatus + :param create_time: The create time for a run. + :type create_time: ~datetime.datetime + :param finish_time: The time the run finished. + :type finish_time: ~datetime.datetime + :param output_image_manifests: The list of comma-separated image manifests that were generated + from the run. This is applicable if the run is of + build type. + :type output_image_manifests: str + :param is_archive_enabled: The value that indicates whether archiving is enabled or not. + :type is_archive_enabled: bool + :param task_name: The name of the task that the run corresponds to. + :type task_name: str + :param agent_pool_name: The name of the agent pool that the run corresponds to. + :type agent_pool_name: str + """ + + _attribute_map = { + 'run_id': {'key': 'runId', 'type': 'str'}, + 'run_type': {'key': 'runType', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'create_time': {'key': 'createTime', 'type': 'iso-8601'}, + 'finish_time': {'key': 'finishTime', 'type': 'iso-8601'}, + 'output_image_manifests': {'key': 'outputImageManifests', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'task_name': {'key': 'taskName', 'type': 'str'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RunFilter, self).__init__(**kwargs) + self.run_id = kwargs.get('run_id', None) + self.run_type = kwargs.get('run_type', None) + self.status = kwargs.get('status', None) + self.create_time = kwargs.get('create_time', None) + self.finish_time = kwargs.get('finish_time', None) + self.output_image_manifests = kwargs.get('output_image_manifests', None) + self.is_archive_enabled = kwargs.get('is_archive_enabled', None) + self.task_name = kwargs.get('task_name', None) + self.agent_pool_name = kwargs.get('agent_pool_name', None) + + +class RunGetLogResult(msrest.serialization.Model): + """The result of get log link operation. + + :param log_link: The link to logs for a run on a azure container registry. + :type log_link: str + :param log_artifact_link: The link to logs in registry for a run on a azure container registry. + :type log_artifact_link: str + """ + + _attribute_map = { + 'log_link': {'key': 'logLink', 'type': 'str'}, + 'log_artifact_link': {'key': 'logArtifactLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RunGetLogResult, self).__init__(**kwargs) + self.log_link = kwargs.get('log_link', None) + self.log_artifact_link = kwargs.get('log_artifact_link', None) + + +class RunListResult(msrest.serialization.Model): + """Collection of runs. + + :param value: The collection value. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run] + :param next_link: The URI that can be used to request the next set of paged results. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Run]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(RunListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class RunUpdateParameters(msrest.serialization.Model): + """The set of run properties that can be updated. + + :param is_archive_enabled: The value that indicates whether archiving is enabled or not. + :type is_archive_enabled: bool + """ + + _attribute_map = { + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(RunUpdateParameters, self).__init__(**kwargs) + self.is_archive_enabled = kwargs.get('is_archive_enabled', None) + + +class ScopeMap(ProxyResource): + """An object that represents a scope map for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param description: The user friendly description of the scope map. + :type description: str + :ivar type_properties_type: The type of the scope map. E.g. BuildIn scope map. + :vartype type_properties_type: str + :ivar creation_date: The creation date of scope map. + :vartype creation_date: ~datetime.datetime + :ivar provisioning_state: Provisioning state of the resource. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param actions: The list of scoped permissions for registry artifacts. + E.g. repositories/repository-name/content/read, + repositories/repository-name/metadata/write. + :type actions: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'type_properties_type': {'readonly': True}, + 'creation_date': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'type_properties_type': {'key': 'properties.type', 'type': 'str'}, + 'creation_date': {'key': 'properties.creationDate', 'type': 'iso-8601'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(ScopeMap, self).__init__(**kwargs) + self.description = kwargs.get('description', None) + self.type_properties_type = None + self.creation_date = None + self.provisioning_state = None + self.actions = kwargs.get('actions', None) + + +class ScopeMapListResult(msrest.serialization.Model): + """The result of a request to list scope maps for a container registry. + + :param value: The list of scope maps. Since this list may be incomplete, the nextLink field + should be used to request the next list of scope maps. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap] + :param next_link: The URI that can be used to request the next list of scope maps. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ScopeMap]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ScopeMapListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class ScopeMapUpdateParameters(msrest.serialization.Model): + """The properties for updating the scope map. + + :param description: The user friendly description of the scope map. + :type description: str + :param actions: The list of scope permissions for registry artifacts. + E.g. repositories/repository-name/pull, + repositories/repository-name/delete. + :type actions: list[str] + """ + + _attribute_map = { + 'description': {'key': 'properties.description', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(ScopeMapUpdateParameters, self).__init__(**kwargs) + self.description = kwargs.get('description', None) + self.actions = kwargs.get('actions', None) + + +class SecretObject(msrest.serialization.Model): + """Describes the properties of a secret object value. + + :param value: The value of the secret. The format of this value will be determined + based on the type of the secret object. If the type is Opaque, the value will be + used as is without any modification. + :type value: str + :param type: The type of the secret object which determines how the value of the secret object + has to be + interpreted. Possible values include: "Opaque", "Vaultsecret". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SecretObjectType + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SecretObject, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.type = kwargs.get('type', None) + + +class SetValue(msrest.serialization.Model): + """The properties of a overridable value that can be passed to a task template. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the overridable value. + :type name: str + :param value: Required. The overridable value. + :type value: str + :param is_secret: Flag to indicate whether the value represents a secret or not. + :type is_secret: bool + """ + + _validation = { + 'name': {'required': True}, + 'value': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'str'}, + 'is_secret': {'key': 'isSecret', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(SetValue, self).__init__(**kwargs) + self.name = kwargs['name'] + self.value = kwargs['value'] + self.is_secret = kwargs.get('is_secret', False) + + +class Sku(msrest.serialization.Model): + """The SKU of a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The SKU name of the container registry. Required for registry creation. + Possible values include: "Classic", "Basic", "Standard", "Premium". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SkuName + :ivar tier: The SKU tier based on the SKU name. Possible values include: "Classic", "Basic", + "Standard", "Premium". + :vartype tier: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SkuTier + """ + + _validation = { + 'name': {'required': True}, + 'tier': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'tier': {'key': 'tier', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Sku, self).__init__(**kwargs) + self.name = kwargs['name'] + self.tier = None + + +class Source(msrest.serialization.Model): + """The registry node that generated the event. Put differently, while the actor initiates the event, the source generates it. + + :param addr: The IP or hostname and the port of the registry node that generated the event. + Generally, this will be resolved by os.Hostname() along with the running port. + :type addr: str + :param instance_id: The running instance of an application. Changes after each restart. + :type instance_id: str + """ + + _attribute_map = { + 'addr': {'key': 'addr', 'type': 'str'}, + 'instance_id': {'key': 'instanceID', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Source, self).__init__(**kwargs) + self.addr = kwargs.get('addr', None) + self.instance_id = kwargs.get('instance_id', None) + + +class SourceProperties(msrest.serialization.Model): + """The properties of the source code repository. + + All required parameters must be populated in order to send to Azure. + + :param source_control_type: Required. The type of source control service. Possible values + include: "Github", "VisualStudioTeamService". + :type source_control_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceControlType + :param repository_url: Required. The full URL to the source code repository. + :type repository_url: str + :param branch: The branch name of the source code. + :type branch: str + :param source_control_auth_properties: The authorization properties for accessing the source + code repository and to set up + webhooks for notifications. + :type source_control_auth_properties: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AuthInfo + """ + + _validation = { + 'source_control_type': {'required': True}, + 'repository_url': {'required': True}, + } + + _attribute_map = { + 'source_control_type': {'key': 'sourceControlType', 'type': 'str'}, + 'repository_url': {'key': 'repositoryUrl', 'type': 'str'}, + 'branch': {'key': 'branch', 'type': 'str'}, + 'source_control_auth_properties': {'key': 'sourceControlAuthProperties', 'type': 'AuthInfo'}, + } + + def __init__( + self, + **kwargs + ): + super(SourceProperties, self).__init__(**kwargs) + self.source_control_type = kwargs['source_control_type'] + self.repository_url = kwargs['repository_url'] + self.branch = kwargs.get('branch', None) + self.source_control_auth_properties = kwargs.get('source_control_auth_properties', None) + + +class SourceRegistryCredentials(msrest.serialization.Model): + """Describes the credential parameters for accessing the source registry. + + :param login_mode: The authentication mode which determines the source registry login scope. + The credentials for the source registry + will be generated using the given scope. These credentials will be used to login to + the source registry during the run. Possible values include: "None", "Default". + :type login_mode: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceRegistryLoginMode + """ + + _attribute_map = { + 'login_mode': {'key': 'loginMode', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SourceRegistryCredentials, self).__init__(**kwargs) + self.login_mode = kwargs.get('login_mode', None) + + +class SourceTrigger(msrest.serialization.Model): + """The properties of a source based trigger. + + All required parameters must be populated in order to send to Azure. + + :param source_repository: Required. The properties that describes the source(code) for the + task. + :type source_repository: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceProperties + :param source_trigger_events: Required. The source event corresponding to the trigger. + :type source_trigger_events: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTriggerEvent] + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'source_repository': {'required': True}, + 'source_trigger_events': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'source_repository': {'key': 'sourceRepository', 'type': 'SourceProperties'}, + 'source_trigger_events': {'key': 'sourceTriggerEvents', 'type': '[str]'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SourceTrigger, self).__init__(**kwargs) + self.source_repository = kwargs['source_repository'] + self.source_trigger_events = kwargs['source_trigger_events'] + self.status = kwargs.get('status', None) + self.name = kwargs['name'] + + +class SourceTriggerDescriptor(msrest.serialization.Model): + """The source trigger that caused a run. + + :param id: The unique ID of the trigger. + :type id: str + :param event_type: The event type of the trigger. + :type event_type: str + :param commit_id: The unique ID that identifies a commit. + :type commit_id: str + :param pull_request_id: The unique ID that identifies pull request. + :type pull_request_id: str + :param repository_url: The repository URL. + :type repository_url: str + :param branch_name: The branch name in the repository. + :type branch_name: str + :param provider_type: The source control provider type. + :type provider_type: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'event_type': {'key': 'eventType', 'type': 'str'}, + 'commit_id': {'key': 'commitId', 'type': 'str'}, + 'pull_request_id': {'key': 'pullRequestId', 'type': 'str'}, + 'repository_url': {'key': 'repositoryUrl', 'type': 'str'}, + 'branch_name': {'key': 'branchName', 'type': 'str'}, + 'provider_type': {'key': 'providerType', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SourceTriggerDescriptor, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + self.event_type = kwargs.get('event_type', None) + self.commit_id = kwargs.get('commit_id', None) + self.pull_request_id = kwargs.get('pull_request_id', None) + self.repository_url = kwargs.get('repository_url', None) + self.branch_name = kwargs.get('branch_name', None) + self.provider_type = kwargs.get('provider_type', None) + + +class SourceTriggerUpdateParameters(msrest.serialization.Model): + """The properties for updating a source based trigger. + + All required parameters must be populated in order to send to Azure. + + :param source_repository: The properties that describes the source(code) for the task. + :type source_repository: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceUpdateParameters + :param source_trigger_events: The source event corresponding to the trigger. + :type source_trigger_events: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTriggerEvent] + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'source_repository': {'key': 'sourceRepository', 'type': 'SourceUpdateParameters'}, + 'source_trigger_events': {'key': 'sourceTriggerEvents', 'type': '[str]'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SourceTriggerUpdateParameters, self).__init__(**kwargs) + self.source_repository = kwargs.get('source_repository', None) + self.source_trigger_events = kwargs.get('source_trigger_events', None) + self.status = kwargs.get('status', None) + self.name = kwargs['name'] + + +class SourceUpdateParameters(msrest.serialization.Model): + """The properties for updating the source code repository. + + :param source_control_type: The type of source control service. Possible values include: + "Github", "VisualStudioTeamService". + :type source_control_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceControlType + :param repository_url: The full URL to the source code repository. + :type repository_url: str + :param branch: The branch name of the source code. + :type branch: str + :param source_control_auth_properties: The authorization properties for accessing the source + code repository and to set up + webhooks for notifications. + :type source_control_auth_properties: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AuthInfoUpdateParameters + """ + + _attribute_map = { + 'source_control_type': {'key': 'sourceControlType', 'type': 'str'}, + 'repository_url': {'key': 'repositoryUrl', 'type': 'str'}, + 'branch': {'key': 'branch', 'type': 'str'}, + 'source_control_auth_properties': {'key': 'sourceControlAuthProperties', 'type': 'AuthInfoUpdateParameters'}, + } + + def __init__( + self, + **kwargs + ): + super(SourceUpdateParameters, self).__init__(**kwargs) + self.source_control_type = kwargs.get('source_control_type', None) + self.repository_url = kwargs.get('repository_url', None) + self.branch = kwargs.get('branch', None) + self.source_control_auth_properties = kwargs.get('source_control_auth_properties', None) + + +class SourceUploadDefinition(msrest.serialization.Model): + """The properties of a response to source upload request. + + :param upload_url: The URL where the client can upload the source. + :type upload_url: str + :param relative_path: The relative path to the source. This is used to submit the subsequent + queue build request. + :type relative_path: str + """ + + _attribute_map = { + 'upload_url': {'key': 'uploadUrl', 'type': 'str'}, + 'relative_path': {'key': 'relativePath', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SourceUploadDefinition, self).__init__(**kwargs) + self.upload_url = kwargs.get('upload_url', None) + self.relative_path = kwargs.get('relative_path', None) + + +class Status(msrest.serialization.Model): + """The status of an Azure resource at the time the operation was called. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar display_status: The short label for the status. + :vartype display_status: str + :ivar message: The detailed message for the status, including alerts and error messages. + :vartype message: str + :ivar timestamp: The timestamp when the status was changed to the current value. + :vartype timestamp: ~datetime.datetime + """ + + _validation = { + 'display_status': {'readonly': True}, + 'message': {'readonly': True}, + 'timestamp': {'readonly': True}, + } + + _attribute_map = { + 'display_status': {'key': 'displayStatus', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'timestamp': {'key': 'timestamp', 'type': 'iso-8601'}, + } + + def __init__( + self, + **kwargs + ): + super(Status, self).__init__(**kwargs) + self.display_status = None + self.message = None + self.timestamp = None + + +class StorageAccountProperties(msrest.serialization.Model): + """The properties of a storage account for a container registry. Only applicable to Classic SKU. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. The resource ID of the storage account. + :type id: str + """ + + _validation = { + 'id': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(StorageAccountProperties, self).__init__(**kwargs) + self.id = kwargs['id'] + + +class Target(msrest.serialization.Model): + """The target of the event. + + :param media_type: The MIME type of the referenced object. + :type media_type: str + :param size: The number of bytes of the content. Same as Length field. + :type size: long + :param digest: The digest of the content, as defined by the Registry V2 HTTP API Specification. + :type digest: str + :param length: The number of bytes of the content. Same as Size field. + :type length: long + :param repository: The repository name. + :type repository: str + :param url: The direct URL to the content. + :type url: str + :param tag: The tag name. + :type tag: str + :param name: The name of the artifact. + :type name: str + :param version: The version of the artifact. + :type version: str + """ + + _attribute_map = { + 'media_type': {'key': 'mediaType', 'type': 'str'}, + 'size': {'key': 'size', 'type': 'long'}, + 'digest': {'key': 'digest', 'type': 'str'}, + 'length': {'key': 'length', 'type': 'long'}, + 'repository': {'key': 'repository', 'type': 'str'}, + 'url': {'key': 'url', 'type': 'str'}, + 'tag': {'key': 'tag', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Target, self).__init__(**kwargs) + self.media_type = kwargs.get('media_type', None) + self.size = kwargs.get('size', None) + self.digest = kwargs.get('digest', None) + self.length = kwargs.get('length', None) + self.repository = kwargs.get('repository', None) + self.url = kwargs.get('url', None) + self.tag = kwargs.get('tag', None) + self.name = kwargs.get('name', None) + self.version = kwargs.get('version', None) + + +class Task(Resource): + """The task that has the ARM resource and task properties. +The task will have all information to schedule a run against it. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :param identity: Identity for the resource. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :ivar provisioning_state: The provisioning state of the task. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :ivar creation_date: The creation date of task. + :vartype creation_date: ~datetime.datetime + :param status: The current status of task. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskStatus + :param platform: The platform properties against which the run has to happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param agent_pool_name: The dedicated agent pool for the task. + :type agent_pool_name: str + :param timeout: Run timeout in seconds. + :type timeout: int + :param step: The properties of a task step. + :type step: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskStepProperties + :param trigger: The properties that describe all triggers for the task. + :type trigger: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerProperties + :param credentials: The properties that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + 'creation_date': {'readonly': True}, + 'timeout': {'maximum': 28800, 'minimum': 300}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'creation_date': {'key': 'properties.creationDate', 'type': 'iso-8601'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'platform': {'key': 'properties.platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'}, + 'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'}, + 'timeout': {'key': 'properties.timeout', 'type': 'int'}, + 'step': {'key': 'properties.step', 'type': 'TaskStepProperties'}, + 'trigger': {'key': 'properties.trigger', 'type': 'TriggerProperties'}, + 'credentials': {'key': 'properties.credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + **kwargs + ): + super(Task, self).__init__(**kwargs) + self.identity = kwargs.get('identity', None) + self.provisioning_state = None + self.creation_date = None + self.status = kwargs.get('status', None) + self.platform = kwargs.get('platform', None) + self.agent_configuration = kwargs.get('agent_configuration', None) + self.agent_pool_name = kwargs.get('agent_pool_name', None) + self.timeout = kwargs.get('timeout', 3600) + self.step = kwargs.get('step', None) + self.trigger = kwargs.get('trigger', None) + self.credentials = kwargs.get('credentials', None) + + +class TaskListResult(msrest.serialization.Model): + """The collection of tasks. + + :param value: The collection value. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task] + :param next_link: The URI that can be used to request the next set of paged results. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Task]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TaskListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class TaskRun(ProxyResource): + """The task run that has the ARM resource and properties. +The task run will have the information of request and result of a run. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param identity: Identity for the resource. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param location: The location of the resource. + :type location: str + :ivar provisioning_state: The provisioning state of this task run. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param run_request: The request (parameters) for the run. + :type run_request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunRequest + :ivar run_result: The result of this task run. + :vartype run_result: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run + :param force_update_tag: How the run should be forced to rerun even if the run request + configuration has not changed. + :type force_update_tag: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'run_result': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'location': {'key': 'location', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'run_request': {'key': 'properties.runRequest', 'type': 'RunRequest'}, + 'run_result': {'key': 'properties.runResult', 'type': 'Run'}, + 'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TaskRun, self).__init__(**kwargs) + self.identity = kwargs.get('identity', None) + self.location = kwargs.get('location', None) + self.provisioning_state = None + self.run_request = kwargs.get('run_request', None) + self.run_result = None + self.force_update_tag = kwargs.get('force_update_tag', None) + + +class TaskRunListResult(msrest.serialization.Model): + """The collection of task runs. + + :param value: The collection value. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun] + :param next_link: The URI that can be used to request the next set of paged results. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[TaskRun]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TaskRunListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class TaskRunRequest(RunRequest): + """The parameters for a task run request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param task_id: Required. The resource ID of task against which run has to be queued. + :type task_id: str + :param override_task_step_properties: Set of overridable parameters that can be passed when + running a Task. + :type override_task_step_properties: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OverrideTaskStepProperties + """ + + _validation = { + 'type': {'required': True}, + 'task_id': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + 'task_id': {'key': 'taskId', 'type': 'str'}, + 'override_task_step_properties': {'key': 'overrideTaskStepProperties', 'type': 'OverrideTaskStepProperties'}, + } + + def __init__( + self, + **kwargs + ): + super(TaskRunRequest, self).__init__(**kwargs) + self.type = 'TaskRunRequest' # type: str + self.task_id = kwargs['task_id'] + self.override_task_step_properties = kwargs.get('override_task_step_properties', None) + + +class TaskRunUpdateParameters(msrest.serialization.Model): + """The parameters for updating a task run. + + :param identity: Identity for the resource. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param location: The location of the resource. + :type location: str + :param tags: A set of tags. The ARM resource tags. + :type tags: dict[str, str] + :param run_request: The request (parameters) for the new run. + :type run_request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunRequest + :param force_update_tag: How the run should be forced to rerun even if the run request + configuration has not changed. + :type force_update_tag: str + """ + + _attribute_map = { + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'run_request': {'key': 'properties.runRequest', 'type': 'RunRequest'}, + 'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TaskRunUpdateParameters, self).__init__(**kwargs) + self.identity = kwargs.get('identity', None) + self.location = kwargs.get('location', None) + self.tags = kwargs.get('tags', None) + self.run_request = kwargs.get('run_request', None) + self.force_update_tag = kwargs.get('force_update_tag', None) + + +class TaskUpdateParameters(msrest.serialization.Model): + """The parameters for updating a task. + + :param identity: Identity for the resource. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param tags: A set of tags. The ARM resource tags. + :type tags: dict[str, str] + :param status: The current status of task. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskStatus + :param platform: The platform properties against which the run has to happen. + :type platform: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformUpdateParameters + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param agent_pool_name: The dedicated agent pool for the task. + :type agent_pool_name: str + :param timeout: Run timeout in seconds. + :type timeout: int + :param step: The properties for updating a task step. + :type step: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskStepUpdateParameters + :param trigger: The properties for updating trigger properties. + :type trigger: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerUpdateParameters + :param credentials: The parameters that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _attribute_map = { + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'platform': {'key': 'properties.platform', 'type': 'PlatformUpdateParameters'}, + 'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'}, + 'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'}, + 'timeout': {'key': 'properties.timeout', 'type': 'int'}, + 'step': {'key': 'properties.step', 'type': 'TaskStepUpdateParameters'}, + 'trigger': {'key': 'properties.trigger', 'type': 'TriggerUpdateParameters'}, + 'credentials': {'key': 'properties.credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + **kwargs + ): + super(TaskUpdateParameters, self).__init__(**kwargs) + self.identity = kwargs.get('identity', None) + self.tags = kwargs.get('tags', None) + self.status = kwargs.get('status', None) + self.platform = kwargs.get('platform', None) + self.agent_configuration = kwargs.get('agent_configuration', None) + self.agent_pool_name = kwargs.get('agent_pool_name', None) + self.timeout = kwargs.get('timeout', None) + self.step = kwargs.get('step', None) + self.trigger = kwargs.get('trigger', None) + self.credentials = kwargs.get('credentials', None) + + +class TimerTrigger(msrest.serialization.Model): + """The properties of a timer trigger. + + All required parameters must be populated in order to send to Azure. + + :param schedule: Required. The CRON expression for the task schedule. + :type schedule: str + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'schedule': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'schedule': {'key': 'schedule', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TimerTrigger, self).__init__(**kwargs) + self.schedule = kwargs['schedule'] + self.status = kwargs.get('status', None) + self.name = kwargs['name'] + + +class TimerTriggerDescriptor(msrest.serialization.Model): + """TimerTriggerDescriptor. + + :param timer_trigger_name: The timer trigger name that caused the run. + :type timer_trigger_name: str + :param schedule_occurrence: The occurrence that triggered the run. + :type schedule_occurrence: str + """ + + _attribute_map = { + 'timer_trigger_name': {'key': 'timerTriggerName', 'type': 'str'}, + 'schedule_occurrence': {'key': 'scheduleOccurrence', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TimerTriggerDescriptor, self).__init__(**kwargs) + self.timer_trigger_name = kwargs.get('timer_trigger_name', None) + self.schedule_occurrence = kwargs.get('schedule_occurrence', None) + + +class TimerTriggerUpdateParameters(msrest.serialization.Model): + """The properties for updating a timer trigger. + + All required parameters must be populated in order to send to Azure. + + :param schedule: The CRON expression for the task schedule. + :type schedule: str + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'schedule': {'key': 'schedule', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TimerTriggerUpdateParameters, self).__init__(**kwargs) + self.schedule = kwargs.get('schedule', None) + self.status = kwargs.get('status', None) + self.name = kwargs['name'] + + +class Token(ProxyResource): + """An object that represents a token for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :ivar creation_date: The creation date of scope map. + :vartype creation_date: ~datetime.datetime + :ivar provisioning_state: Provisioning state of the resource. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param scope_map_id: The resource ID of the scope map to which the token will be associated + with. + :type scope_map_id: str + :param credentials: The credentials that can be used for authenticating the token. + :type credentials: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenCredentialsProperties + :param status: The status of the token example enabled or disabled. Possible values include: + "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenStatus + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'creation_date': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'creation_date': {'key': 'properties.creationDate', 'type': 'iso-8601'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'scope_map_id': {'key': 'properties.scopeMapId', 'type': 'str'}, + 'credentials': {'key': 'properties.credentials', 'type': 'TokenCredentialsProperties'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Token, self).__init__(**kwargs) + self.creation_date = None + self.provisioning_state = None + self.scope_map_id = kwargs.get('scope_map_id', None) + self.credentials = kwargs.get('credentials', None) + self.status = kwargs.get('status', None) + + +class TokenCertificate(msrest.serialization.Model): + """The properties of a certificate used for authenticating a token. + + :param name: Possible values include: "certificate1", "certificate2". + :type name: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenCertificateName + :param expiry: The expiry datetime of the certificate. + :type expiry: ~datetime.datetime + :param thumbprint: The thumbprint of the certificate. + :type thumbprint: str + :param encoded_pem_certificate: Base 64 encoded string of the public certificate1 in PEM format + that will be used for authenticating the token. + :type encoded_pem_certificate: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'expiry': {'key': 'expiry', 'type': 'iso-8601'}, + 'thumbprint': {'key': 'thumbprint', 'type': 'str'}, + 'encoded_pem_certificate': {'key': 'encodedPemCertificate', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TokenCertificate, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.expiry = kwargs.get('expiry', None) + self.thumbprint = kwargs.get('thumbprint', None) + self.encoded_pem_certificate = kwargs.get('encoded_pem_certificate', None) + + +class TokenCredentialsProperties(msrest.serialization.Model): + """The properties of the credentials that can be used for authenticating the token. + + :param active_directory_object: The Active Directory Object that will be used for + authenticating the token of a container registry. + :type active_directory_object: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ActiveDirectoryObject + :param certificates: + :type certificates: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenCertificate] + :param passwords: + :type passwords: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenPassword] + """ + + _attribute_map = { + 'active_directory_object': {'key': 'activeDirectoryObject', 'type': 'ActiveDirectoryObject'}, + 'certificates': {'key': 'certificates', 'type': '[TokenCertificate]'}, + 'passwords': {'key': 'passwords', 'type': '[TokenPassword]'}, + } + + def __init__( + self, + **kwargs + ): + super(TokenCredentialsProperties, self).__init__(**kwargs) + self.active_directory_object = kwargs.get('active_directory_object', None) + self.certificates = kwargs.get('certificates', None) + self.passwords = kwargs.get('passwords', None) + + +class TokenListResult(msrest.serialization.Model): + """The result of a request to list tokens for a container registry. + + :param value: The list of tokens. Since this list may be incomplete, the nextLink field should + be used to request the next list of tokens. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token] + :param next_link: The URI that can be used to request the next list of tokens. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Token]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TokenListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class TokenPassword(msrest.serialization.Model): + """The password that will be used for authenticating the token of a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param creation_time: The creation datetime of the password. + :type creation_time: ~datetime.datetime + :param expiry: The expiry datetime of the password. + :type expiry: ~datetime.datetime + :param name: The password name "password1" or "password2". Possible values include: + "password1", "password2". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenPasswordName + :ivar value: The password value. + :vartype value: str + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'creation_time': {'key': 'creationTime', 'type': 'iso-8601'}, + 'expiry': {'key': 'expiry', 'type': 'iso-8601'}, + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TokenPassword, self).__init__(**kwargs) + self.creation_time = kwargs.get('creation_time', None) + self.expiry = kwargs.get('expiry', None) + self.name = kwargs.get('name', None) + self.value = None + + +class TokenUpdateParameters(msrest.serialization.Model): + """The parameters for updating a token. + + :param scope_map_id: The resource ID of the scope map to which the token will be associated + with. + :type scope_map_id: str + :param status: The status of the token example enabled or disabled. Possible values include: + "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenStatus + :param credentials: The credentials that can be used for authenticating the token. + :type credentials: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenCredentialsProperties + """ + + _attribute_map = { + 'scope_map_id': {'key': 'properties.scopeMapId', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'credentials': {'key': 'properties.credentials', 'type': 'TokenCredentialsProperties'}, + } + + def __init__( + self, + **kwargs + ): + super(TokenUpdateParameters, self).__init__(**kwargs) + self.scope_map_id = kwargs.get('scope_map_id', None) + self.status = kwargs.get('status', None) + self.credentials = kwargs.get('credentials', None) + + +class TriggerProperties(msrest.serialization.Model): + """The properties of a trigger. + + :param timer_triggers: The collection of timer triggers. + :type timer_triggers: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TimerTrigger] + :param source_triggers: The collection of triggers based on source code repository. + :type source_triggers: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTrigger] + :param base_image_trigger: The trigger based on base image dependencies. + :type base_image_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageTrigger + """ + + _attribute_map = { + 'timer_triggers': {'key': 'timerTriggers', 'type': '[TimerTrigger]'}, + 'source_triggers': {'key': 'sourceTriggers', 'type': '[SourceTrigger]'}, + 'base_image_trigger': {'key': 'baseImageTrigger', 'type': 'BaseImageTrigger'}, + } + + def __init__( + self, + **kwargs + ): + super(TriggerProperties, self).__init__(**kwargs) + self.timer_triggers = kwargs.get('timer_triggers', None) + self.source_triggers = kwargs.get('source_triggers', None) + self.base_image_trigger = kwargs.get('base_image_trigger', None) + + +class TriggerUpdateParameters(msrest.serialization.Model): + """The properties for updating triggers. + + :param timer_triggers: The collection of timer triggers. + :type timer_triggers: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TimerTriggerUpdateParameters] + :param source_triggers: The collection of triggers based on source code repository. + :type source_triggers: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTriggerUpdateParameters] + :param base_image_trigger: The trigger based on base image dependencies. + :type base_image_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageTriggerUpdateParameters + """ + + _attribute_map = { + 'timer_triggers': {'key': 'timerTriggers', 'type': '[TimerTriggerUpdateParameters]'}, + 'source_triggers': {'key': 'sourceTriggers', 'type': '[SourceTriggerUpdateParameters]'}, + 'base_image_trigger': {'key': 'baseImageTrigger', 'type': 'BaseImageTriggerUpdateParameters'}, + } + + def __init__( + self, + **kwargs + ): + super(TriggerUpdateParameters, self).__init__(**kwargs) + self.timer_triggers = kwargs.get('timer_triggers', None) + self.source_triggers = kwargs.get('source_triggers', None) + self.base_image_trigger = kwargs.get('base_image_trigger', None) + + +class TrustPolicy(msrest.serialization.Model): + """The content trust policy for a container registry. + + :param type: The type of trust policy. Possible values include: "Notary". Default value: + "Notary". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TrustPolicyType + :param status: The value that indicates whether the policy is enabled or not. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PolicyStatus + """ + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TrustPolicy, self).__init__(**kwargs) + self.type = kwargs.get('type', "Notary") + self.status = kwargs.get('status', None) + + +class UserIdentityProperties(msrest.serialization.Model): + """UserIdentityProperties. + + :param principal_id: The principal id of user assigned identity. + :type principal_id: str + :param client_id: The client id of user assigned identity. + :type client_id: str + """ + + _attribute_map = { + 'principal_id': {'key': 'principalId', 'type': 'str'}, + 'client_id': {'key': 'clientId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(UserIdentityProperties, self).__init__(**kwargs) + self.principal_id = kwargs.get('principal_id', None) + self.client_id = kwargs.get('client_id', None) + + +class VirtualNetworkRule(msrest.serialization.Model): + """Virtual network rule. + + All required parameters must be populated in order to send to Azure. + + :param action: The action of virtual network rule. Possible values include: "Allow". + :type action: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Action + :param virtual_network_resource_id: Required. Resource ID of a subnet, for example: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}. + :type virtual_network_resource_id: str + """ + + _validation = { + 'virtual_network_resource_id': {'required': True}, + } + + _attribute_map = { + 'action': {'key': 'action', 'type': 'str'}, + 'virtual_network_resource_id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(VirtualNetworkRule, self).__init__(**kwargs) + self.action = kwargs.get('action', None) + self.virtual_network_resource_id = kwargs['virtual_network_resource_id'] + + +class Webhook(Resource): + """An object that represents a webhook for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :param status: The status of the webhook at the time the operation was called. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookStatus + :param scope: The scope of repositories where the event can be triggered. For example, 'foo:*' + means events for all tags under repository 'foo'. 'foo:bar' means events for 'foo:bar' only. + 'foo' is equivalent to 'foo:latest'. Empty means all events. + :type scope: str + :param actions: The list of actions that trigger the webhook to post notifications. + :type actions: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookAction] + :ivar provisioning_state: The provisioning state of the webhook at the time the operation was + called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", + "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'scope': {'key': 'properties.scope', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Webhook, self).__init__(**kwargs) + self.status = kwargs.get('status', None) + self.scope = kwargs.get('scope', None) + self.actions = kwargs.get('actions', None) + self.provisioning_state = None + + +class WebhookCreateParameters(msrest.serialization.Model): + """The parameters for creating a webhook. + + All required parameters must be populated in order to send to Azure. + + :param tags: A set of tags. The tags for the webhook. + :type tags: dict[str, str] + :param location: Required. The location of the webhook. This cannot be changed after the + resource is created. + :type location: str + :param service_uri: The service URI for the webhook to post notifications. + :type service_uri: str + :param custom_headers: Custom headers that will be added to the webhook notifications. + :type custom_headers: dict[str, str] + :param status: The status of the webhook at the time the operation was called. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookStatus + :param scope: The scope of repositories where the event can be triggered. For example, 'foo:*' + means events for all tags under repository 'foo'. 'foo:bar' means events for 'foo:bar' only. + 'foo' is equivalent to 'foo:latest'. Empty means all events. + :type scope: str + :param actions: The list of actions that trigger the webhook to post notifications. + :type actions: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookAction] + """ + + _validation = { + 'location': {'required': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'service_uri': {'key': 'properties.serviceUri', 'type': 'str'}, + 'custom_headers': {'key': 'properties.customHeaders', 'type': '{str}'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'scope': {'key': 'properties.scope', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(WebhookCreateParameters, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.location = kwargs['location'] + self.service_uri = kwargs.get('service_uri', None) + self.custom_headers = kwargs.get('custom_headers', None) + self.status = kwargs.get('status', None) + self.scope = kwargs.get('scope', None) + self.actions = kwargs.get('actions', None) + + +class WebhookListResult(msrest.serialization.Model): + """The result of a request to list webhooks for a container registry. + + :param value: The list of webhooks. Since this list may be incomplete, the nextLink field + should be used to request the next list of webhooks. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Webhook] + :param next_link: The URI that can be used to request the next list of webhooks. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Webhook]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(WebhookListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class WebhookUpdateParameters(msrest.serialization.Model): + """The parameters for updating a webhook. + + :param tags: A set of tags. The tags for the webhook. + :type tags: dict[str, str] + :param service_uri: The service URI for the webhook to post notifications. + :type service_uri: str + :param custom_headers: Custom headers that will be added to the webhook notifications. + :type custom_headers: dict[str, str] + :param status: The status of the webhook at the time the operation was called. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookStatus + :param scope: The scope of repositories where the event can be triggered. For example, 'foo:*' + means events for all tags under repository 'foo'. 'foo:bar' means events for 'foo:bar' only. + 'foo' is equivalent to 'foo:latest'. Empty means all events. + :type scope: str + :param actions: The list of actions that trigger the webhook to post notifications. + :type actions: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookAction] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'service_uri': {'key': 'properties.serviceUri', 'type': 'str'}, + 'custom_headers': {'key': 'properties.customHeaders', 'type': '{str}'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'scope': {'key': 'properties.scope', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(WebhookUpdateParameters, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.service_uri = kwargs.get('service_uri', None) + self.custom_headers = kwargs.get('custom_headers', None) + self.status = kwargs.get('status', None) + self.scope = kwargs.get('scope', None) + self.actions = kwargs.get('actions', None) diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_models_py3.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_models_py3.py new file mode 100644 index 00000000000..c8eded02e9e --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/models/_models_py3.py @@ -0,0 +1,6089 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +import datetime +from typing import Dict, List, Optional, Union + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + +from ._container_registry_management_client_enums import * + + +class ActiveDirectoryObject(msrest.serialization.Model): + """The Active Directory Object that will be used for authenticating the token of a container registry. + + :param object_id: The user/group/application object ID for Active Directory Object that will be + used for authenticating the token of a container registry. + :type object_id: str + :param tenant_id: The tenant ID of user/group/application object Active Directory Object that + will be used for authenticating the token of a container registry. + :type tenant_id: str + """ + + _attribute_map = { + 'object_id': {'key': 'objectId', 'type': 'str'}, + 'tenant_id': {'key': 'tenantId', 'type': 'str'}, + } + + def __init__( + self, + *, + object_id: Optional[str] = None, + tenant_id: Optional[str] = None, + **kwargs + ): + super(ActiveDirectoryObject, self).__init__(**kwargs) + self.object_id = object_id + self.tenant_id = tenant_id + + +class Actor(msrest.serialization.Model): + """The agent that initiated the event. For most situations, this could be from the authorization context of the request. + + :param name: The subject or username associated with the request context that generated the + event. + :type name: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[str] = None, + **kwargs + ): + super(Actor, self).__init__(**kwargs) + self.name = name + + +class Resource(msrest.serialization.Model): + """An Azure resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.location = location + self.tags = tags + + +class AgentPool(Resource): + """The agentpool that has the ARM resource and properties. +The agentpool will have all information to create an agent pool. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :param count: The count of agent machine. + :type count: int + :param tier: The Tier of agent machine. + :type tier: str + :param os: The OS of agent machine. Possible values include: "Windows", "Linux". + :type os: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OS + :param virtual_network_subnet_resource_id: The Virtual Network Subnet Resource Id of the agent + machine. + :type virtual_network_subnet_resource_id: str + :ivar provisioning_state: The provisioning state of this agent pool. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'count': {'key': 'properties.count', 'type': 'int'}, + 'tier': {'key': 'properties.tier', 'type': 'str'}, + 'os': {'key': 'properties.os', 'type': 'str'}, + 'virtual_network_subnet_resource_id': {'key': 'properties.virtualNetworkSubnetResourceId', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + count: Optional[int] = None, + tier: Optional[str] = None, + os: Optional[Union[str, "OS"]] = None, + virtual_network_subnet_resource_id: Optional[str] = None, + **kwargs + ): + super(AgentPool, self).__init__(location=location, tags=tags, **kwargs) + self.count = count + self.tier = tier + self.os = os + self.virtual_network_subnet_resource_id = virtual_network_subnet_resource_id + self.provisioning_state = None + + +class AgentPoolListResult(msrest.serialization.Model): + """The collection of agent pools. + + :param value: The collection value. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool] + :param next_link: The URI that can be used to request the next set of paged results. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[AgentPool]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["AgentPool"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(AgentPoolListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class AgentPoolQueueStatus(msrest.serialization.Model): + """The QueueStatus of Agent Pool. + + :param count: The number of pending runs in the queue. + :type count: int + """ + + _attribute_map = { + 'count': {'key': 'count', 'type': 'int'}, + } + + def __init__( + self, + *, + count: Optional[int] = None, + **kwargs + ): + super(AgentPoolQueueStatus, self).__init__(**kwargs) + self.count = count + + +class AgentPoolUpdateParameters(msrest.serialization.Model): + """The parameters for updating an agent pool. + + :param tags: A set of tags. The ARM resource tags. + :type tags: dict[str, str] + :param count: The count of agent machine. + :type count: int + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'count': {'key': 'properties.count', 'type': 'int'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + count: Optional[int] = None, + **kwargs + ): + super(AgentPoolUpdateParameters, self).__init__(**kwargs) + self.tags = tags + self.count = count + + +class AgentProperties(msrest.serialization.Model): + """The properties that determine the run agent configuration. + + :param cpu: The CPU configuration in terms of number of cores required for the run. + :type cpu: int + """ + + _attribute_map = { + 'cpu': {'key': 'cpu', 'type': 'int'}, + } + + def __init__( + self, + *, + cpu: Optional[int] = None, + **kwargs + ): + super(AgentProperties, self).__init__(**kwargs) + self.cpu = cpu + + +class Argument(msrest.serialization.Model): + """The properties of a run argument. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the argument. + :type name: str + :param value: Required. The value of the argument. + :type value: str + :param is_secret: Flag to indicate whether the argument represents a secret and want to be + removed from build logs. + :type is_secret: bool + """ + + _validation = { + 'name': {'required': True}, + 'value': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'str'}, + 'is_secret': {'key': 'isSecret', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + value: str, + is_secret: Optional[bool] = False, + **kwargs + ): + super(Argument, self).__init__(**kwargs) + self.name = name + self.value = value + self.is_secret = is_secret + + +class AuthInfo(msrest.serialization.Model): + """The authorization properties for accessing the source code repository. + + All required parameters must be populated in order to send to Azure. + + :param token_type: Required. The type of Auth token. Possible values include: "PAT", "OAuth". + :type token_type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenType + :param token: Required. The access token used to access the source control provider. + :type token: str + :param refresh_token: The refresh token used to refresh the access token. + :type refresh_token: str + :param scope: The scope of the access token. + :type scope: str + :param expires_in: Time in seconds that the token remains valid. + :type expires_in: int + """ + + _validation = { + 'token_type': {'required': True}, + 'token': {'required': True}, + } + + _attribute_map = { + 'token_type': {'key': 'tokenType', 'type': 'str'}, + 'token': {'key': 'token', 'type': 'str'}, + 'refresh_token': {'key': 'refreshToken', 'type': 'str'}, + 'scope': {'key': 'scope', 'type': 'str'}, + 'expires_in': {'key': 'expiresIn', 'type': 'int'}, + } + + def __init__( + self, + *, + token_type: Union[str, "TokenType"], + token: str, + refresh_token: Optional[str] = None, + scope: Optional[str] = None, + expires_in: Optional[int] = None, + **kwargs + ): + super(AuthInfo, self).__init__(**kwargs) + self.token_type = token_type + self.token = token + self.refresh_token = refresh_token + self.scope = scope + self.expires_in = expires_in + + +class AuthInfoUpdateParameters(msrest.serialization.Model): + """The authorization properties for accessing the source code repository. + + :param token_type: The type of Auth token. Possible values include: "PAT", "OAuth". + :type token_type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenType + :param token: The access token used to access the source control provider. + :type token: str + :param refresh_token: The refresh token used to refresh the access token. + :type refresh_token: str + :param scope: The scope of the access token. + :type scope: str + :param expires_in: Time in seconds that the token remains valid. + :type expires_in: int + """ + + _attribute_map = { + 'token_type': {'key': 'tokenType', 'type': 'str'}, + 'token': {'key': 'token', 'type': 'str'}, + 'refresh_token': {'key': 'refreshToken', 'type': 'str'}, + 'scope': {'key': 'scope', 'type': 'str'}, + 'expires_in': {'key': 'expiresIn', 'type': 'int'}, + } + + def __init__( + self, + *, + token_type: Optional[Union[str, "TokenType"]] = None, + token: Optional[str] = None, + refresh_token: Optional[str] = None, + scope: Optional[str] = None, + expires_in: Optional[int] = None, + **kwargs + ): + super(AuthInfoUpdateParameters, self).__init__(**kwargs) + self.token_type = token_type + self.token = token + self.refresh_token = refresh_token + self.scope = scope + self.expires_in = expires_in + + +class BaseImageDependency(msrest.serialization.Model): + """Properties that describe a base image dependency. + + :param type: The type of the base image dependency. Possible values include: "BuildTime", + "RunTime". + :type type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependencyType + :param registry: The registry login server. + :type registry: str + :param repository: The repository name. + :type repository: str + :param tag: The tag name. + :type tag: str + :param digest: The sha256-based digest of the image manifest. + :type digest: str + """ + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'registry': {'key': 'registry', 'type': 'str'}, + 'repository': {'key': 'repository', 'type': 'str'}, + 'tag': {'key': 'tag', 'type': 'str'}, + 'digest': {'key': 'digest', 'type': 'str'}, + } + + def __init__( + self, + *, + type: Optional[Union[str, "BaseImageDependencyType"]] = None, + registry: Optional[str] = None, + repository: Optional[str] = None, + tag: Optional[str] = None, + digest: Optional[str] = None, + **kwargs + ): + super(BaseImageDependency, self).__init__(**kwargs) + self.type = type + self.registry = registry + self.repository = repository + self.tag = tag + self.digest = digest + + +class BaseImageTrigger(msrest.serialization.Model): + """The trigger based on base image dependency. + + All required parameters must be populated in order to send to Azure. + + :param base_image_trigger_type: Required. The type of the auto trigger for base image + dependency updates. Possible values include: "All", "Runtime". + :type base_image_trigger_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageTriggerType + :param update_trigger_endpoint: The endpoint URL for receiving update triggers. + :type update_trigger_endpoint: str + :param update_trigger_payload_type: Type of Payload body for Base image update triggers. + Possible values include: "Default", "Token". + :type update_trigger_payload_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.UpdateTriggerPayloadType + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'base_image_trigger_type': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'base_image_trigger_type': {'key': 'baseImageTriggerType', 'type': 'str'}, + 'update_trigger_endpoint': {'key': 'updateTriggerEndpoint', 'type': 'str'}, + 'update_trigger_payload_type': {'key': 'updateTriggerPayloadType', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + base_image_trigger_type: Union[str, "BaseImageTriggerType"], + name: str, + update_trigger_endpoint: Optional[str] = None, + update_trigger_payload_type: Optional[Union[str, "UpdateTriggerPayloadType"]] = None, + status: Optional[Union[str, "TriggerStatus"]] = None, + **kwargs + ): + super(BaseImageTrigger, self).__init__(**kwargs) + self.base_image_trigger_type = base_image_trigger_type + self.update_trigger_endpoint = update_trigger_endpoint + self.update_trigger_payload_type = update_trigger_payload_type + self.status = status + self.name = name + + +class BaseImageTriggerUpdateParameters(msrest.serialization.Model): + """The properties for updating base image dependency trigger. + + All required parameters must be populated in order to send to Azure. + + :param base_image_trigger_type: The type of the auto trigger for base image dependency updates. + Possible values include: "All", "Runtime". + :type base_image_trigger_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageTriggerType + :param update_trigger_endpoint: The endpoint URL for receiving update triggers. + :type update_trigger_endpoint: str + :param update_trigger_payload_type: Type of Payload body for Base image update triggers. + Possible values include: "Default", "Token". + :type update_trigger_payload_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.UpdateTriggerPayloadType + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'base_image_trigger_type': {'key': 'baseImageTriggerType', 'type': 'str'}, + 'update_trigger_endpoint': {'key': 'updateTriggerEndpoint', 'type': 'str'}, + 'update_trigger_payload_type': {'key': 'updateTriggerPayloadType', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + base_image_trigger_type: Optional[Union[str, "BaseImageTriggerType"]] = None, + update_trigger_endpoint: Optional[str] = None, + update_trigger_payload_type: Optional[Union[str, "UpdateTriggerPayloadType"]] = None, + status: Optional[Union[str, "TriggerStatus"]] = None, + **kwargs + ): + super(BaseImageTriggerUpdateParameters, self).__init__(**kwargs) + self.base_image_trigger_type = base_image_trigger_type + self.update_trigger_endpoint = update_trigger_endpoint + self.update_trigger_payload_type = update_trigger_payload_type + self.status = status + self.name = name + + +class CallbackConfig(msrest.serialization.Model): + """The configuration of service URI and custom headers for the webhook. + + All required parameters must be populated in order to send to Azure. + + :param service_uri: Required. The service URI for the webhook to post notifications. + :type service_uri: str + :param custom_headers: Custom headers that will be added to the webhook notifications. + :type custom_headers: dict[str, str] + """ + + _validation = { + 'service_uri': {'required': True}, + } + + _attribute_map = { + 'service_uri': {'key': 'serviceUri', 'type': 'str'}, + 'custom_headers': {'key': 'customHeaders', 'type': '{str}'}, + } + + def __init__( + self, + *, + service_uri: str, + custom_headers: Optional[Dict[str, str]] = None, + **kwargs + ): + super(CallbackConfig, self).__init__(**kwargs) + self.service_uri = service_uri + self.custom_headers = custom_headers + + +class Credentials(msrest.serialization.Model): + """The parameters that describes a set of credentials that will be used when a run is invoked. + + :param source_registry: Describes the credential parameters for accessing the source registry. + :type source_registry: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceRegistryCredentials + :param custom_registries: Describes the credential parameters for accessing other custom + registries. The key + for the dictionary item will be the registry login server (myregistry.azurecr.io) and + the value of the item will be the registry credentials for accessing the registry. + :type custom_registries: dict[str, + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.CustomRegistryCredentials] + """ + + _attribute_map = { + 'source_registry': {'key': 'sourceRegistry', 'type': 'SourceRegistryCredentials'}, + 'custom_registries': {'key': 'customRegistries', 'type': '{CustomRegistryCredentials}'}, + } + + def __init__( + self, + *, + source_registry: Optional["SourceRegistryCredentials"] = None, + custom_registries: Optional[Dict[str, "CustomRegistryCredentials"]] = None, + **kwargs + ): + super(Credentials, self).__init__(**kwargs) + self.source_registry = source_registry + self.custom_registries = custom_registries + + +class CustomRegistryCredentials(msrest.serialization.Model): + """Describes the credentials that will be used to access a custom registry during a run. + + :param user_name: The username for logging into the custom registry. + :type user_name: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SecretObject + :param password: The password for logging into the custom registry. The password is a secret + object that allows multiple ways of providing the value for it. + :type password: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SecretObject + :param identity: Indicates the managed identity assigned to the custom credential. If a user- + assigned identity + this value is the Client ID. If a system-assigned identity, the value will be ``system``. In + the case of a system-assigned identity, the Client ID will be determined by the runner. This + identity may be used to authenticate to key vault to retrieve credentials or it may be the + only + source of authentication used for accessing the registry. + :type identity: str + """ + + _attribute_map = { + 'user_name': {'key': 'userName', 'type': 'SecretObject'}, + 'password': {'key': 'password', 'type': 'SecretObject'}, + 'identity': {'key': 'identity', 'type': 'str'}, + } + + def __init__( + self, + *, + user_name: Optional["SecretObject"] = None, + password: Optional["SecretObject"] = None, + identity: Optional[str] = None, + **kwargs + ): + super(CustomRegistryCredentials, self).__init__(**kwargs) + self.user_name = user_name + self.password = password + self.identity = identity + + +class RunRequest(msrest.serialization.Model): + """The request parameters for scheduling a run. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DockerBuildRequest, EncodedTaskRunRequest, FileTaskRunRequest, TaskRunRequest. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'DockerBuildRequest': 'DockerBuildRequest', 'EncodedTaskRunRequest': 'EncodedTaskRunRequest', 'FileTaskRunRequest': 'FileTaskRunRequest', 'TaskRunRequest': 'TaskRunRequest'} + } + + def __init__( + self, + *, + is_archive_enabled: Optional[bool] = False, + agent_pool_name: Optional[str] = None, + **kwargs + ): + super(RunRequest, self).__init__(**kwargs) + self.type = None # type: Optional[str] + self.is_archive_enabled = is_archive_enabled + self.agent_pool_name = agent_pool_name + + +class DockerBuildRequest(RunRequest): + """The parameters for a docker quick build. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param image_names: The fully qualified image names including the repository and tag. + :type image_names: list[str] + :param is_push_enabled: The value of this property indicates whether the image built should be + pushed to the registry or not. + :type is_push_enabled: bool + :param no_cache: The value of this property indicates whether the image cache is enabled or + not. + :type no_cache: bool + :param docker_file_path: Required. The Docker file path relative to the source location. + :type docker_file_path: str + :param target: The name of the target build stage for the docker build. + :type target: str + :param arguments: The collection of override arguments to be used when executing the run. + :type arguments: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Argument] + :param timeout: Run timeout in seconds. + :type timeout: int + :param platform: Required. The platform properties against which the run has to happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param source_location: The URL(absolute or relative) of the source context. It can be an URL + to a tar or git repository. + If it is relative URL, the relative path should be obtained from calling + listBuildSourceUploadUrl API. + :type source_location: str + :param credentials: The properties that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _validation = { + 'type': {'required': True}, + 'docker_file_path': {'required': True}, + 'timeout': {'maximum': 28800, 'minimum': 300}, + 'platform': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + 'image_names': {'key': 'imageNames', 'type': '[str]'}, + 'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'}, + 'no_cache': {'key': 'noCache', 'type': 'bool'}, + 'docker_file_path': {'key': 'dockerFilePath', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'arguments': {'key': 'arguments', 'type': '[Argument]'}, + 'timeout': {'key': 'timeout', 'type': 'int'}, + 'platform': {'key': 'platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'agentConfiguration', 'type': 'AgentProperties'}, + 'source_location': {'key': 'sourceLocation', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + *, + docker_file_path: str, + platform: "PlatformProperties", + is_archive_enabled: Optional[bool] = False, + agent_pool_name: Optional[str] = None, + image_names: Optional[List[str]] = None, + is_push_enabled: Optional[bool] = True, + no_cache: Optional[bool] = False, + target: Optional[str] = None, + arguments: Optional[List["Argument"]] = None, + timeout: Optional[int] = 3600, + agent_configuration: Optional["AgentProperties"] = None, + source_location: Optional[str] = None, + credentials: Optional["Credentials"] = None, + **kwargs + ): + super(DockerBuildRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs) + self.type = 'DockerBuildRequest' # type: str + self.image_names = image_names + self.is_push_enabled = is_push_enabled + self.no_cache = no_cache + self.docker_file_path = docker_file_path + self.target = target + self.arguments = arguments + self.timeout = timeout + self.platform = platform + self.agent_configuration = agent_configuration + self.source_location = source_location + self.credentials = credentials + + +class TaskStepProperties(msrest.serialization.Model): + """Base properties for any task step. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DockerBuildStep, EncodedTaskStep, FileTaskStep. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :ivar base_image_dependencies: List of base image dependencies for a step. + :vartype base_image_dependencies: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependency] + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + """ + + _validation = { + 'type': {'required': True}, + 'base_image_dependencies': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'base_image_dependencies': {'key': 'baseImageDependencies', 'type': '[BaseImageDependency]'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'Docker': 'DockerBuildStep', 'EncodedTask': 'EncodedTaskStep', 'FileTask': 'FileTaskStep'} + } + + def __init__( + self, + *, + context_path: Optional[str] = None, + context_access_token: Optional[str] = None, + **kwargs + ): + super(TaskStepProperties, self).__init__(**kwargs) + self.type = None # type: Optional[str] + self.base_image_dependencies = None + self.context_path = context_path + self.context_access_token = context_access_token + + +class DockerBuildStep(TaskStepProperties): + """The Docker build step. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :ivar base_image_dependencies: List of base image dependencies for a step. + :vartype base_image_dependencies: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependency] + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param image_names: The fully qualified image names including the repository and tag. + :type image_names: list[str] + :param is_push_enabled: The value of this property indicates whether the image built should be + pushed to the registry or not. + :type is_push_enabled: bool + :param no_cache: The value of this property indicates whether the image cache is enabled or + not. + :type no_cache: bool + :param docker_file_path: Required. The Docker file path relative to the source context. + :type docker_file_path: str + :param target: The name of the target build stage for the docker build. + :type target: str + :param arguments: The collection of override arguments to be used when executing this build + step. + :type arguments: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Argument] + """ + + _validation = { + 'type': {'required': True}, + 'base_image_dependencies': {'readonly': True}, + 'docker_file_path': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'base_image_dependencies': {'key': 'baseImageDependencies', 'type': '[BaseImageDependency]'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'image_names': {'key': 'imageNames', 'type': '[str]'}, + 'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'}, + 'no_cache': {'key': 'noCache', 'type': 'bool'}, + 'docker_file_path': {'key': 'dockerFilePath', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'arguments': {'key': 'arguments', 'type': '[Argument]'}, + } + + def __init__( + self, + *, + docker_file_path: str, + context_path: Optional[str] = None, + context_access_token: Optional[str] = None, + image_names: Optional[List[str]] = None, + is_push_enabled: Optional[bool] = True, + no_cache: Optional[bool] = False, + target: Optional[str] = None, + arguments: Optional[List["Argument"]] = None, + **kwargs + ): + super(DockerBuildStep, self).__init__(context_path=context_path, context_access_token=context_access_token, **kwargs) + self.type = 'Docker' # type: str + self.image_names = image_names + self.is_push_enabled = is_push_enabled + self.no_cache = no_cache + self.docker_file_path = docker_file_path + self.target = target + self.arguments = arguments + + +class TaskStepUpdateParameters(msrest.serialization.Model): + """Base properties for updating any task step. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DockerBuildStepUpdateParameters, EncodedTaskStepUpdateParameters, FileTaskStepUpdateParameters. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'Docker': 'DockerBuildStepUpdateParameters', 'EncodedTask': 'EncodedTaskStepUpdateParameters', 'FileTask': 'FileTaskStepUpdateParameters'} + } + + def __init__( + self, + *, + context_path: Optional[str] = None, + context_access_token: Optional[str] = None, + **kwargs + ): + super(TaskStepUpdateParameters, self).__init__(**kwargs) + self.type = None # type: Optional[str] + self.context_path = context_path + self.context_access_token = context_access_token + + +class DockerBuildStepUpdateParameters(TaskStepUpdateParameters): + """The properties for updating a docker build step. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param image_names: The fully qualified image names including the repository and tag. + :type image_names: list[str] + :param is_push_enabled: The value of this property indicates whether the image built should be + pushed to the registry or not. + :type is_push_enabled: bool + :param no_cache: The value of this property indicates whether the image cache is enabled or + not. + :type no_cache: bool + :param docker_file_path: The Docker file path relative to the source context. + :type docker_file_path: str + :param arguments: The collection of override arguments to be used when executing this build + step. + :type arguments: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Argument] + :param target: The name of the target build stage for the docker build. + :type target: str + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'image_names': {'key': 'imageNames', 'type': '[str]'}, + 'is_push_enabled': {'key': 'isPushEnabled', 'type': 'bool'}, + 'no_cache': {'key': 'noCache', 'type': 'bool'}, + 'docker_file_path': {'key': 'dockerFilePath', 'type': 'str'}, + 'arguments': {'key': 'arguments', 'type': '[Argument]'}, + 'target': {'key': 'target', 'type': 'str'}, + } + + def __init__( + self, + *, + context_path: Optional[str] = None, + context_access_token: Optional[str] = None, + image_names: Optional[List[str]] = None, + is_push_enabled: Optional[bool] = None, + no_cache: Optional[bool] = None, + docker_file_path: Optional[str] = None, + arguments: Optional[List["Argument"]] = None, + target: Optional[str] = None, + **kwargs + ): + super(DockerBuildStepUpdateParameters, self).__init__(context_path=context_path, context_access_token=context_access_token, **kwargs) + self.type = 'Docker' # type: str + self.image_names = image_names + self.is_push_enabled = is_push_enabled + self.no_cache = no_cache + self.docker_file_path = docker_file_path + self.arguments = arguments + self.target = target + + +class EncodedTaskRunRequest(RunRequest): + """The parameters for a quick task run request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param encoded_task_content: Required. Base64 encoded value of the template/definition file + content. + :type encoded_task_content: str + :param encoded_values_content: Base64 encoded value of the parameters/values file content. + :type encoded_values_content: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + :param timeout: Run timeout in seconds. + :type timeout: int + :param platform: Required. The platform properties against which the run has to happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param source_location: The URL(absolute or relative) of the source context. It can be an URL + to a tar or git repository. + If it is relative URL, the relative path should be obtained from calling + listBuildSourceUploadUrl API. + :type source_location: str + :param credentials: The properties that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _validation = { + 'type': {'required': True}, + 'encoded_task_content': {'required': True}, + 'timeout': {'maximum': 28800, 'minimum': 300}, + 'platform': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + 'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'}, + 'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + 'timeout': {'key': 'timeout', 'type': 'int'}, + 'platform': {'key': 'platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'agentConfiguration', 'type': 'AgentProperties'}, + 'source_location': {'key': 'sourceLocation', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + *, + encoded_task_content: str, + platform: "PlatformProperties", + is_archive_enabled: Optional[bool] = False, + agent_pool_name: Optional[str] = None, + encoded_values_content: Optional[str] = None, + values: Optional[List["SetValue"]] = None, + timeout: Optional[int] = 3600, + agent_configuration: Optional["AgentProperties"] = None, + source_location: Optional[str] = None, + credentials: Optional["Credentials"] = None, + **kwargs + ): + super(EncodedTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs) + self.type = 'EncodedTaskRunRequest' # type: str + self.encoded_task_content = encoded_task_content + self.encoded_values_content = encoded_values_content + self.values = values + self.timeout = timeout + self.platform = platform + self.agent_configuration = agent_configuration + self.source_location = source_location + self.credentials = credentials + + +class EncodedTaskStep(TaskStepProperties): + """The properties of a encoded task step. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :ivar base_image_dependencies: List of base image dependencies for a step. + :vartype base_image_dependencies: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependency] + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param encoded_task_content: Required. Base64 encoded value of the template/definition file + content. + :type encoded_task_content: str + :param encoded_values_content: Base64 encoded value of the parameters/values file content. + :type encoded_values_content: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + """ + + _validation = { + 'type': {'required': True}, + 'base_image_dependencies': {'readonly': True}, + 'encoded_task_content': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'base_image_dependencies': {'key': 'baseImageDependencies', 'type': '[BaseImageDependency]'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'}, + 'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + } + + def __init__( + self, + *, + encoded_task_content: str, + context_path: Optional[str] = None, + context_access_token: Optional[str] = None, + encoded_values_content: Optional[str] = None, + values: Optional[List["SetValue"]] = None, + **kwargs + ): + super(EncodedTaskStep, self).__init__(context_path=context_path, context_access_token=context_access_token, **kwargs) + self.type = 'EncodedTask' # type: str + self.encoded_task_content = encoded_task_content + self.encoded_values_content = encoded_values_content + self.values = values + + +class EncodedTaskStepUpdateParameters(TaskStepUpdateParameters): + """The properties for updating encoded task step. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param encoded_task_content: Base64 encoded value of the template/definition file content. + :type encoded_task_content: str + :param encoded_values_content: Base64 encoded value of the parameters/values file content. + :type encoded_values_content: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'encoded_task_content': {'key': 'encodedTaskContent', 'type': 'str'}, + 'encoded_values_content': {'key': 'encodedValuesContent', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + } + + def __init__( + self, + *, + context_path: Optional[str] = None, + context_access_token: Optional[str] = None, + encoded_task_content: Optional[str] = None, + encoded_values_content: Optional[str] = None, + values: Optional[List["SetValue"]] = None, + **kwargs + ): + super(EncodedTaskStepUpdateParameters, self).__init__(context_path=context_path, context_access_token=context_access_token, **kwargs) + self.type = 'EncodedTask' # type: str + self.encoded_task_content = encoded_task_content + self.encoded_values_content = encoded_values_content + self.values = values + + +class EncryptionProperty(msrest.serialization.Model): + """EncryptionProperty. + + :param status: Indicates whether or not the encryption is enabled for container registry. + Possible values include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EncryptionStatus + :param key_vault_properties: Key vault properties. + :type key_vault_properties: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.KeyVaultProperties + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'key_vault_properties': {'key': 'keyVaultProperties', 'type': 'KeyVaultProperties'}, + } + + def __init__( + self, + *, + status: Optional[Union[str, "EncryptionStatus"]] = None, + key_vault_properties: Optional["KeyVaultProperties"] = None, + **kwargs + ): + super(EncryptionProperty, self).__init__(**kwargs) + self.status = status + self.key_vault_properties = key_vault_properties + + +class ErrorResponse(msrest.serialization.Model): + """An error response from the Azure Container Registry service. + + :param error: Azure container registry build API error body. + :type error: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ErrorResponseBody + """ + + _attribute_map = { + 'error': {'key': 'error', 'type': 'ErrorResponseBody'}, + } + + def __init__( + self, + *, + error: Optional["ErrorResponseBody"] = None, + **kwargs + ): + super(ErrorResponse, self).__init__(**kwargs) + self.error = error + + +class ErrorResponseBody(msrest.serialization.Model): + """An error response from the Azure Container Registry service. + + All required parameters must be populated in order to send to Azure. + + :param code: Required. error code. + :type code: str + :param message: Required. error message. + :type message: str + :param target: target of the particular error. + :type target: str + :param details: an array of additional nested error response info objects, as described by this + contract. + :type details: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.InnerErrorDescription + """ + + _validation = { + 'code': {'required': True}, + 'message': {'required': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': 'InnerErrorDescription'}, + } + + def __init__( + self, + *, + code: str, + message: str, + target: Optional[str] = None, + details: Optional["InnerErrorDescription"] = None, + **kwargs + ): + super(ErrorResponseBody, self).__init__(**kwargs) + self.code = code + self.message = message + self.target = target + self.details = details + + +class EventInfo(msrest.serialization.Model): + """The basic information of an event. + + :param id: The event ID. + :type id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + **kwargs + ): + super(EventInfo, self).__init__(**kwargs) + self.id = id + + +class Event(EventInfo): + """The event for a webhook. + + :param id: The event ID. + :type id: str + :param event_request_message: The event request message sent to the service URI. + :type event_request_message: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventRequestMessage + :param event_response_message: The event response message received from the service URI. + :type event_response_message: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventResponseMessage + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'event_request_message': {'key': 'eventRequestMessage', 'type': 'EventRequestMessage'}, + 'event_response_message': {'key': 'eventResponseMessage', 'type': 'EventResponseMessage'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + event_request_message: Optional["EventRequestMessage"] = None, + event_response_message: Optional["EventResponseMessage"] = None, + **kwargs + ): + super(Event, self).__init__(id=id, **kwargs) + self.event_request_message = event_request_message + self.event_response_message = event_response_message + + +class EventContent(msrest.serialization.Model): + """The content of the event request message. + + :param id: The event ID. + :type id: str + :param timestamp: The time at which the event occurred. + :type timestamp: ~datetime.datetime + :param action: The action that encompasses the provided event. + :type action: str + :param target: The target of the event. + :type target: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Target + :param request: The request that generated the event. + :type request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Request + :param actor: The agent that initiated the event. For most situations, this could be from the + authorization context of the request. + :type actor: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Actor + :param source: The registry node that generated the event. Put differently, while the actor + initiates the event, the source generates it. + :type source: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Source + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'timestamp': {'key': 'timestamp', 'type': 'iso-8601'}, + 'action': {'key': 'action', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'Target'}, + 'request': {'key': 'request', 'type': 'Request'}, + 'actor': {'key': 'actor', 'type': 'Actor'}, + 'source': {'key': 'source', 'type': 'Source'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + timestamp: Optional[datetime.datetime] = None, + action: Optional[str] = None, + target: Optional["Target"] = None, + request: Optional["Request"] = None, + actor: Optional["Actor"] = None, + source: Optional["Source"] = None, + **kwargs + ): + super(EventContent, self).__init__(**kwargs) + self.id = id + self.timestamp = timestamp + self.action = action + self.target = target + self.request = request + self.actor = actor + self.source = source + + +class EventListResult(msrest.serialization.Model): + """The result of a request to list events for a webhook. + + :param value: The list of events. Since this list may be incomplete, the nextLink field should + be used to request the next list of events. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Event] + :param next_link: The URI that can be used to request the next list of events. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Event]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Event"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(EventListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class EventRequestMessage(msrest.serialization.Model): + """The event request message sent to the service URI. + + :param content: The content of the event request message. + :type content: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventContent + :param headers: The headers of the event request message. + :type headers: dict[str, str] + :param method: The HTTP method used to send the event request message. + :type method: str + :param request_uri: The URI used to send the event request message. + :type request_uri: str + :param version: The HTTP message version. + :type version: str + """ + + _attribute_map = { + 'content': {'key': 'content', 'type': 'EventContent'}, + 'headers': {'key': 'headers', 'type': '{str}'}, + 'method': {'key': 'method', 'type': 'str'}, + 'request_uri': {'key': 'requestUri', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + } + + def __init__( + self, + *, + content: Optional["EventContent"] = None, + headers: Optional[Dict[str, str]] = None, + method: Optional[str] = None, + request_uri: Optional[str] = None, + version: Optional[str] = None, + **kwargs + ): + super(EventRequestMessage, self).__init__(**kwargs) + self.content = content + self.headers = headers + self.method = method + self.request_uri = request_uri + self.version = version + + +class EventResponseMessage(msrest.serialization.Model): + """The event response message received from the service URI. + + :param content: The content of the event response message. + :type content: str + :param headers: The headers of the event response message. + :type headers: dict[str, str] + :param reason_phrase: The reason phrase of the event response message. + :type reason_phrase: str + :param status_code: The status code of the event response message. + :type status_code: str + :param version: The HTTP message version. + :type version: str + """ + + _attribute_map = { + 'content': {'key': 'content', 'type': 'str'}, + 'headers': {'key': 'headers', 'type': '{str}'}, + 'reason_phrase': {'key': 'reasonPhrase', 'type': 'str'}, + 'status_code': {'key': 'statusCode', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + } + + def __init__( + self, + *, + content: Optional[str] = None, + headers: Optional[Dict[str, str]] = None, + reason_phrase: Optional[str] = None, + status_code: Optional[str] = None, + version: Optional[str] = None, + **kwargs + ): + super(EventResponseMessage, self).__init__(**kwargs) + self.content = content + self.headers = headers + self.reason_phrase = reason_phrase + self.status_code = status_code + self.version = version + + +class ProxyResource(msrest.serialization.Model): + """The resource model definition for a ARM proxy resource. It will have everything other than required location and tags. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ProxyResource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + + +class ExportPipeline(ProxyResource): + """An object that represents an export pipeline for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: The location of the export pipeline. + :type location: str + :param identity: The identity of the export pipeline. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param target: The target properties of the export pipeline. + :type target: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipelineTargetProperties + :param options: The list of all options configured for the pipeline. + :type options: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineOptions] + :ivar provisioning_state: The provisioning state of the pipeline at the time the operation was + called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", + "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'target': {'key': 'properties.target', 'type': 'ExportPipelineTargetProperties'}, + 'options': {'key': 'properties.options', 'type': '[str]'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + *, + location: Optional[str] = None, + identity: Optional["IdentityProperties"] = None, + target: Optional["ExportPipelineTargetProperties"] = None, + options: Optional[List[Union[str, "PipelineOptions"]]] = None, + **kwargs + ): + super(ExportPipeline, self).__init__(**kwargs) + self.location = location + self.identity = identity + self.target = target + self.options = options + self.provisioning_state = None + + +class ExportPipelineListResult(msrest.serialization.Model): + """The result of a request to list export pipelines for a container registry. + + :param value: The list of export pipelines. Since this list may be incomplete, the nextLink + field should be used to request the next list of export pipelines. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipeline] + :param next_link: The URI that can be used to request the next list of pipeline runs. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ExportPipeline]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["ExportPipeline"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(ExportPipelineListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class ExportPipelineTargetProperties(msrest.serialization.Model): + """The properties of the export pipeline target. + + All required parameters must be populated in order to send to Azure. + + :param type: The type of target for the export pipeline. + :type type: str + :param uri: The target uri of the export pipeline. + When 'AzureStorageBlob': "https://accountName.blob.core.windows.net/containerName/blobName" + When 'AzureStorageBlobContainer': "https://accountName.blob.core.windows.net/containerName". + :type uri: str + :param storage_access_mode: Required. The authentication mode to be used to access the target storage (Entra MI or SAS). + :type storage_access_mode: str + :param key_vault_uri: The key vault secret uri to obtain the target storage SAS + token. + :type key_vault_uri: str + """ + + _validation = { + 'storage_access_mode': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'uri': {'key': 'uri', 'type': 'str'}, + 'storage_access_mode': {'key': 'storageAccessMode', 'type': 'str'}, + 'key_vault_uri': {'key': 'keyVaultUri', 'type': 'str'}, + } + + def __init__( + self, + *, + storage_access_mode: str, + type: Optional[str] = None, + uri: Optional[str] = None, + key_vault_uri: Optional[str] = None, + **kwargs + ): + super(ExportPipelineTargetProperties, self).__init__(**kwargs) + self.type = type + self.uri = uri + self.storage_access_mode = storage_access_mode + self.key_vault_uri = key_vault_uri + + +class FileTaskRunRequest(RunRequest): + """The request parameters for a scheduling run against a task file. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param task_file_path: Required. The template/definition file path relative to the source. + :type task_file_path: str + :param values_file_path: The values/parameters file path relative to the source. + :type values_file_path: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + :param timeout: Run timeout in seconds. + :type timeout: int + :param platform: Required. The platform properties against which the run has to happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param source_location: The URL(absolute or relative) of the source context. It can be an URL + to a tar or git repository. + If it is relative URL, the relative path should be obtained from calling + listBuildSourceUploadUrl API. + :type source_location: str + :param credentials: The properties that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _validation = { + 'type': {'required': True}, + 'task_file_path': {'required': True}, + 'timeout': {'maximum': 28800, 'minimum': 300}, + 'platform': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + 'task_file_path': {'key': 'taskFilePath', 'type': 'str'}, + 'values_file_path': {'key': 'valuesFilePath', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + 'timeout': {'key': 'timeout', 'type': 'int'}, + 'platform': {'key': 'platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'agentConfiguration', 'type': 'AgentProperties'}, + 'source_location': {'key': 'sourceLocation', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + *, + task_file_path: str, + platform: "PlatformProperties", + is_archive_enabled: Optional[bool] = False, + agent_pool_name: Optional[str] = None, + values_file_path: Optional[str] = None, + values: Optional[List["SetValue"]] = None, + timeout: Optional[int] = 3600, + agent_configuration: Optional["AgentProperties"] = None, + source_location: Optional[str] = None, + credentials: Optional["Credentials"] = None, + **kwargs + ): + super(FileTaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs) + self.type = 'FileTaskRunRequest' # type: str + self.task_file_path = task_file_path + self.values_file_path = values_file_path + self.values = values + self.timeout = timeout + self.platform = platform + self.agent_configuration = agent_configuration + self.source_location = source_location + self.credentials = credentials + + +class FileTaskStep(TaskStepProperties): + """The properties of a task step. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :ivar base_image_dependencies: List of base image dependencies for a step. + :vartype base_image_dependencies: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageDependency] + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param task_file_path: Required. The task template/definition file path relative to the source + context. + :type task_file_path: str + :param values_file_path: The task values/parameters file path relative to the source context. + :type values_file_path: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + """ + + _validation = { + 'type': {'required': True}, + 'base_image_dependencies': {'readonly': True}, + 'task_file_path': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'base_image_dependencies': {'key': 'baseImageDependencies', 'type': '[BaseImageDependency]'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'task_file_path': {'key': 'taskFilePath', 'type': 'str'}, + 'values_file_path': {'key': 'valuesFilePath', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + } + + def __init__( + self, + *, + task_file_path: str, + context_path: Optional[str] = None, + context_access_token: Optional[str] = None, + values_file_path: Optional[str] = None, + values: Optional[List["SetValue"]] = None, + **kwargs + ): + super(FileTaskStep, self).__init__(context_path=context_path, context_access_token=context_access_token, **kwargs) + self.type = 'FileTask' # type: str + self.task_file_path = task_file_path + self.values_file_path = values_file_path + self.values = values + + +class FileTaskStepUpdateParameters(TaskStepUpdateParameters): + """The properties of updating a task step. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the step.Constant filled by server. Possible values + include: "Docker", "FileTask", "EncodedTask". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StepType + :param context_path: The URL(absolute or relative) of the source context for the task step. + :type context_path: str + :param context_access_token: The token (git PAT or SAS token of storage account blob) + associated with the context for a step. + :type context_access_token: str + :param task_file_path: The task template/definition file path relative to the source context. + :type task_file_path: str + :param values_file_path: The values/parameters file path relative to the source context. + :type values_file_path: str + :param values: The collection of overridable values that can be passed when running a task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'context_access_token': {'key': 'contextAccessToken', 'type': 'str'}, + 'task_file_path': {'key': 'taskFilePath', 'type': 'str'}, + 'values_file_path': {'key': 'valuesFilePath', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + } + + def __init__( + self, + *, + context_path: Optional[str] = None, + context_access_token: Optional[str] = None, + task_file_path: Optional[str] = None, + values_file_path: Optional[str] = None, + values: Optional[List["SetValue"]] = None, + **kwargs + ): + super(FileTaskStepUpdateParameters, self).__init__(context_path=context_path, context_access_token=context_access_token, **kwargs) + self.type = 'FileTask' # type: str + self.task_file_path = task_file_path + self.values_file_path = values_file_path + self.values = values + + +class GenerateCredentialsParameters(msrest.serialization.Model): + """The parameters used to generate credentials for a specified token or user of a container registry. + + :param token_id: The resource ID of the token for which credentials have to be generated. + :type token_id: str + :param expiry: The expiry date of the generated credentials after which the credentials become + invalid. + :type expiry: ~datetime.datetime + :param name: Specifies name of the password which should be regenerated if any -- password1 or + password2. Possible values include: "password1", "password2". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenPasswordName + """ + + _attribute_map = { + 'token_id': {'key': 'tokenId', 'type': 'str'}, + 'expiry': {'key': 'expiry', 'type': 'iso-8601'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + token_id: Optional[str] = None, + expiry: Optional[datetime.datetime] = None, + name: Optional[Union[str, "TokenPasswordName"]] = None, + **kwargs + ): + super(GenerateCredentialsParameters, self).__init__(**kwargs) + self.token_id = token_id + self.expiry = expiry + self.name = name + + +class GenerateCredentialsResult(msrest.serialization.Model): + """The response from the GenerateCredentials operation. + + :param username: The username for a container registry. + :type username: str + :param passwords: The list of passwords for a container registry. + :type passwords: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenPassword] + """ + + _attribute_map = { + 'username': {'key': 'username', 'type': 'str'}, + 'passwords': {'key': 'passwords', 'type': '[TokenPassword]'}, + } + + def __init__( + self, + *, + username: Optional[str] = None, + passwords: Optional[List["TokenPassword"]] = None, + **kwargs + ): + super(GenerateCredentialsResult, self).__init__(**kwargs) + self.username = username + self.passwords = passwords + + +class IdentityProperties(msrest.serialization.Model): + """Managed identity for the resource. + + :param principal_id: The principal ID of resource identity. + :type principal_id: str + :param tenant_id: The tenant ID of resource. + :type tenant_id: str + :param type: The identity type. Possible values include: "SystemAssigned", "UserAssigned", + "SystemAssigned, UserAssigned", "None". + :type type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ResourceIdentityType + :param user_assigned_identities: The list of user identities associated with the resource. The + user identity + dictionary key references will be ARM resource ids in the form: + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/ + providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. + :type user_assigned_identities: dict[str, + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.UserIdentityProperties] + """ + + _attribute_map = { + 'principal_id': {'key': 'principalId', 'type': 'str'}, + 'tenant_id': {'key': 'tenantId', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserIdentityProperties}'}, + } + + def __init__( + self, + *, + principal_id: Optional[str] = None, + tenant_id: Optional[str] = None, + type: Optional[Union[str, "ResourceIdentityType"]] = None, + user_assigned_identities: Optional[Dict[str, "UserIdentityProperties"]] = None, + **kwargs + ): + super(IdentityProperties, self).__init__(**kwargs) + self.principal_id = principal_id + self.tenant_id = tenant_id + self.type = type + self.user_assigned_identities = user_assigned_identities + + +class ImageDescriptor(msrest.serialization.Model): + """Properties for a registry image. + + :param registry: The registry login server. + :type registry: str + :param repository: The repository name. + :type repository: str + :param tag: The tag name. + :type tag: str + :param digest: The sha256-based digest of the image manifest. + :type digest: str + """ + + _attribute_map = { + 'registry': {'key': 'registry', 'type': 'str'}, + 'repository': {'key': 'repository', 'type': 'str'}, + 'tag': {'key': 'tag', 'type': 'str'}, + 'digest': {'key': 'digest', 'type': 'str'}, + } + + def __init__( + self, + *, + registry: Optional[str] = None, + repository: Optional[str] = None, + tag: Optional[str] = None, + digest: Optional[str] = None, + **kwargs + ): + super(ImageDescriptor, self).__init__(**kwargs) + self.registry = registry + self.repository = repository + self.tag = tag + self.digest = digest + + +class ImageUpdateTrigger(msrest.serialization.Model): + """The image update trigger that caused a build. + + :param id: The unique ID of the trigger. + :type id: str + :param timestamp: The timestamp when the image update happened. + :type timestamp: ~datetime.datetime + :param images: The list of image updates that caused the build. + :type images: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImageDescriptor] + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'timestamp': {'key': 'timestamp', 'type': 'iso-8601'}, + 'images': {'key': 'images', 'type': '[ImageDescriptor]'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + timestamp: Optional[datetime.datetime] = None, + images: Optional[List["ImageDescriptor"]] = None, + **kwargs + ): + super(ImageUpdateTrigger, self).__init__(**kwargs) + self.id = id + self.timestamp = timestamp + self.images = images + + +class ImportImageParameters(msrest.serialization.Model): + """ImportImageParameters. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The source of the image. + :type source: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportSource + :param target_tags: List of strings of the form repo[:tag]. When tag is omitted the source will + be used (or 'latest' if source tag is also omitted). + :type target_tags: list[str] + :param untagged_target_repositories: List of strings of repository names to do a manifest only + copy. No tag will be created. + :type untagged_target_repositories: list[str] + :param mode: When Force, any existing target tags will be overwritten. When NoForce, any + existing target tags will fail the operation before any copying begins. Possible values + include: "NoForce", "Force". Default value: "NoForce". + :type mode: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportMode + """ + + _validation = { + 'source': {'required': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'ImportSource'}, + 'target_tags': {'key': 'targetTags', 'type': '[str]'}, + 'untagged_target_repositories': {'key': 'untaggedTargetRepositories', 'type': '[str]'}, + 'mode': {'key': 'mode', 'type': 'str'}, + } + + def __init__( + self, + *, + source: "ImportSource", + target_tags: Optional[List[str]] = None, + untagged_target_repositories: Optional[List[str]] = None, + mode: Optional[Union[str, "ImportMode"]] = "NoForce", + **kwargs + ): + super(ImportImageParameters, self).__init__(**kwargs) + self.source = source + self.target_tags = target_tags + self.untagged_target_repositories = untagged_target_repositories + self.mode = mode + + +class ImportPipeline(ProxyResource): + """An object that represents an import pipeline for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: The location of the import pipeline. + :type location: str + :param identity: The identity of the import pipeline. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param source: The source properties of the import pipeline. + :type source: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipelineSourceProperties + :param trigger: The properties that describe the trigger of the import pipeline. + :type trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineTriggerProperties + :param options: The list of all options configured for the pipeline. + :type options: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineOptions] + :ivar provisioning_state: The provisioning state of the pipeline at the time the operation was + called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", + "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'source': {'key': 'properties.source', 'type': 'ImportPipelineSourceProperties'}, + 'trigger': {'key': 'properties.trigger', 'type': 'PipelineTriggerProperties'}, + 'options': {'key': 'properties.options', 'type': '[str]'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + *, + location: Optional[str] = None, + identity: Optional["IdentityProperties"] = None, + source: Optional["ImportPipelineSourceProperties"] = None, + trigger: Optional["PipelineTriggerProperties"] = None, + options: Optional[List[Union[str, "PipelineOptions"]]] = None, + **kwargs + ): + super(ImportPipeline, self).__init__(**kwargs) + self.location = location + self.identity = identity + self.source = source + self.trigger = trigger + self.options = options + self.provisioning_state = None + + +class ImportPipelineListResult(msrest.serialization.Model): + """The result of a request to list import pipelines for a container registry. + + :param value: The list of import pipelines. Since this list may be incomplete, the nextLink + field should be used to request the next list of import pipelines. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipeline] + :param next_link: The URI that can be used to request the next list of pipeline runs. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ImportPipeline]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["ImportPipeline"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(ImportPipelineListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class ImportPipelineSourceProperties(msrest.serialization.Model): + """The properties of the import pipeline source. + + All required parameters must be populated in order to send to Azure. + + :param type: The type of source for the import pipeline. Possible values include: + "AzureStorageBlobContainer". Default value: "AzureStorageBlobContainer". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineSourceType + :param uri: The source uri of the import pipeline. + When 'AzureStorageBlob': "https://accountName.blob.core.windows.net/containerName/blobName" + When 'AzureStorageBlobContainer': "https://accountName.blob.core.windows.net/containerName". + :type uri: str + :param storage_access_mode: Required. The authentication mode for accessing the storage account. Possible + values include: "ManagedIdentity", "SasToken". + :type storage_access_mode: str + :param key_vault_uri: They key vault secret uri to obtain the source storage SAS + token. + :type key_vault_uri: str + """ + + _validation = { + 'storage_access_mode': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'uri': {'key': 'uri', 'type': 'str'}, + 'storage_access_mode': {'key': 'storageAccessMode', 'type': 'str'}, + 'key_vault_uri': {'key': 'keyVaultUri', 'type': 'str'}, + } + + def __init__( + self, + *, + storage_access_mode: str, + type: Optional[Union[str, "PipelineSourceType"]] = "AzureStorageBlobContainer", + uri: Optional[str] = None, + key_vault_uri: Optional[str] = None, + **kwargs + ): + super(ImportPipelineSourceProperties, self).__init__(**kwargs) + self.type = type + self.uri = uri + self.storage_access_mode = storage_access_mode + self.key_vault_uri = key_vault_uri + + +class ImportSource(msrest.serialization.Model): + """ImportSource. + + All required parameters must be populated in order to send to Azure. + + :param resource_id: The resource identifier of the source Azure Container Registry. + :type resource_id: str + :param registry_uri: The address of the source registry (e.g. 'mcr.microsoft.com'). + :type registry_uri: str + :param credentials: Credentials used when importing from a registry uri. + :type credentials: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportSourceCredentials + :param source_image: Required. Repository name of the source image. + Specify an image by repository ('hello-world'). This will use the 'latest' tag. + Specify an image by tag ('hello-world:latest'). + Specify an image by sha256-based manifest digest ('hello-world@sha256:abc123'). + :type source_image: str + """ + + _validation = { + 'source_image': {'required': True}, + } + + _attribute_map = { + 'resource_id': {'key': 'resourceId', 'type': 'str'}, + 'registry_uri': {'key': 'registryUri', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'ImportSourceCredentials'}, + 'source_image': {'key': 'sourceImage', 'type': 'str'}, + } + + def __init__( + self, + *, + source_image: str, + resource_id: Optional[str] = None, + registry_uri: Optional[str] = None, + credentials: Optional["ImportSourceCredentials"] = None, + **kwargs + ): + super(ImportSource, self).__init__(**kwargs) + self.resource_id = resource_id + self.registry_uri = registry_uri + self.credentials = credentials + self.source_image = source_image + + +class ImportSourceCredentials(msrest.serialization.Model): + """ImportSourceCredentials. + + All required parameters must be populated in order to send to Azure. + + :param username: The username to authenticate with the source registry. + :type username: str + :param password: Required. The password used to authenticate with the source registry. + :type password: str + """ + + _validation = { + 'password': {'required': True}, + } + + _attribute_map = { + 'username': {'key': 'username', 'type': 'str'}, + 'password': {'key': 'password', 'type': 'str'}, + } + + def __init__( + self, + *, + password: str, + username: Optional[str] = None, + **kwargs + ): + super(ImportSourceCredentials, self).__init__(**kwargs) + self.username = username + self.password = password + + +class InnerErrorDescription(msrest.serialization.Model): + """inner error. + + All required parameters must be populated in order to send to Azure. + + :param code: Required. error code. + :type code: str + :param message: Required. error message. + :type message: str + :param target: target of the particular error. + :type target: str + """ + + _validation = { + 'code': {'required': True}, + 'message': {'required': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + } + + def __init__( + self, + *, + code: str, + message: str, + target: Optional[str] = None, + **kwargs + ): + super(InnerErrorDescription, self).__init__(**kwargs) + self.code = code + self.message = message + self.target = target + + +class IPRule(msrest.serialization.Model): + """IP rule with specific IP or IP range in CIDR format. + + All required parameters must be populated in order to send to Azure. + + :param action: The action of IP ACL rule. Possible values include: "Allow". + :type action: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Action + :param ip_address_or_range: Required. Specifies the IP or IP range in CIDR format. Only IPV4 + address is allowed. + :type ip_address_or_range: str + """ + + _validation = { + 'ip_address_or_range': {'required': True}, + } + + _attribute_map = { + 'action': {'key': 'action', 'type': 'str'}, + 'ip_address_or_range': {'key': 'value', 'type': 'str'}, + } + + def __init__( + self, + *, + ip_address_or_range: str, + action: Optional[Union[str, "Action"]] = None, + **kwargs + ): + super(IPRule, self).__init__(**kwargs) + self.action = action + self.ip_address_or_range = ip_address_or_range + + +class KeyVaultProperties(msrest.serialization.Model): + """KeyVaultProperties. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param key_identifier: Key vault uri to access the encryption key. + :type key_identifier: str + :ivar versioned_key_identifier: The fully qualified key identifier that includes the version of + the key that is actually used for encryption. + :vartype versioned_key_identifier: str + :param identity: The client id of the identity which will be used to access key vault. + :type identity: str + """ + + _validation = { + 'versioned_key_identifier': {'readonly': True}, + } + + _attribute_map = { + 'key_identifier': {'key': 'keyIdentifier', 'type': 'str'}, + 'versioned_key_identifier': {'key': 'versionedKeyIdentifier', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'str'}, + } + + def __init__( + self, + *, + key_identifier: Optional[str] = None, + identity: Optional[str] = None, + **kwargs + ): + super(KeyVaultProperties, self).__init__(**kwargs) + self.key_identifier = key_identifier + self.versioned_key_identifier = None + self.identity = identity + + +class NetworkRuleSet(msrest.serialization.Model): + """The network rule set for a container registry. + + All required parameters must be populated in order to send to Azure. + + :param default_action: Required. The default action of allow or deny when no other rules match. + Possible values include: "Allow", "Deny". Default value: "Allow". + :type default_action: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.DefaultAction + :param virtual_network_rules: The virtual network rules. + :type virtual_network_rules: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.VirtualNetworkRule] + :param ip_rules: The IP ACL rules. + :type ip_rules: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.IPRule] + """ + + _validation = { + 'default_action': {'required': True}, + } + + _attribute_map = { + 'default_action': {'key': 'defaultAction', 'type': 'str'}, + 'virtual_network_rules': {'key': 'virtualNetworkRules', 'type': '[VirtualNetworkRule]'}, + 'ip_rules': {'key': 'ipRules', 'type': '[IPRule]'}, + } + + def __init__( + self, + *, + default_action: Union[str, "DefaultAction"] = "Allow", + virtual_network_rules: Optional[List["VirtualNetworkRule"]] = None, + ip_rules: Optional[List["IPRule"]] = None, + **kwargs + ): + super(NetworkRuleSet, self).__init__(**kwargs) + self.default_action = default_action + self.virtual_network_rules = virtual_network_rules + self.ip_rules = ip_rules + + +class OperationDefinition(msrest.serialization.Model): + """The definition of a container registry operation. + + :param origin: The origin information of the container registry operation. + :type origin: str + :param name: Operation name: {provider}/{resource}/{operation}. + :type name: str + :param display: The display information for the container registry operation. + :type display: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationDisplayDefinition + :param service_specification: The definition of Azure Monitoring service. + :type service_specification: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationServiceSpecificationDefinition + """ + + _attribute_map = { + 'origin': {'key': 'origin', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'display': {'key': 'display', 'type': 'OperationDisplayDefinition'}, + 'service_specification': {'key': 'properties.serviceSpecification', 'type': 'OperationServiceSpecificationDefinition'}, + } + + def __init__( + self, + *, + origin: Optional[str] = None, + name: Optional[str] = None, + display: Optional["OperationDisplayDefinition"] = None, + service_specification: Optional["OperationServiceSpecificationDefinition"] = None, + **kwargs + ): + super(OperationDefinition, self).__init__(**kwargs) + self.origin = origin + self.name = name + self.display = display + self.service_specification = service_specification + + +class OperationDisplayDefinition(msrest.serialization.Model): + """The display information for a container registry operation. + + :param provider: The resource provider name: Microsoft.ContainerRegistry. + :type provider: str + :param resource: The resource on which the operation is performed. + :type resource: str + :param operation: The operation that users can perform. + :type operation: str + :param description: The description for the operation. + :type description: str + """ + + _attribute_map = { + 'provider': {'key': 'provider', 'type': 'str'}, + 'resource': {'key': 'resource', 'type': 'str'}, + 'operation': {'key': 'operation', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + *, + provider: Optional[str] = None, + resource: Optional[str] = None, + operation: Optional[str] = None, + description: Optional[str] = None, + **kwargs + ): + super(OperationDisplayDefinition, self).__init__(**kwargs) + self.provider = provider + self.resource = resource + self.operation = operation + self.description = description + + +class OperationListResult(msrest.serialization.Model): + """The result of a request to list container registry operations. + + :param value: The list of container registry operations. Since this list may be incomplete, the + nextLink field should be used to request the next list of operations. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationDefinition] + :param next_link: The URI that can be used to request the next list of container registry + operations. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OperationDefinition]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["OperationDefinition"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(OperationListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class OperationMetricSpecificationDefinition(msrest.serialization.Model): + """The definition of Azure Monitoring metric. + + :param name: Metric name. + :type name: str + :param display_name: Metric display name. + :type display_name: str + :param display_description: Metric description. + :type display_description: str + :param unit: Metric unit. + :type unit: str + :param aggregation_type: Metric aggregation type. + :type aggregation_type: str + :param internal_metric_name: Internal metric name. + :type internal_metric_name: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'display_description': {'key': 'displayDescription', 'type': 'str'}, + 'unit': {'key': 'unit', 'type': 'str'}, + 'aggregation_type': {'key': 'aggregationType', 'type': 'str'}, + 'internal_metric_name': {'key': 'internalMetricName', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[str] = None, + display_name: Optional[str] = None, + display_description: Optional[str] = None, + unit: Optional[str] = None, + aggregation_type: Optional[str] = None, + internal_metric_name: Optional[str] = None, + **kwargs + ): + super(OperationMetricSpecificationDefinition, self).__init__(**kwargs) + self.name = name + self.display_name = display_name + self.display_description = display_description + self.unit = unit + self.aggregation_type = aggregation_type + self.internal_metric_name = internal_metric_name + + +class OperationServiceSpecificationDefinition(msrest.serialization.Model): + """The definition of Azure Monitoring list. + + :param metric_specifications: A list of Azure Monitoring metrics definition. + :type metric_specifications: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationMetricSpecificationDefinition] + """ + + _attribute_map = { + 'metric_specifications': {'key': 'metricSpecifications', 'type': '[OperationMetricSpecificationDefinition]'}, + } + + def __init__( + self, + *, + metric_specifications: Optional[List["OperationMetricSpecificationDefinition"]] = None, + **kwargs + ): + super(OperationServiceSpecificationDefinition, self).__init__(**kwargs) + self.metric_specifications = metric_specifications + + +class OverrideTaskStepProperties(msrest.serialization.Model): + """OverrideTaskStepProperties. + + :param context_path: The source context against which run has to be queued. + :type context_path: str + :param file: The file against which run has to be queued. + :type file: str + :param arguments: Gets or sets the collection of override arguments to be used when + executing a build step. + :type arguments: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Argument] + :param target: The name of the target build stage for the docker build. + :type target: str + :param values: The collection of overridable values that can be passed when running a Task. + :type values: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SetValue] + :param update_trigger_token: Base64 encoded update trigger token that will be attached with the + base image trigger webhook. + :type update_trigger_token: str + """ + + _attribute_map = { + 'context_path': {'key': 'contextPath', 'type': 'str'}, + 'file': {'key': 'file', 'type': 'str'}, + 'arguments': {'key': 'arguments', 'type': '[Argument]'}, + 'target': {'key': 'target', 'type': 'str'}, + 'values': {'key': 'values', 'type': '[SetValue]'}, + 'update_trigger_token': {'key': 'updateTriggerToken', 'type': 'str'}, + } + + def __init__( + self, + *, + context_path: Optional[str] = None, + file: Optional[str] = None, + arguments: Optional[List["Argument"]] = None, + target: Optional[str] = None, + values: Optional[List["SetValue"]] = None, + update_trigger_token: Optional[str] = None, + **kwargs + ): + super(OverrideTaskStepProperties, self).__init__(**kwargs) + self.context_path = context_path + self.file = file + self.arguments = arguments + self.target = target + self.values = values + self.update_trigger_token = update_trigger_token + + +class PipelineRun(ProxyResource): + """An object that represents a pipeline run for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :ivar provisioning_state: The provisioning state of a pipeline run. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param request: The request parameters for a pipeline run. + :type request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunRequest + :ivar response: The response of a pipeline run. + :vartype response: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunResponse + :param force_update_tag: How the pipeline run should be forced to recreate even if the pipeline + run configuration has not changed. + :type force_update_tag: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'response': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'request': {'key': 'properties.request', 'type': 'PipelineRunRequest'}, + 'response': {'key': 'properties.response', 'type': 'PipelineRunResponse'}, + 'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'}, + } + + def __init__( + self, + *, + request: Optional["PipelineRunRequest"] = None, + force_update_tag: Optional[str] = None, + **kwargs + ): + super(PipelineRun, self).__init__(**kwargs) + self.provisioning_state = None + self.request = request + self.response = None + self.force_update_tag = force_update_tag + + +class PipelineRunListResult(msrest.serialization.Model): + """The result of a request to list pipeline runs for a container registry. + + :param value: The list of pipeline runs. Since this list may be incomplete, the nextLink field + should be used to request the next list of pipeline runs. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRun] + :param next_link: The URI that can be used to request the next list of pipeline runs. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[PipelineRun]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["PipelineRun"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(PipelineRunListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class PipelineRunRequest(msrest.serialization.Model): + """The request properties provided for a pipeline run. + + :param pipeline_resource_id: The resource ID of the pipeline to run. + :type pipeline_resource_id: str + :param artifacts: List of source artifacts to be transferred by the pipeline. + Specify an image by repository ('hello-world'). This will use the 'latest' tag. + Specify an image by tag ('hello-world:latest'). + Specify an image by sha256-based manifest digest ('hello-world@sha256:abc123'). + :type artifacts: list[str] + :param source: The source properties of the pipeline run. + :type source: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunSourceProperties + :param target: The target properties of the pipeline run. + :type target: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunTargetProperties + :param catalog_digest: The digest of the tar used to transfer the artifacts. + :type catalog_digest: str + """ + + _attribute_map = { + 'pipeline_resource_id': {'key': 'pipelineResourceId', 'type': 'str'}, + 'artifacts': {'key': 'artifacts', 'type': '[str]'}, + 'source': {'key': 'source', 'type': 'PipelineRunSourceProperties'}, + 'target': {'key': 'target', 'type': 'PipelineRunTargetProperties'}, + 'catalog_digest': {'key': 'catalogDigest', 'type': 'str'}, + } + + def __init__( + self, + *, + pipeline_resource_id: Optional[str] = None, + artifacts: Optional[List[str]] = None, + source: Optional["PipelineRunSourceProperties"] = None, + target: Optional["PipelineRunTargetProperties"] = None, + catalog_digest: Optional[str] = None, + **kwargs + ): + super(PipelineRunRequest, self).__init__(**kwargs) + self.pipeline_resource_id = pipeline_resource_id + self.artifacts = artifacts + self.source = source + self.target = target + self.catalog_digest = catalog_digest + + +class PipelineRunResponse(msrest.serialization.Model): + """The response properties returned for a pipeline run. + + :param status: The current status of the pipeline run. + :type status: str + :param imported_artifacts: The artifacts imported in the pipeline run. + :type imported_artifacts: list[str] + :param progress: The current progress of the copy operation. + :type progress: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProgressProperties + :param start_time: The time the pipeline run started. + :type start_time: ~datetime.datetime + :param finish_time: The time the pipeline run finished. + :type finish_time: ~datetime.datetime + :param source: The source of the pipeline run. + :type source: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipelineSourceProperties + :param target: The target of the pipeline run. + :type target: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipelineTargetProperties + :param catalog_digest: The digest of the tar used to transfer the artifacts. + :type catalog_digest: str + :param trigger: The trigger that caused the pipeline run. + :type trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineTriggerDescriptor + :param pipeline_run_error_message: The detailed error message for the pipeline run in the case + of failure. + :type pipeline_run_error_message: str + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'imported_artifacts': {'key': 'importedArtifacts', 'type': '[str]'}, + 'progress': {'key': 'progress', 'type': 'ProgressProperties'}, + 'start_time': {'key': 'startTime', 'type': 'iso-8601'}, + 'finish_time': {'key': 'finishTime', 'type': 'iso-8601'}, + 'source': {'key': 'source', 'type': 'ImportPipelineSourceProperties'}, + 'target': {'key': 'target', 'type': 'ExportPipelineTargetProperties'}, + 'catalog_digest': {'key': 'catalogDigest', 'type': 'str'}, + 'trigger': {'key': 'trigger', 'type': 'PipelineTriggerDescriptor'}, + 'pipeline_run_error_message': {'key': 'pipelineRunErrorMessage', 'type': 'str'}, + } + + def __init__( + self, + *, + status: Optional[str] = None, + imported_artifacts: Optional[List[str]] = None, + progress: Optional["ProgressProperties"] = None, + start_time: Optional[datetime.datetime] = None, + finish_time: Optional[datetime.datetime] = None, + source: Optional["ImportPipelineSourceProperties"] = None, + target: Optional["ExportPipelineTargetProperties"] = None, + catalog_digest: Optional[str] = None, + trigger: Optional["PipelineTriggerDescriptor"] = None, + pipeline_run_error_message: Optional[str] = None, + **kwargs + ): + super(PipelineRunResponse, self).__init__(**kwargs) + self.status = status + self.imported_artifacts = imported_artifacts + self.progress = progress + self.start_time = start_time + self.finish_time = finish_time + self.source = source + self.target = target + self.catalog_digest = catalog_digest + self.trigger = trigger + self.pipeline_run_error_message = pipeline_run_error_message + + +class PipelineRunSourceProperties(msrest.serialization.Model): + """PipelineRunSourceProperties. + + :param type: The type of the source. Possible values include: "AzureStorageBlob". Default + value: "AzureStorageBlob". + :type type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunSourceType + :param name: The name of the source. + :type name: str + """ + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + type: Optional[Union[str, "PipelineRunSourceType"]] = "AzureStorageBlob", + name: Optional[str] = None, + **kwargs + ): + super(PipelineRunSourceProperties, self).__init__(**kwargs) + self.type = type + self.name = name + + +class PipelineRunTargetProperties(msrest.serialization.Model): + """PipelineRunTargetProperties. + + :param type: The type of the target. Possible values include: "AzureStorageBlob". Default + value: "AzureStorageBlob". + :type type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunTargetType + :param name: The name of the target. + :type name: str + """ + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + type: Optional[Union[str, "PipelineRunTargetType"]] = "AzureStorageBlob", + name: Optional[str] = None, + **kwargs + ): + super(PipelineRunTargetProperties, self).__init__(**kwargs) + self.type = type + self.name = name + + +class PipelineSourceTriggerDescriptor(msrest.serialization.Model): + """PipelineSourceTriggerDescriptor. + + :param timestamp: The timestamp when the source update happened. + :type timestamp: ~datetime.datetime + """ + + _attribute_map = { + 'timestamp': {'key': 'timestamp', 'type': 'iso-8601'}, + } + + def __init__( + self, + *, + timestamp: Optional[datetime.datetime] = None, + **kwargs + ): + super(PipelineSourceTriggerDescriptor, self).__init__(**kwargs) + self.timestamp = timestamp + + +class PipelineSourceTriggerProperties(msrest.serialization.Model): + """PipelineSourceTriggerProperties. + + All required parameters must be populated in order to send to Azure. + + :param status: Required. The current status of the source trigger. Possible values include: + "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + """ + + _validation = { + 'status': {'required': True}, + } + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + *, + status: Union[str, "TriggerStatus"], + **kwargs + ): + super(PipelineSourceTriggerProperties, self).__init__(**kwargs) + self.status = status + + +class PipelineTriggerDescriptor(msrest.serialization.Model): + """PipelineTriggerDescriptor. + + :param source_trigger: The source trigger that caused the pipeline run. + :type source_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineSourceTriggerDescriptor + """ + + _attribute_map = { + 'source_trigger': {'key': 'sourceTrigger', 'type': 'PipelineSourceTriggerDescriptor'}, + } + + def __init__( + self, + *, + source_trigger: Optional["PipelineSourceTriggerDescriptor"] = None, + **kwargs + ): + super(PipelineTriggerDescriptor, self).__init__(**kwargs) + self.source_trigger = source_trigger + + +class PipelineTriggerProperties(msrest.serialization.Model): + """PipelineTriggerProperties. + + :param source_trigger: The source trigger properties of the pipeline. + :type source_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineSourceTriggerProperties + """ + + _attribute_map = { + 'source_trigger': {'key': 'sourceTrigger', 'type': 'PipelineSourceTriggerProperties'}, + } + + def __init__( + self, + *, + source_trigger: Optional["PipelineSourceTriggerProperties"] = None, + **kwargs + ): + super(PipelineTriggerProperties, self).__init__(**kwargs) + self.source_trigger = source_trigger + + +class PlatformProperties(msrest.serialization.Model): + """The platform properties against which the run has to happen. + + All required parameters must be populated in order to send to Azure. + + :param os: Required. The operating system type required for the run. Possible values include: + "Windows", "Linux". + :type os: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OS + :param architecture: The OS architecture. Possible values include: "amd64", "x86", "386", + "arm", "arm64". + :type architecture: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Architecture + :param variant: Variant of the CPU. Possible values include: "v6", "v7", "v8". + :type variant: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Variant + """ + + _validation = { + 'os': {'required': True}, + } + + _attribute_map = { + 'os': {'key': 'os', 'type': 'str'}, + 'architecture': {'key': 'architecture', 'type': 'str'}, + 'variant': {'key': 'variant', 'type': 'str'}, + } + + def __init__( + self, + *, + os: Union[str, "OS"], + architecture: Optional[Union[str, "Architecture"]] = None, + variant: Optional[Union[str, "Variant"]] = None, + **kwargs + ): + super(PlatformProperties, self).__init__(**kwargs) + self.os = os + self.architecture = architecture + self.variant = variant + + +class PlatformUpdateParameters(msrest.serialization.Model): + """The properties for updating the platform configuration. + + :param os: The operating system type required for the run. Possible values include: "Windows", + "Linux". + :type os: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OS + :param architecture: The OS architecture. Possible values include: "amd64", "x86", "386", + "arm", "arm64". + :type architecture: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Architecture + :param variant: Variant of the CPU. Possible values include: "v6", "v7", "v8". + :type variant: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Variant + """ + + _attribute_map = { + 'os': {'key': 'os', 'type': 'str'}, + 'architecture': {'key': 'architecture', 'type': 'str'}, + 'variant': {'key': 'variant', 'type': 'str'}, + } + + def __init__( + self, + *, + os: Optional[Union[str, "OS"]] = None, + architecture: Optional[Union[str, "Architecture"]] = None, + variant: Optional[Union[str, "Variant"]] = None, + **kwargs + ): + super(PlatformUpdateParameters, self).__init__(**kwargs) + self.os = os + self.architecture = architecture + self.variant = variant + + +class Policies(msrest.serialization.Model): + """The policies for a container registry. + + :param quarantine_policy: The quarantine policy for a container registry. + :type quarantine_policy: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.QuarantinePolicy + :param trust_policy: The content trust policy for a container registry. + :type trust_policy: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TrustPolicy + :param retention_policy: The retention policy for a container registry. + :type retention_policy: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RetentionPolicy + """ + + _attribute_map = { + 'quarantine_policy': {'key': 'quarantinePolicy', 'type': 'QuarantinePolicy'}, + 'trust_policy': {'key': 'trustPolicy', 'type': 'TrustPolicy'}, + 'retention_policy': {'key': 'retentionPolicy', 'type': 'RetentionPolicy'}, + } + + def __init__( + self, + *, + quarantine_policy: Optional["QuarantinePolicy"] = None, + trust_policy: Optional["TrustPolicy"] = None, + retention_policy: Optional["RetentionPolicy"] = None, + **kwargs + ): + super(Policies, self).__init__(**kwargs) + self.quarantine_policy = quarantine_policy + self.trust_policy = trust_policy + self.retention_policy = retention_policy + + +class PrivateEndpoint(msrest.serialization.Model): + """The Private Endpoint resource. + + :param id: This is private endpoint resource created with Microsoft.Network resource provider. + :type id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + **kwargs + ): + super(PrivateEndpoint, self).__init__(**kwargs) + self.id = id + + +class PrivateEndpointConnection(ProxyResource): + """An object that represents a private endpoint connection for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param private_endpoint: The resource of private endpoint. + :type private_endpoint: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpoint + :param private_link_service_connection_state: A collection of information about the state of + the connection between service consumer and provider. + :type private_link_service_connection_state: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateLinkServiceConnectionState + :ivar provisioning_state: The provisioning state of private endpoint connection resource. + Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpoint'}, + 'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'PrivateLinkServiceConnectionState'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + *, + private_endpoint: Optional["PrivateEndpoint"] = None, + private_link_service_connection_state: Optional["PrivateLinkServiceConnectionState"] = None, + **kwargs + ): + super(PrivateEndpointConnection, self).__init__(**kwargs) + self.private_endpoint = private_endpoint + self.private_link_service_connection_state = private_link_service_connection_state + self.provisioning_state = None + + +class PrivateEndpointConnectionListResult(msrest.serialization.Model): + """The result of a request to list private endpoint connections for a container registry. + + :param value: The list of private endpoint connections. Since this list may be incomplete, the + nextLink field should be used to request the next list of private endpoint connections. + :type value: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection] + :param next_link: The URI that can be used to request the next list of private endpoint + connections. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[PrivateEndpointConnection]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["PrivateEndpointConnection"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(PrivateEndpointConnectionListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class PrivateLinkResource(msrest.serialization.Model): + """A resource that supports private link capabilities. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar type: The resource type is private link resource. + :vartype type: str + :param id: The resource ID. + :type id: str + :param name: The name of the resource. + :type name: str + :param group_id: The private link resource group id. + :type group_id: str + :param required_members: The private link resource required member names. + :type required_members: list[str] + :param required_zone_names: The private link resource Private link DNS zone name. + :type required_zone_names: list[str] + """ + + _validation = { + 'type': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'group_id': {'key': 'properties.groupId', 'type': 'str'}, + 'required_members': {'key': 'properties.requiredMembers', 'type': '[str]'}, + 'required_zone_names': {'key': 'properties.requiredZoneNames', 'type': '[str]'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + name: Optional[str] = None, + group_id: Optional[str] = None, + required_members: Optional[List[str]] = None, + required_zone_names: Optional[List[str]] = None, + **kwargs + ): + super(PrivateLinkResource, self).__init__(**kwargs) + self.type = None + self.id = id + self.name = name + self.group_id = group_id + self.required_members = required_members + self.required_zone_names = required_zone_names + + +class PrivateLinkResourceListResult(msrest.serialization.Model): + """The result of a request to list private link resources for a container registry. + + :param value: The list of private link resources. Since this list may be incomplete, the + nextLink field should be used to request the next list of private link resources. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateLinkResource] + :param next_link: The URI that can be used to request the next list of private link resources. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[PrivateLinkResource]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["PrivateLinkResource"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(PrivateLinkResourceListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class PrivateLinkServiceConnectionState(msrest.serialization.Model): + """The state of a private link service connection. + + :param status: The private link service connection status. Possible values include: "Approved", + "Pending", "Rejected", "Disconnected". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ConnectionStatus + :param description: The description for connection status. For example if connection is + rejected it can indicate reason for rejection. + :type description: str + :param actions_required: A message indicating if changes on the service provider require any + updates on the consumer. Possible values include: "None", "Recreate". + :type actions_required: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ActionsRequired + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'actions_required': {'key': 'actionsRequired', 'type': 'str'}, + } + + def __init__( + self, + *, + status: Optional[Union[str, "ConnectionStatus"]] = None, + description: Optional[str] = None, + actions_required: Optional[Union[str, "ActionsRequired"]] = None, + **kwargs + ): + super(PrivateLinkServiceConnectionState, self).__init__(**kwargs) + self.status = status + self.description = description + self.actions_required = actions_required + + +class ProgressProperties(msrest.serialization.Model): + """ProgressProperties. + + :param percentage: The percentage complete of the copy operation. + :type percentage: str + """ + + _attribute_map = { + 'percentage': {'key': 'percentage', 'type': 'str'}, + } + + def __init__( + self, + *, + percentage: Optional[str] = None, + **kwargs + ): + super(ProgressProperties, self).__init__(**kwargs) + self.percentage = percentage + + +class QuarantinePolicy(msrest.serialization.Model): + """The quarantine policy for a container registry. + + :param status: The value that indicates whether the policy is enabled or not. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PolicyStatus + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + *, + status: Optional[Union[str, "PolicyStatus"]] = None, + **kwargs + ): + super(QuarantinePolicy, self).__init__(**kwargs) + self.status = status + + +class RegenerateCredentialParameters(msrest.serialization.Model): + """The parameters used to regenerate the login credential. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. Specifies name of the password which should be regenerated -- password + or password2. Possible values include: "password", "password2". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PasswordName + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Union[str, "PasswordName"], + **kwargs + ): + super(RegenerateCredentialParameters, self).__init__(**kwargs) + self.name = name + + +class Registry(Resource): + """An object that represents a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :param sku: Required. The SKU of the container registry. + :type sku: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Sku + :param identity: The identity of the container registry. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :ivar login_server: The URL that can be used to log into the container registry. + :vartype login_server: str + :ivar creation_date: The creation date of the container registry in ISO8601 format. + :vartype creation_date: ~datetime.datetime + :ivar provisioning_state: The provisioning state of the container registry at the time the + operation was called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", + "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :ivar status: The status of the container registry at the time the operation was called. + :vartype status: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Status + :param admin_user_enabled: The value that indicates whether the admin user is enabled. + :type admin_user_enabled: bool + :param storage_account: The properties of the storage account for the container registry. Only + applicable to Classic SKU. + :type storage_account: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.StorageAccountProperties + :param network_rule_set: The network rule set for a container registry. + :type network_rule_set: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.NetworkRuleSet + :param policies: The policies for a container registry. + :type policies: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Policies + :param encryption: The encryption settings of container registry. + :type encryption: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EncryptionProperty + :param data_endpoint_enabled: Enable a single data endpoint per region for serving data. + :type data_endpoint_enabled: bool + :ivar data_endpoint_host_names: List of host names that will serve data when + dataEndpointEnabled is true. + :vartype data_endpoint_host_names: list[str] + :ivar private_endpoint_connections: List of private endpoint connections for a container + registry. + :vartype private_endpoint_connections: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection] + :param public_network_access: Whether or not public network access is allowed for the container + registry. Possible values include: "Enabled", "Disabled". + :type public_network_access: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PublicNetworkAccess + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'sku': {'required': True}, + 'login_server': {'readonly': True}, + 'creation_date': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'status': {'readonly': True}, + 'data_endpoint_host_names': {'readonly': True}, + 'private_endpoint_connections': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'sku': {'key': 'sku', 'type': 'Sku'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'login_server': {'key': 'properties.loginServer', 'type': 'str'}, + 'creation_date': {'key': 'properties.creationDate', 'type': 'iso-8601'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'Status'}, + 'admin_user_enabled': {'key': 'properties.adminUserEnabled', 'type': 'bool'}, + 'storage_account': {'key': 'properties.storageAccount', 'type': 'StorageAccountProperties'}, + 'network_rule_set': {'key': 'properties.networkRuleSet', 'type': 'NetworkRuleSet'}, + 'policies': {'key': 'properties.policies', 'type': 'Policies'}, + 'encryption': {'key': 'properties.encryption', 'type': 'EncryptionProperty'}, + 'data_endpoint_enabled': {'key': 'properties.dataEndpointEnabled', 'type': 'bool'}, + 'data_endpoint_host_names': {'key': 'properties.dataEndpointHostNames', 'type': '[str]'}, + 'private_endpoint_connections': {'key': 'properties.privateEndpointConnections', 'type': '[PrivateEndpointConnection]'}, + 'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'}, + } + + def __init__( + self, + *, + location: str, + sku: "Sku", + tags: Optional[Dict[str, str]] = None, + identity: Optional["IdentityProperties"] = None, + admin_user_enabled: Optional[bool] = False, + storage_account: Optional["StorageAccountProperties"] = None, + network_rule_set: Optional["NetworkRuleSet"] = None, + policies: Optional["Policies"] = None, + encryption: Optional["EncryptionProperty"] = None, + data_endpoint_enabled: Optional[bool] = None, + public_network_access: Optional[Union[str, "PublicNetworkAccess"]] = None, + **kwargs + ): + super(Registry, self).__init__(location=location, tags=tags, **kwargs) + self.sku = sku + self.identity = identity + self.login_server = None + self.creation_date = None + self.provisioning_state = None + self.status = None + self.admin_user_enabled = admin_user_enabled + self.storage_account = storage_account + self.network_rule_set = network_rule_set + self.policies = policies + self.encryption = encryption + self.data_endpoint_enabled = data_endpoint_enabled + self.data_endpoint_host_names = None + self.private_endpoint_connections = None + self.public_network_access = public_network_access + + +class RegistryListCredentialsResult(msrest.serialization.Model): + """The response from the ListCredentials operation. + + :param username: The username for a container registry. + :type username: str + :param passwords: The list of passwords for a container registry. + :type passwords: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryPassword] + """ + + _attribute_map = { + 'username': {'key': 'username', 'type': 'str'}, + 'passwords': {'key': 'passwords', 'type': '[RegistryPassword]'}, + } + + def __init__( + self, + *, + username: Optional[str] = None, + passwords: Optional[List["RegistryPassword"]] = None, + **kwargs + ): + super(RegistryListCredentialsResult, self).__init__(**kwargs) + self.username = username + self.passwords = passwords + + +class RegistryListResult(msrest.serialization.Model): + """The result of a request to list container registries. + + :param value: The list of container registries. Since this list may be incomplete, the nextLink + field should be used to request the next list of container registries. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry] + :param next_link: The URI that can be used to request the next list of container registries. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Registry]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Registry"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(RegistryListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class RegistryNameCheckRequest(msrest.serialization.Model): + """A request to check whether a container registry name is available. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the container registry. + :type name: str + :ivar type: Required. The resource type of the container registry. This field must be set to + 'Microsoft.ContainerRegistry/registries'. Default value: + "Microsoft.ContainerRegistry/registries". + :vartype type: str + """ + + _validation = { + 'name': {'required': True, 'max_length': 50, 'min_length': 5, 'pattern': r'^[a-zA-Z0-9]*$'}, + 'type': {'required': True, 'constant': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + type = "Microsoft.ContainerRegistry/registries" + + def __init__( + self, + *, + name: str, + **kwargs + ): + super(RegistryNameCheckRequest, self).__init__(**kwargs) + self.name = name + + +class RegistryNameStatus(msrest.serialization.Model): + """The result of a request to check the availability of a container registry name. + + :param name_available: The value that indicates whether the name is available. + :type name_available: bool + :param reason: If any, the reason that the name is not available. + :type reason: str + :param message: If any, the error message that provides more detail for the reason that the + name is not available. + :type message: str + """ + + _attribute_map = { + 'name_available': {'key': 'nameAvailable', 'type': 'bool'}, + 'reason': {'key': 'reason', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + } + + def __init__( + self, + *, + name_available: Optional[bool] = None, + reason: Optional[str] = None, + message: Optional[str] = None, + **kwargs + ): + super(RegistryNameStatus, self).__init__(**kwargs) + self.name_available = name_available + self.reason = reason + self.message = message + + +class RegistryPassword(msrest.serialization.Model): + """The login password for the container registry. + + :param name: The password name. Possible values include: "password", "password2". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PasswordName + :param value: The password value. + :type value: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[Union[str, "PasswordName"]] = None, + value: Optional[str] = None, + **kwargs + ): + super(RegistryPassword, self).__init__(**kwargs) + self.name = name + self.value = value + + +class RegistryUpdateParameters(msrest.serialization.Model): + """The parameters for updating a container registry. + + :param tags: A set of tags. The tags for the container registry. + :type tags: dict[str, str] + :param sku: The SKU of the container registry. + :type sku: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Sku + :param identity: The identity of the container registry. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param admin_user_enabled: The value that indicates whether the admin user is enabled. + :type admin_user_enabled: bool + :param network_rule_set: The network rule set for a container registry. + :type network_rule_set: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.NetworkRuleSet + :param policies: The policies for a container registry. + :type policies: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Policies + :param encryption: The encryption settings of container registry. + :type encryption: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EncryptionProperty + :param data_endpoint_enabled: Enable a single data endpoint per region for serving data. + :type data_endpoint_enabled: bool + :param public_network_access: Whether or not public network access is allowed for the container + registry. Possible values include: "Enabled", "Disabled". + :type public_network_access: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PublicNetworkAccess + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'sku': {'key': 'sku', 'type': 'Sku'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'admin_user_enabled': {'key': 'properties.adminUserEnabled', 'type': 'bool'}, + 'network_rule_set': {'key': 'properties.networkRuleSet', 'type': 'NetworkRuleSet'}, + 'policies': {'key': 'properties.policies', 'type': 'Policies'}, + 'encryption': {'key': 'properties.encryption', 'type': 'EncryptionProperty'}, + 'data_endpoint_enabled': {'key': 'properties.dataEndpointEnabled', 'type': 'bool'}, + 'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + sku: Optional["Sku"] = None, + identity: Optional["IdentityProperties"] = None, + admin_user_enabled: Optional[bool] = None, + network_rule_set: Optional["NetworkRuleSet"] = None, + policies: Optional["Policies"] = None, + encryption: Optional["EncryptionProperty"] = None, + data_endpoint_enabled: Optional[bool] = None, + public_network_access: Optional[Union[str, "PublicNetworkAccess"]] = None, + **kwargs + ): + super(RegistryUpdateParameters, self).__init__(**kwargs) + self.tags = tags + self.sku = sku + self.identity = identity + self.admin_user_enabled = admin_user_enabled + self.network_rule_set = network_rule_set + self.policies = policies + self.encryption = encryption + self.data_endpoint_enabled = data_endpoint_enabled + self.public_network_access = public_network_access + + +class RegistryUsage(msrest.serialization.Model): + """The quota usage for a container registry. + + :param name: The name of the usage. + :type name: str + :param limit: The limit of the usage. + :type limit: long + :param current_value: The current value of the usage. + :type current_value: long + :param unit: The unit of measurement. Possible values include: "Count", "Bytes". + :type unit: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryUsageUnit + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'limit': {'key': 'limit', 'type': 'long'}, + 'current_value': {'key': 'currentValue', 'type': 'long'}, + 'unit': {'key': 'unit', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[str] = None, + limit: Optional[int] = None, + current_value: Optional[int] = None, + unit: Optional[Union[str, "RegistryUsageUnit"]] = None, + **kwargs + ): + super(RegistryUsage, self).__init__(**kwargs) + self.name = name + self.limit = limit + self.current_value = current_value + self.unit = unit + + +class RegistryUsageListResult(msrest.serialization.Model): + """The result of a request to get container registry quota usages. + + :param value: The list of container registry quota usages. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryUsage] + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[RegistryUsage]'}, + } + + def __init__( + self, + *, + value: Optional[List["RegistryUsage"]] = None, + **kwargs + ): + super(RegistryUsageListResult, self).__init__(**kwargs) + self.value = value + + +class Replication(Resource): + """An object that represents a replication for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :ivar provisioning_state: The provisioning state of the replication at the time the operation + was called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", + "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :ivar status: The status of the replication at the time the operation was called. + :vartype status: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Status + :param region_endpoint_enabled: Specifies whether the replication's regional endpoint is + enabled. Requests will not be routed to a replication whose regional endpoint is disabled, + however its data will continue to be synced with other replications. + :type region_endpoint_enabled: bool + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + 'status': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'Status'}, + 'region_endpoint_enabled': {'key': 'properties.regionEndpointEnabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + region_endpoint_enabled: Optional[bool] = True, + **kwargs + ): + super(Replication, self).__init__(location=location, tags=tags, **kwargs) + self.provisioning_state = None + self.status = None + self.region_endpoint_enabled = region_endpoint_enabled + + +class ReplicationListResult(msrest.serialization.Model): + """The result of a request to list replications for a container registry. + + :param value: The list of replications. Since this list may be incomplete, the nextLink field + should be used to request the next list of replications. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication] + :param next_link: The URI that can be used to request the next list of replications. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Replication]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Replication"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(ReplicationListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class ReplicationUpdateParameters(msrest.serialization.Model): + """The parameters for updating a replication. + + :param tags: A set of tags. The tags for the replication. + :type tags: dict[str, str] + :param region_endpoint_enabled: Specifies whether the replication's regional endpoint is + enabled. Requests will not be routed to a replication whose regional endpoint is disabled, + however its data will continue to be synced with other replications. + :type region_endpoint_enabled: bool + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'region_endpoint_enabled': {'key': 'properties.regionEndpointEnabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + region_endpoint_enabled: Optional[bool] = None, + **kwargs + ): + super(ReplicationUpdateParameters, self).__init__(**kwargs) + self.tags = tags + self.region_endpoint_enabled = region_endpoint_enabled + + +class Request(msrest.serialization.Model): + """The request that generated the event. + + :param id: The ID of the request that initiated the event. + :type id: str + :param addr: The IP or hostname and possibly port of the client connection that initiated the + event. This is the RemoteAddr from the standard http request. + :type addr: str + :param host: The externally accessible hostname of the registry instance, as specified by the + http host header on incoming requests. + :type host: str + :param method: The request method that generated the event. + :type method: str + :param useragent: The user agent header of the request. + :type useragent: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'addr': {'key': 'addr', 'type': 'str'}, + 'host': {'key': 'host', 'type': 'str'}, + 'method': {'key': 'method', 'type': 'str'}, + 'useragent': {'key': 'useragent', 'type': 'str'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + addr: Optional[str] = None, + host: Optional[str] = None, + method: Optional[str] = None, + useragent: Optional[str] = None, + **kwargs + ): + super(Request, self).__init__(**kwargs) + self.id = id + self.addr = addr + self.host = host + self.method = method + self.useragent = useragent + + +class RetentionPolicy(msrest.serialization.Model): + """The retention policy for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param days: The number of days to retain an untagged manifest after which it gets purged. + :type days: int + :ivar last_updated_time: The timestamp when the policy was last updated. + :vartype last_updated_time: ~datetime.datetime + :param status: The value that indicates whether the policy is enabled or not. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PolicyStatus + """ + + _validation = { + 'last_updated_time': {'readonly': True}, + } + + _attribute_map = { + 'days': {'key': 'days', 'type': 'int'}, + 'last_updated_time': {'key': 'lastUpdatedTime', 'type': 'iso-8601'}, + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + *, + days: Optional[int] = 7, + status: Optional[Union[str, "PolicyStatus"]] = None, + **kwargs + ): + super(RetentionPolicy, self).__init__(**kwargs) + self.days = days + self.last_updated_time = None + self.status = status + + +class Run(ProxyResource): + """Run resource properties. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param run_id: The unique identifier for the run. + :type run_id: str + :param status: The current status of the run. Possible values include: "Queued", "Started", + "Running", "Succeeded", "Failed", "Canceled", "Error", "Timeout". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunStatus + :param last_updated_time: The last updated time for the run. + :type last_updated_time: ~datetime.datetime + :param run_type: The type of run. Possible values include: "QuickBuild", "QuickRun", + "AutoBuild", "AutoRun". + :type run_type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunType + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param create_time: The time the run was scheduled. + :type create_time: ~datetime.datetime + :param start_time: The time the run started. + :type start_time: ~datetime.datetime + :param finish_time: The time the run finished. + :type finish_time: ~datetime.datetime + :param output_images: The list of all images that were generated from the run. This is + applicable if the run generates base image dependencies. + :type output_images: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImageDescriptor] + :param task: The task against which run was scheduled. + :type task: str + :param image_update_trigger: The image update trigger that caused the run. This is applicable + if the task has base image trigger configured. + :type image_update_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImageUpdateTrigger + :param source_trigger: The source trigger that caused the run. + :type source_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTriggerDescriptor + :param timer_trigger: The timer trigger that caused the run. + :type timer_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TimerTriggerDescriptor + :param platform: The platform properties against which the run will happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param source_registry_auth: The scope of the credentials that were used to login to the source + registry during this run. + :type source_registry_auth: str + :param custom_registries: The list of custom registries that were logged in during this run. + :type custom_registries: list[str] + :ivar run_error_message: The error message received from backend systems after the run is + scheduled. + :vartype run_error_message: str + :param update_trigger_token: The update trigger token passed for the Run. + :type update_trigger_token: str + :param provisioning_state: The provisioning state of a run. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :type provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param is_archive_enabled: The value that indicates whether archiving is enabled or not. + :type is_archive_enabled: bool + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'run_error_message': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'run_id': {'key': 'properties.runId', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'last_updated_time': {'key': 'properties.lastUpdatedTime', 'type': 'iso-8601'}, + 'run_type': {'key': 'properties.runType', 'type': 'str'}, + 'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'}, + 'create_time': {'key': 'properties.createTime', 'type': 'iso-8601'}, + 'start_time': {'key': 'properties.startTime', 'type': 'iso-8601'}, + 'finish_time': {'key': 'properties.finishTime', 'type': 'iso-8601'}, + 'output_images': {'key': 'properties.outputImages', 'type': '[ImageDescriptor]'}, + 'task': {'key': 'properties.task', 'type': 'str'}, + 'image_update_trigger': {'key': 'properties.imageUpdateTrigger', 'type': 'ImageUpdateTrigger'}, + 'source_trigger': {'key': 'properties.sourceTrigger', 'type': 'SourceTriggerDescriptor'}, + 'timer_trigger': {'key': 'properties.timerTrigger', 'type': 'TimerTriggerDescriptor'}, + 'platform': {'key': 'properties.platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'}, + 'source_registry_auth': {'key': 'properties.sourceRegistryAuth', 'type': 'str'}, + 'custom_registries': {'key': 'properties.customRegistries', 'type': '[str]'}, + 'run_error_message': {'key': 'properties.runErrorMessage', 'type': 'str'}, + 'update_trigger_token': {'key': 'properties.updateTriggerToken', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'is_archive_enabled': {'key': 'properties.isArchiveEnabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + run_id: Optional[str] = None, + status: Optional[Union[str, "RunStatus"]] = None, + last_updated_time: Optional[datetime.datetime] = None, + run_type: Optional[Union[str, "RunType"]] = None, + agent_pool_name: Optional[str] = None, + create_time: Optional[datetime.datetime] = None, + start_time: Optional[datetime.datetime] = None, + finish_time: Optional[datetime.datetime] = None, + output_images: Optional[List["ImageDescriptor"]] = None, + task: Optional[str] = None, + image_update_trigger: Optional["ImageUpdateTrigger"] = None, + source_trigger: Optional["SourceTriggerDescriptor"] = None, + timer_trigger: Optional["TimerTriggerDescriptor"] = None, + platform: Optional["PlatformProperties"] = None, + agent_configuration: Optional["AgentProperties"] = None, + source_registry_auth: Optional[str] = None, + custom_registries: Optional[List[str]] = None, + update_trigger_token: Optional[str] = None, + provisioning_state: Optional[Union[str, "ProvisioningState"]] = None, + is_archive_enabled: Optional[bool] = False, + **kwargs + ): + super(Run, self).__init__(**kwargs) + self.run_id = run_id + self.status = status + self.last_updated_time = last_updated_time + self.run_type = run_type + self.agent_pool_name = agent_pool_name + self.create_time = create_time + self.start_time = start_time + self.finish_time = finish_time + self.output_images = output_images + self.task = task + self.image_update_trigger = image_update_trigger + self.source_trigger = source_trigger + self.timer_trigger = timer_trigger + self.platform = platform + self.agent_configuration = agent_configuration + self.source_registry_auth = source_registry_auth + self.custom_registries = custom_registries + self.run_error_message = None + self.update_trigger_token = update_trigger_token + self.provisioning_state = provisioning_state + self.is_archive_enabled = is_archive_enabled + + +class RunFilter(msrest.serialization.Model): + """Properties that are enabled for Odata querying on runs. + + :param run_id: The unique identifier for the run. + :type run_id: str + :param run_type: The type of run. Possible values include: "QuickBuild", "QuickRun", + "AutoBuild", "AutoRun". + :type run_type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunType + :param status: The current status of the run. Possible values include: "Queued", "Started", + "Running", "Succeeded", "Failed", "Canceled", "Error", "Timeout". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunStatus + :param create_time: The create time for a run. + :type create_time: ~datetime.datetime + :param finish_time: The time the run finished. + :type finish_time: ~datetime.datetime + :param output_image_manifests: The list of comma-separated image manifests that were generated + from the run. This is applicable if the run is of + build type. + :type output_image_manifests: str + :param is_archive_enabled: The value that indicates whether archiving is enabled or not. + :type is_archive_enabled: bool + :param task_name: The name of the task that the run corresponds to. + :type task_name: str + :param agent_pool_name: The name of the agent pool that the run corresponds to. + :type agent_pool_name: str + """ + + _attribute_map = { + 'run_id': {'key': 'runId', 'type': 'str'}, + 'run_type': {'key': 'runType', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'create_time': {'key': 'createTime', 'type': 'iso-8601'}, + 'finish_time': {'key': 'finishTime', 'type': 'iso-8601'}, + 'output_image_manifests': {'key': 'outputImageManifests', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'task_name': {'key': 'taskName', 'type': 'str'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + } + + def __init__( + self, + *, + run_id: Optional[str] = None, + run_type: Optional[Union[str, "RunType"]] = None, + status: Optional[Union[str, "RunStatus"]] = None, + create_time: Optional[datetime.datetime] = None, + finish_time: Optional[datetime.datetime] = None, + output_image_manifests: Optional[str] = None, + is_archive_enabled: Optional[bool] = None, + task_name: Optional[str] = None, + agent_pool_name: Optional[str] = None, + **kwargs + ): + super(RunFilter, self).__init__(**kwargs) + self.run_id = run_id + self.run_type = run_type + self.status = status + self.create_time = create_time + self.finish_time = finish_time + self.output_image_manifests = output_image_manifests + self.is_archive_enabled = is_archive_enabled + self.task_name = task_name + self.agent_pool_name = agent_pool_name + + +class RunGetLogResult(msrest.serialization.Model): + """The result of get log link operation. + + :param log_link: The link to logs for a run on a azure container registry. + :type log_link: str + :param log_artifact_link: The link to logs in registry for a run on a azure container registry. + :type log_artifact_link: str + """ + + _attribute_map = { + 'log_link': {'key': 'logLink', 'type': 'str'}, + 'log_artifact_link': {'key': 'logArtifactLink', 'type': 'str'}, + } + + def __init__( + self, + *, + log_link: Optional[str] = None, + log_artifact_link: Optional[str] = None, + **kwargs + ): + super(RunGetLogResult, self).__init__(**kwargs) + self.log_link = log_link + self.log_artifact_link = log_artifact_link + + +class RunListResult(msrest.serialization.Model): + """Collection of runs. + + :param value: The collection value. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run] + :param next_link: The URI that can be used to request the next set of paged results. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Run]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Run"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(RunListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class RunUpdateParameters(msrest.serialization.Model): + """The set of run properties that can be updated. + + :param is_archive_enabled: The value that indicates whether archiving is enabled or not. + :type is_archive_enabled: bool + """ + + _attribute_map = { + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + is_archive_enabled: Optional[bool] = None, + **kwargs + ): + super(RunUpdateParameters, self).__init__(**kwargs) + self.is_archive_enabled = is_archive_enabled + + +class ScopeMap(ProxyResource): + """An object that represents a scope map for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param description: The user friendly description of the scope map. + :type description: str + :ivar type_properties_type: The type of the scope map. E.g. BuildIn scope map. + :vartype type_properties_type: str + :ivar creation_date: The creation date of scope map. + :vartype creation_date: ~datetime.datetime + :ivar provisioning_state: Provisioning state of the resource. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param actions: The list of scoped permissions for registry artifacts. + E.g. repositories/repository-name/content/read, + repositories/repository-name/metadata/write. + :type actions: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'type_properties_type': {'readonly': True}, + 'creation_date': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'type_properties_type': {'key': 'properties.type', 'type': 'str'}, + 'creation_date': {'key': 'properties.creationDate', 'type': 'iso-8601'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + } + + def __init__( + self, + *, + description: Optional[str] = None, + actions: Optional[List[str]] = None, + **kwargs + ): + super(ScopeMap, self).__init__(**kwargs) + self.description = description + self.type_properties_type = None + self.creation_date = None + self.provisioning_state = None + self.actions = actions + + +class ScopeMapListResult(msrest.serialization.Model): + """The result of a request to list scope maps for a container registry. + + :param value: The list of scope maps. Since this list may be incomplete, the nextLink field + should be used to request the next list of scope maps. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap] + :param next_link: The URI that can be used to request the next list of scope maps. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ScopeMap]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["ScopeMap"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(ScopeMapListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class ScopeMapUpdateParameters(msrest.serialization.Model): + """The properties for updating the scope map. + + :param description: The user friendly description of the scope map. + :type description: str + :param actions: The list of scope permissions for registry artifacts. + E.g. repositories/repository-name/pull, + repositories/repository-name/delete. + :type actions: list[str] + """ + + _attribute_map = { + 'description': {'key': 'properties.description', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + } + + def __init__( + self, + *, + description: Optional[str] = None, + actions: Optional[List[str]] = None, + **kwargs + ): + super(ScopeMapUpdateParameters, self).__init__(**kwargs) + self.description = description + self.actions = actions + + +class SecretObject(msrest.serialization.Model): + """Describes the properties of a secret object value. + + :param value: The value of the secret. The format of this value will be determined + based on the type of the secret object. If the type is Opaque, the value will be + used as is without any modification. + :type value: str + :param type: The type of the secret object which determines how the value of the secret object + has to be + interpreted. Possible values include: "Opaque", "Vaultsecret". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SecretObjectType + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[str] = None, + type: Optional[Union[str, "SecretObjectType"]] = None, + **kwargs + ): + super(SecretObject, self).__init__(**kwargs) + self.value = value + self.type = type + + +class SetValue(msrest.serialization.Model): + """The properties of a overridable value that can be passed to a task template. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the overridable value. + :type name: str + :param value: Required. The overridable value. + :type value: str + :param is_secret: Flag to indicate whether the value represents a secret or not. + :type is_secret: bool + """ + + _validation = { + 'name': {'required': True}, + 'value': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'str'}, + 'is_secret': {'key': 'isSecret', 'type': 'bool'}, + } + + def __init__( + self, + *, + name: str, + value: str, + is_secret: Optional[bool] = False, + **kwargs + ): + super(SetValue, self).__init__(**kwargs) + self.name = name + self.value = value + self.is_secret = is_secret + + +class Sku(msrest.serialization.Model): + """The SKU of a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The SKU name of the container registry. Required for registry creation. + Possible values include: "Classic", "Basic", "Standard", "Premium". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SkuName + :ivar tier: The SKU tier based on the SKU name. Possible values include: "Classic", "Basic", + "Standard", "Premium". + :vartype tier: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SkuTier + """ + + _validation = { + 'name': {'required': True}, + 'tier': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'tier': {'key': 'tier', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Union[str, "SkuName"], + **kwargs + ): + super(Sku, self).__init__(**kwargs) + self.name = name + self.tier = None + + +class Source(msrest.serialization.Model): + """The registry node that generated the event. Put differently, while the actor initiates the event, the source generates it. + + :param addr: The IP or hostname and the port of the registry node that generated the event. + Generally, this will be resolved by os.Hostname() along with the running port. + :type addr: str + :param instance_id: The running instance of an application. Changes after each restart. + :type instance_id: str + """ + + _attribute_map = { + 'addr': {'key': 'addr', 'type': 'str'}, + 'instance_id': {'key': 'instanceID', 'type': 'str'}, + } + + def __init__( + self, + *, + addr: Optional[str] = None, + instance_id: Optional[str] = None, + **kwargs + ): + super(Source, self).__init__(**kwargs) + self.addr = addr + self.instance_id = instance_id + + +class SourceProperties(msrest.serialization.Model): + """The properties of the source code repository. + + All required parameters must be populated in order to send to Azure. + + :param source_control_type: Required. The type of source control service. Possible values + include: "Github", "VisualStudioTeamService". + :type source_control_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceControlType + :param repository_url: Required. The full URL to the source code repository. + :type repository_url: str + :param branch: The branch name of the source code. + :type branch: str + :param source_control_auth_properties: The authorization properties for accessing the source + code repository and to set up + webhooks for notifications. + :type source_control_auth_properties: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AuthInfo + """ + + _validation = { + 'source_control_type': {'required': True}, + 'repository_url': {'required': True}, + } + + _attribute_map = { + 'source_control_type': {'key': 'sourceControlType', 'type': 'str'}, + 'repository_url': {'key': 'repositoryUrl', 'type': 'str'}, + 'branch': {'key': 'branch', 'type': 'str'}, + 'source_control_auth_properties': {'key': 'sourceControlAuthProperties', 'type': 'AuthInfo'}, + } + + def __init__( + self, + *, + source_control_type: Union[str, "SourceControlType"], + repository_url: str, + branch: Optional[str] = None, + source_control_auth_properties: Optional["AuthInfo"] = None, + **kwargs + ): + super(SourceProperties, self).__init__(**kwargs) + self.source_control_type = source_control_type + self.repository_url = repository_url + self.branch = branch + self.source_control_auth_properties = source_control_auth_properties + + +class SourceRegistryCredentials(msrest.serialization.Model): + """Describes the credential parameters for accessing the source registry. + + :param login_mode: The authentication mode which determines the source registry login scope. + The credentials for the source registry + will be generated using the given scope. These credentials will be used to login to + the source registry during the run. Possible values include: "None", "Default". + :type login_mode: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceRegistryLoginMode + """ + + _attribute_map = { + 'login_mode': {'key': 'loginMode', 'type': 'str'}, + } + + def __init__( + self, + *, + login_mode: Optional[Union[str, "SourceRegistryLoginMode"]] = None, + **kwargs + ): + super(SourceRegistryCredentials, self).__init__(**kwargs) + self.login_mode = login_mode + + +class SourceTrigger(msrest.serialization.Model): + """The properties of a source based trigger. + + All required parameters must be populated in order to send to Azure. + + :param source_repository: Required. The properties that describes the source(code) for the + task. + :type source_repository: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceProperties + :param source_trigger_events: Required. The source event corresponding to the trigger. + :type source_trigger_events: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTriggerEvent] + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'source_repository': {'required': True}, + 'source_trigger_events': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'source_repository': {'key': 'sourceRepository', 'type': 'SourceProperties'}, + 'source_trigger_events': {'key': 'sourceTriggerEvents', 'type': '[str]'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + source_repository: "SourceProperties", + source_trigger_events: List[Union[str, "SourceTriggerEvent"]], + name: str, + status: Optional[Union[str, "TriggerStatus"]] = None, + **kwargs + ): + super(SourceTrigger, self).__init__(**kwargs) + self.source_repository = source_repository + self.source_trigger_events = source_trigger_events + self.status = status + self.name = name + + +class SourceTriggerDescriptor(msrest.serialization.Model): + """The source trigger that caused a run. + + :param id: The unique ID of the trigger. + :type id: str + :param event_type: The event type of the trigger. + :type event_type: str + :param commit_id: The unique ID that identifies a commit. + :type commit_id: str + :param pull_request_id: The unique ID that identifies pull request. + :type pull_request_id: str + :param repository_url: The repository URL. + :type repository_url: str + :param branch_name: The branch name in the repository. + :type branch_name: str + :param provider_type: The source control provider type. + :type provider_type: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'event_type': {'key': 'eventType', 'type': 'str'}, + 'commit_id': {'key': 'commitId', 'type': 'str'}, + 'pull_request_id': {'key': 'pullRequestId', 'type': 'str'}, + 'repository_url': {'key': 'repositoryUrl', 'type': 'str'}, + 'branch_name': {'key': 'branchName', 'type': 'str'}, + 'provider_type': {'key': 'providerType', 'type': 'str'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + event_type: Optional[str] = None, + commit_id: Optional[str] = None, + pull_request_id: Optional[str] = None, + repository_url: Optional[str] = None, + branch_name: Optional[str] = None, + provider_type: Optional[str] = None, + **kwargs + ): + super(SourceTriggerDescriptor, self).__init__(**kwargs) + self.id = id + self.event_type = event_type + self.commit_id = commit_id + self.pull_request_id = pull_request_id + self.repository_url = repository_url + self.branch_name = branch_name + self.provider_type = provider_type + + +class SourceTriggerUpdateParameters(msrest.serialization.Model): + """The properties for updating a source based trigger. + + All required parameters must be populated in order to send to Azure. + + :param source_repository: The properties that describes the source(code) for the task. + :type source_repository: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceUpdateParameters + :param source_trigger_events: The source event corresponding to the trigger. + :type source_trigger_events: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTriggerEvent] + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'source_repository': {'key': 'sourceRepository', 'type': 'SourceUpdateParameters'}, + 'source_trigger_events': {'key': 'sourceTriggerEvents', 'type': '[str]'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + source_repository: Optional["SourceUpdateParameters"] = None, + source_trigger_events: Optional[List[Union[str, "SourceTriggerEvent"]]] = None, + status: Optional[Union[str, "TriggerStatus"]] = None, + **kwargs + ): + super(SourceTriggerUpdateParameters, self).__init__(**kwargs) + self.source_repository = source_repository + self.source_trigger_events = source_trigger_events + self.status = status + self.name = name + + +class SourceUpdateParameters(msrest.serialization.Model): + """The properties for updating the source code repository. + + :param source_control_type: The type of source control service. Possible values include: + "Github", "VisualStudioTeamService". + :type source_control_type: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceControlType + :param repository_url: The full URL to the source code repository. + :type repository_url: str + :param branch: The branch name of the source code. + :type branch: str + :param source_control_auth_properties: The authorization properties for accessing the source + code repository and to set up + webhooks for notifications. + :type source_control_auth_properties: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AuthInfoUpdateParameters + """ + + _attribute_map = { + 'source_control_type': {'key': 'sourceControlType', 'type': 'str'}, + 'repository_url': {'key': 'repositoryUrl', 'type': 'str'}, + 'branch': {'key': 'branch', 'type': 'str'}, + 'source_control_auth_properties': {'key': 'sourceControlAuthProperties', 'type': 'AuthInfoUpdateParameters'}, + } + + def __init__( + self, + *, + source_control_type: Optional[Union[str, "SourceControlType"]] = None, + repository_url: Optional[str] = None, + branch: Optional[str] = None, + source_control_auth_properties: Optional["AuthInfoUpdateParameters"] = None, + **kwargs + ): + super(SourceUpdateParameters, self).__init__(**kwargs) + self.source_control_type = source_control_type + self.repository_url = repository_url + self.branch = branch + self.source_control_auth_properties = source_control_auth_properties + + +class SourceUploadDefinition(msrest.serialization.Model): + """The properties of a response to source upload request. + + :param upload_url: The URL where the client can upload the source. + :type upload_url: str + :param relative_path: The relative path to the source. This is used to submit the subsequent + queue build request. + :type relative_path: str + """ + + _attribute_map = { + 'upload_url': {'key': 'uploadUrl', 'type': 'str'}, + 'relative_path': {'key': 'relativePath', 'type': 'str'}, + } + + def __init__( + self, + *, + upload_url: Optional[str] = None, + relative_path: Optional[str] = None, + **kwargs + ): + super(SourceUploadDefinition, self).__init__(**kwargs) + self.upload_url = upload_url + self.relative_path = relative_path + + +class Status(msrest.serialization.Model): + """The status of an Azure resource at the time the operation was called. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar display_status: The short label for the status. + :vartype display_status: str + :ivar message: The detailed message for the status, including alerts and error messages. + :vartype message: str + :ivar timestamp: The timestamp when the status was changed to the current value. + :vartype timestamp: ~datetime.datetime + """ + + _validation = { + 'display_status': {'readonly': True}, + 'message': {'readonly': True}, + 'timestamp': {'readonly': True}, + } + + _attribute_map = { + 'display_status': {'key': 'displayStatus', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'timestamp': {'key': 'timestamp', 'type': 'iso-8601'}, + } + + def __init__( + self, + **kwargs + ): + super(Status, self).__init__(**kwargs) + self.display_status = None + self.message = None + self.timestamp = None + + +class StorageAccountProperties(msrest.serialization.Model): + """The properties of a storage account for a container registry. Only applicable to Classic SKU. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. The resource ID of the storage account. + :type id: str + """ + + _validation = { + 'id': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + *, + id: str, + **kwargs + ): + super(StorageAccountProperties, self).__init__(**kwargs) + self.id = id + + +class Target(msrest.serialization.Model): + """The target of the event. + + :param media_type: The MIME type of the referenced object. + :type media_type: str + :param size: The number of bytes of the content. Same as Length field. + :type size: long + :param digest: The digest of the content, as defined by the Registry V2 HTTP API Specification. + :type digest: str + :param length: The number of bytes of the content. Same as Size field. + :type length: long + :param repository: The repository name. + :type repository: str + :param url: The direct URL to the content. + :type url: str + :param tag: The tag name. + :type tag: str + :param name: The name of the artifact. + :type name: str + :param version: The version of the artifact. + :type version: str + """ + + _attribute_map = { + 'media_type': {'key': 'mediaType', 'type': 'str'}, + 'size': {'key': 'size', 'type': 'long'}, + 'digest': {'key': 'digest', 'type': 'str'}, + 'length': {'key': 'length', 'type': 'long'}, + 'repository': {'key': 'repository', 'type': 'str'}, + 'url': {'key': 'url', 'type': 'str'}, + 'tag': {'key': 'tag', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + } + + def __init__( + self, + *, + media_type: Optional[str] = None, + size: Optional[int] = None, + digest: Optional[str] = None, + length: Optional[int] = None, + repository: Optional[str] = None, + url: Optional[str] = None, + tag: Optional[str] = None, + name: Optional[str] = None, + version: Optional[str] = None, + **kwargs + ): + super(Target, self).__init__(**kwargs) + self.media_type = media_type + self.size = size + self.digest = digest + self.length = length + self.repository = repository + self.url = url + self.tag = tag + self.name = name + self.version = version + + +class Task(Resource): + """The task that has the ARM resource and task properties. +The task will have all information to schedule a run against it. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :param identity: Identity for the resource. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :ivar provisioning_state: The provisioning state of the task. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :ivar creation_date: The creation date of task. + :vartype creation_date: ~datetime.datetime + :param status: The current status of task. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskStatus + :param platform: The platform properties against which the run has to happen. + :type platform: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformProperties + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param agent_pool_name: The dedicated agent pool for the task. + :type agent_pool_name: str + :param timeout: Run timeout in seconds. + :type timeout: int + :param step: The properties of a task step. + :type step: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskStepProperties + :param trigger: The properties that describe all triggers for the task. + :type trigger: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerProperties + :param credentials: The properties that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + 'creation_date': {'readonly': True}, + 'timeout': {'maximum': 28800, 'minimum': 300}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'creation_date': {'key': 'properties.creationDate', 'type': 'iso-8601'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'platform': {'key': 'properties.platform', 'type': 'PlatformProperties'}, + 'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'}, + 'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'}, + 'timeout': {'key': 'properties.timeout', 'type': 'int'}, + 'step': {'key': 'properties.step', 'type': 'TaskStepProperties'}, + 'trigger': {'key': 'properties.trigger', 'type': 'TriggerProperties'}, + 'credentials': {'key': 'properties.credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + identity: Optional["IdentityProperties"] = None, + status: Optional[Union[str, "TaskStatus"]] = None, + platform: Optional["PlatformProperties"] = None, + agent_configuration: Optional["AgentProperties"] = None, + agent_pool_name: Optional[str] = None, + timeout: Optional[int] = 3600, + step: Optional["TaskStepProperties"] = None, + trigger: Optional["TriggerProperties"] = None, + credentials: Optional["Credentials"] = None, + **kwargs + ): + super(Task, self).__init__(location=location, tags=tags, **kwargs) + self.identity = identity + self.provisioning_state = None + self.creation_date = None + self.status = status + self.platform = platform + self.agent_configuration = agent_configuration + self.agent_pool_name = agent_pool_name + self.timeout = timeout + self.step = step + self.trigger = trigger + self.credentials = credentials + + +class TaskListResult(msrest.serialization.Model): + """The collection of tasks. + + :param value: The collection value. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task] + :param next_link: The URI that can be used to request the next set of paged results. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Task]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Task"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(TaskListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class TaskRun(ProxyResource): + """The task run that has the ARM resource and properties. +The task run will have the information of request and result of a run. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param identity: Identity for the resource. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param location: The location of the resource. + :type location: str + :ivar provisioning_state: The provisioning state of this task run. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param run_request: The request (parameters) for the run. + :type run_request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunRequest + :ivar run_result: The result of this task run. + :vartype run_result: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run + :param force_update_tag: How the run should be forced to rerun even if the run request + configuration has not changed. + :type force_update_tag: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'run_result': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'location': {'key': 'location', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'run_request': {'key': 'properties.runRequest', 'type': 'RunRequest'}, + 'run_result': {'key': 'properties.runResult', 'type': 'Run'}, + 'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'}, + } + + def __init__( + self, + *, + identity: Optional["IdentityProperties"] = None, + location: Optional[str] = None, + run_request: Optional["RunRequest"] = None, + force_update_tag: Optional[str] = None, + **kwargs + ): + super(TaskRun, self).__init__(**kwargs) + self.identity = identity + self.location = location + self.provisioning_state = None + self.run_request = run_request + self.run_result = None + self.force_update_tag = force_update_tag + + +class TaskRunListResult(msrest.serialization.Model): + """The collection of task runs. + + :param value: The collection value. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun] + :param next_link: The URI that can be used to request the next set of paged results. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[TaskRun]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["TaskRun"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(TaskRunListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class TaskRunRequest(RunRequest): + """The parameters for a task run request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. The type of the run request.Constant filled by server. + :type type: str + :param is_archive_enabled: The value that indicates whether archiving is enabled for the run or + not. + :type is_archive_enabled: bool + :param agent_pool_name: The dedicated agent pool for the run. + :type agent_pool_name: str + :param task_id: Required. The resource ID of task against which run has to be queued. + :type task_id: str + :param override_task_step_properties: Set of overridable parameters that can be passed when + running a Task. + :type override_task_step_properties: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.OverrideTaskStepProperties + """ + + _validation = { + 'type': {'required': True}, + 'task_id': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'is_archive_enabled': {'key': 'isArchiveEnabled', 'type': 'bool'}, + 'agent_pool_name': {'key': 'agentPoolName', 'type': 'str'}, + 'task_id': {'key': 'taskId', 'type': 'str'}, + 'override_task_step_properties': {'key': 'overrideTaskStepProperties', 'type': 'OverrideTaskStepProperties'}, + } + + def __init__( + self, + *, + task_id: str, + is_archive_enabled: Optional[bool] = False, + agent_pool_name: Optional[str] = None, + override_task_step_properties: Optional["OverrideTaskStepProperties"] = None, + **kwargs + ): + super(TaskRunRequest, self).__init__(is_archive_enabled=is_archive_enabled, agent_pool_name=agent_pool_name, **kwargs) + self.type = 'TaskRunRequest' # type: str + self.task_id = task_id + self.override_task_step_properties = override_task_step_properties + + +class TaskRunUpdateParameters(msrest.serialization.Model): + """The parameters for updating a task run. + + :param identity: Identity for the resource. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param location: The location of the resource. + :type location: str + :param tags: A set of tags. The ARM resource tags. + :type tags: dict[str, str] + :param run_request: The request (parameters) for the new run. + :type run_request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunRequest + :param force_update_tag: How the run should be forced to rerun even if the run request + configuration has not changed. + :type force_update_tag: str + """ + + _attribute_map = { + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'run_request': {'key': 'properties.runRequest', 'type': 'RunRequest'}, + 'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'}, + } + + def __init__( + self, + *, + identity: Optional["IdentityProperties"] = None, + location: Optional[str] = None, + tags: Optional[Dict[str, str]] = None, + run_request: Optional["RunRequest"] = None, + force_update_tag: Optional[str] = None, + **kwargs + ): + super(TaskRunUpdateParameters, self).__init__(**kwargs) + self.identity = identity + self.location = location + self.tags = tags + self.run_request = run_request + self.force_update_tag = force_update_tag + + +class TaskUpdateParameters(msrest.serialization.Model): + """The parameters for updating a task. + + :param identity: Identity for the resource. + :type identity: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.IdentityProperties + :param tags: A set of tags. The ARM resource tags. + :type tags: dict[str, str] + :param status: The current status of task. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskStatus + :param platform: The platform properties against which the run has to happen. + :type platform: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PlatformUpdateParameters + :param agent_configuration: The machine configuration of the run agent. + :type agent_configuration: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentProperties + :param agent_pool_name: The dedicated agent pool for the task. + :type agent_pool_name: str + :param timeout: Run timeout in seconds. + :type timeout: int + :param step: The properties for updating a task step. + :type step: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskStepUpdateParameters + :param trigger: The properties for updating trigger properties. + :type trigger: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerUpdateParameters + :param credentials: The parameters that describes a set of credentials that will be used when + this run is invoked. + :type credentials: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Credentials + """ + + _attribute_map = { + 'identity': {'key': 'identity', 'type': 'IdentityProperties'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'platform': {'key': 'properties.platform', 'type': 'PlatformUpdateParameters'}, + 'agent_configuration': {'key': 'properties.agentConfiguration', 'type': 'AgentProperties'}, + 'agent_pool_name': {'key': 'properties.agentPoolName', 'type': 'str'}, + 'timeout': {'key': 'properties.timeout', 'type': 'int'}, + 'step': {'key': 'properties.step', 'type': 'TaskStepUpdateParameters'}, + 'trigger': {'key': 'properties.trigger', 'type': 'TriggerUpdateParameters'}, + 'credentials': {'key': 'properties.credentials', 'type': 'Credentials'}, + } + + def __init__( + self, + *, + identity: Optional["IdentityProperties"] = None, + tags: Optional[Dict[str, str]] = None, + status: Optional[Union[str, "TaskStatus"]] = None, + platform: Optional["PlatformUpdateParameters"] = None, + agent_configuration: Optional["AgentProperties"] = None, + agent_pool_name: Optional[str] = None, + timeout: Optional[int] = None, + step: Optional["TaskStepUpdateParameters"] = None, + trigger: Optional["TriggerUpdateParameters"] = None, + credentials: Optional["Credentials"] = None, + **kwargs + ): + super(TaskUpdateParameters, self).__init__(**kwargs) + self.identity = identity + self.tags = tags + self.status = status + self.platform = platform + self.agent_configuration = agent_configuration + self.agent_pool_name = agent_pool_name + self.timeout = timeout + self.step = step + self.trigger = trigger + self.credentials = credentials + + +class TimerTrigger(msrest.serialization.Model): + """The properties of a timer trigger. + + All required parameters must be populated in order to send to Azure. + + :param schedule: Required. The CRON expression for the task schedule. + :type schedule: str + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'schedule': {'required': True}, + 'name': {'required': True}, + } + + _attribute_map = { + 'schedule': {'key': 'schedule', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + schedule: str, + name: str, + status: Optional[Union[str, "TriggerStatus"]] = None, + **kwargs + ): + super(TimerTrigger, self).__init__(**kwargs) + self.schedule = schedule + self.status = status + self.name = name + + +class TimerTriggerDescriptor(msrest.serialization.Model): + """TimerTriggerDescriptor. + + :param timer_trigger_name: The timer trigger name that caused the run. + :type timer_trigger_name: str + :param schedule_occurrence: The occurrence that triggered the run. + :type schedule_occurrence: str + """ + + _attribute_map = { + 'timer_trigger_name': {'key': 'timerTriggerName', 'type': 'str'}, + 'schedule_occurrence': {'key': 'scheduleOccurrence', 'type': 'str'}, + } + + def __init__( + self, + *, + timer_trigger_name: Optional[str] = None, + schedule_occurrence: Optional[str] = None, + **kwargs + ): + super(TimerTriggerDescriptor, self).__init__(**kwargs) + self.timer_trigger_name = timer_trigger_name + self.schedule_occurrence = schedule_occurrence + + +class TimerTriggerUpdateParameters(msrest.serialization.Model): + """The properties for updating a timer trigger. + + All required parameters must be populated in order to send to Azure. + + :param schedule: The CRON expression for the task schedule. + :type schedule: str + :param status: The current status of trigger. Possible values include: "Disabled", "Enabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TriggerStatus + :param name: Required. The name of the trigger. + :type name: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'schedule': {'key': 'schedule', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + schedule: Optional[str] = None, + status: Optional[Union[str, "TriggerStatus"]] = None, + **kwargs + ): + super(TimerTriggerUpdateParameters, self).__init__(**kwargs) + self.schedule = schedule + self.status = status + self.name = name + + +class Token(ProxyResource): + """An object that represents a token for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :ivar creation_date: The creation date of scope map. + :vartype creation_date: ~datetime.datetime + :ivar provisioning_state: Provisioning state of the resource. Possible values include: + "Creating", "Updating", "Deleting", "Succeeded", "Failed", "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + :param scope_map_id: The resource ID of the scope map to which the token will be associated + with. + :type scope_map_id: str + :param credentials: The credentials that can be used for authenticating the token. + :type credentials: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenCredentialsProperties + :param status: The status of the token example enabled or disabled. Possible values include: + "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenStatus + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'creation_date': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'creation_date': {'key': 'properties.creationDate', 'type': 'iso-8601'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'scope_map_id': {'key': 'properties.scopeMapId', 'type': 'str'}, + 'credentials': {'key': 'properties.credentials', 'type': 'TokenCredentialsProperties'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + } + + def __init__( + self, + *, + scope_map_id: Optional[str] = None, + credentials: Optional["TokenCredentialsProperties"] = None, + status: Optional[Union[str, "TokenStatus"]] = None, + **kwargs + ): + super(Token, self).__init__(**kwargs) + self.creation_date = None + self.provisioning_state = None + self.scope_map_id = scope_map_id + self.credentials = credentials + self.status = status + + +class TokenCertificate(msrest.serialization.Model): + """The properties of a certificate used for authenticating a token. + + :param name: Possible values include: "certificate1", "certificate2". + :type name: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenCertificateName + :param expiry: The expiry datetime of the certificate. + :type expiry: ~datetime.datetime + :param thumbprint: The thumbprint of the certificate. + :type thumbprint: str + :param encoded_pem_certificate: Base 64 encoded string of the public certificate1 in PEM format + that will be used for authenticating the token. + :type encoded_pem_certificate: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'expiry': {'key': 'expiry', 'type': 'iso-8601'}, + 'thumbprint': {'key': 'thumbprint', 'type': 'str'}, + 'encoded_pem_certificate': {'key': 'encodedPemCertificate', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[Union[str, "TokenCertificateName"]] = None, + expiry: Optional[datetime.datetime] = None, + thumbprint: Optional[str] = None, + encoded_pem_certificate: Optional[str] = None, + **kwargs + ): + super(TokenCertificate, self).__init__(**kwargs) + self.name = name + self.expiry = expiry + self.thumbprint = thumbprint + self.encoded_pem_certificate = encoded_pem_certificate + + +class TokenCredentialsProperties(msrest.serialization.Model): + """The properties of the credentials that can be used for authenticating the token. + + :param active_directory_object: The Active Directory Object that will be used for + authenticating the token of a container registry. + :type active_directory_object: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ActiveDirectoryObject + :param certificates: + :type certificates: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenCertificate] + :param passwords: + :type passwords: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenPassword] + """ + + _attribute_map = { + 'active_directory_object': {'key': 'activeDirectoryObject', 'type': 'ActiveDirectoryObject'}, + 'certificates': {'key': 'certificates', 'type': '[TokenCertificate]'}, + 'passwords': {'key': 'passwords', 'type': '[TokenPassword]'}, + } + + def __init__( + self, + *, + active_directory_object: Optional["ActiveDirectoryObject"] = None, + certificates: Optional[List["TokenCertificate"]] = None, + passwords: Optional[List["TokenPassword"]] = None, + **kwargs + ): + super(TokenCredentialsProperties, self).__init__(**kwargs) + self.active_directory_object = active_directory_object + self.certificates = certificates + self.passwords = passwords + + +class TokenListResult(msrest.serialization.Model): + """The result of a request to list tokens for a container registry. + + :param value: The list of tokens. Since this list may be incomplete, the nextLink field should + be used to request the next list of tokens. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token] + :param next_link: The URI that can be used to request the next list of tokens. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Token]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Token"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(TokenListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class TokenPassword(msrest.serialization.Model): + """The password that will be used for authenticating the token of a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param creation_time: The creation datetime of the password. + :type creation_time: ~datetime.datetime + :param expiry: The expiry datetime of the password. + :type expiry: ~datetime.datetime + :param name: The password name "password1" or "password2". Possible values include: + "password1", "password2". + :type name: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenPasswordName + :ivar value: The password value. + :vartype value: str + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'creation_time': {'key': 'creationTime', 'type': 'iso-8601'}, + 'expiry': {'key': 'expiry', 'type': 'iso-8601'}, + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'str'}, + } + + def __init__( + self, + *, + creation_time: Optional[datetime.datetime] = None, + expiry: Optional[datetime.datetime] = None, + name: Optional[Union[str, "TokenPasswordName"]] = None, + **kwargs + ): + super(TokenPassword, self).__init__(**kwargs) + self.creation_time = creation_time + self.expiry = expiry + self.name = name + self.value = None + + +class TokenUpdateParameters(msrest.serialization.Model): + """The parameters for updating a token. + + :param scope_map_id: The resource ID of the scope map to which the token will be associated + with. + :type scope_map_id: str + :param status: The status of the token example enabled or disabled. Possible values include: + "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenStatus + :param credentials: The credentials that can be used for authenticating the token. + :type credentials: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenCredentialsProperties + """ + + _attribute_map = { + 'scope_map_id': {'key': 'properties.scopeMapId', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'credentials': {'key': 'properties.credentials', 'type': 'TokenCredentialsProperties'}, + } + + def __init__( + self, + *, + scope_map_id: Optional[str] = None, + status: Optional[Union[str, "TokenStatus"]] = None, + credentials: Optional["TokenCredentialsProperties"] = None, + **kwargs + ): + super(TokenUpdateParameters, self).__init__(**kwargs) + self.scope_map_id = scope_map_id + self.status = status + self.credentials = credentials + + +class TriggerProperties(msrest.serialization.Model): + """The properties of a trigger. + + :param timer_triggers: The collection of timer triggers. + :type timer_triggers: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TimerTrigger] + :param source_triggers: The collection of triggers based on source code repository. + :type source_triggers: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTrigger] + :param base_image_trigger: The trigger based on base image dependencies. + :type base_image_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageTrigger + """ + + _attribute_map = { + 'timer_triggers': {'key': 'timerTriggers', 'type': '[TimerTrigger]'}, + 'source_triggers': {'key': 'sourceTriggers', 'type': '[SourceTrigger]'}, + 'base_image_trigger': {'key': 'baseImageTrigger', 'type': 'BaseImageTrigger'}, + } + + def __init__( + self, + *, + timer_triggers: Optional[List["TimerTrigger"]] = None, + source_triggers: Optional[List["SourceTrigger"]] = None, + base_image_trigger: Optional["BaseImageTrigger"] = None, + **kwargs + ): + super(TriggerProperties, self).__init__(**kwargs) + self.timer_triggers = timer_triggers + self.source_triggers = source_triggers + self.base_image_trigger = base_image_trigger + + +class TriggerUpdateParameters(msrest.serialization.Model): + """The properties for updating triggers. + + :param timer_triggers: The collection of timer triggers. + :type timer_triggers: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TimerTriggerUpdateParameters] + :param source_triggers: The collection of triggers based on source code repository. + :type source_triggers: + list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceTriggerUpdateParameters] + :param base_image_trigger: The trigger based on base image dependencies. + :type base_image_trigger: + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.BaseImageTriggerUpdateParameters + """ + + _attribute_map = { + 'timer_triggers': {'key': 'timerTriggers', 'type': '[TimerTriggerUpdateParameters]'}, + 'source_triggers': {'key': 'sourceTriggers', 'type': '[SourceTriggerUpdateParameters]'}, + 'base_image_trigger': {'key': 'baseImageTrigger', 'type': 'BaseImageTriggerUpdateParameters'}, + } + + def __init__( + self, + *, + timer_triggers: Optional[List["TimerTriggerUpdateParameters"]] = None, + source_triggers: Optional[List["SourceTriggerUpdateParameters"]] = None, + base_image_trigger: Optional["BaseImageTriggerUpdateParameters"] = None, + **kwargs + ): + super(TriggerUpdateParameters, self).__init__(**kwargs) + self.timer_triggers = timer_triggers + self.source_triggers = source_triggers + self.base_image_trigger = base_image_trigger + + +class TrustPolicy(msrest.serialization.Model): + """The content trust policy for a container registry. + + :param type: The type of trust policy. Possible values include: "Notary". Default value: + "Notary". + :type type: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TrustPolicyType + :param status: The value that indicates whether the policy is enabled or not. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PolicyStatus + """ + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + *, + type: Optional[Union[str, "TrustPolicyType"]] = "Notary", + status: Optional[Union[str, "PolicyStatus"]] = None, + **kwargs + ): + super(TrustPolicy, self).__init__(**kwargs) + self.type = type + self.status = status + + +class UserIdentityProperties(msrest.serialization.Model): + """UserIdentityProperties. + + :param principal_id: The principal id of user assigned identity. + :type principal_id: str + :param client_id: The client id of user assigned identity. + :type client_id: str + """ + + _attribute_map = { + 'principal_id': {'key': 'principalId', 'type': 'str'}, + 'client_id': {'key': 'clientId', 'type': 'str'}, + } + + def __init__( + self, + *, + principal_id: Optional[str] = None, + client_id: Optional[str] = None, + **kwargs + ): + super(UserIdentityProperties, self).__init__(**kwargs) + self.principal_id = principal_id + self.client_id = client_id + + +class VirtualNetworkRule(msrest.serialization.Model): + """Virtual network rule. + + All required parameters must be populated in order to send to Azure. + + :param action: The action of virtual network rule. Possible values include: "Allow". + :type action: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Action + :param virtual_network_resource_id: Required. Resource ID of a subnet, for example: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}. + :type virtual_network_resource_id: str + """ + + _validation = { + 'virtual_network_resource_id': {'required': True}, + } + + _attribute_map = { + 'action': {'key': 'action', 'type': 'str'}, + 'virtual_network_resource_id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + *, + virtual_network_resource_id: str, + action: Optional[Union[str, "Action"]] = None, + **kwargs + ): + super(VirtualNetworkRule, self).__init__(**kwargs) + self.action = action + self.virtual_network_resource_id = virtual_network_resource_id + + +class Webhook(Resource): + """An object that represents a webhook for a container registry. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The resource ID. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. + :vartype type: str + :param location: Required. The location of the resource. This cannot be changed after the + resource is created. + :type location: str + :param tags: A set of tags. The tags of the resource. + :type tags: dict[str, str] + :param status: The status of the webhook at the time the operation was called. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookStatus + :param scope: The scope of repositories where the event can be triggered. For example, 'foo:*' + means events for all tags under repository 'foo'. 'foo:bar' means events for 'foo:bar' only. + 'foo' is equivalent to 'foo:latest'. Empty means all events. + :type scope: str + :param actions: The list of actions that trigger the webhook to post notifications. + :type actions: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookAction] + :ivar provisioning_state: The provisioning state of the webhook at the time the operation was + called. Possible values include: "Creating", "Updating", "Deleting", "Succeeded", "Failed", + "Canceled". + :vartype provisioning_state: str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'scope': {'key': 'properties.scope', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + status: Optional[Union[str, "WebhookStatus"]] = None, + scope: Optional[str] = None, + actions: Optional[List[Union[str, "WebhookAction"]]] = None, + **kwargs + ): + super(Webhook, self).__init__(location=location, tags=tags, **kwargs) + self.status = status + self.scope = scope + self.actions = actions + self.provisioning_state = None + + +class WebhookCreateParameters(msrest.serialization.Model): + """The parameters for creating a webhook. + + All required parameters must be populated in order to send to Azure. + + :param tags: A set of tags. The tags for the webhook. + :type tags: dict[str, str] + :param location: Required. The location of the webhook. This cannot be changed after the + resource is created. + :type location: str + :param service_uri: The service URI for the webhook to post notifications. + :type service_uri: str + :param custom_headers: Custom headers that will be added to the webhook notifications. + :type custom_headers: dict[str, str] + :param status: The status of the webhook at the time the operation was called. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookStatus + :param scope: The scope of repositories where the event can be triggered. For example, 'foo:*' + means events for all tags under repository 'foo'. 'foo:bar' means events for 'foo:bar' only. + 'foo' is equivalent to 'foo:latest'. Empty means all events. + :type scope: str + :param actions: The list of actions that trigger the webhook to post notifications. + :type actions: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookAction] + """ + + _validation = { + 'location': {'required': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'service_uri': {'key': 'properties.serviceUri', 'type': 'str'}, + 'custom_headers': {'key': 'properties.customHeaders', 'type': '{str}'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'scope': {'key': 'properties.scope', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + service_uri: Optional[str] = None, + custom_headers: Optional[Dict[str, str]] = None, + status: Optional[Union[str, "WebhookStatus"]] = None, + scope: Optional[str] = None, + actions: Optional[List[Union[str, "WebhookAction"]]] = None, + **kwargs + ): + super(WebhookCreateParameters, self).__init__(**kwargs) + self.tags = tags + self.location = location + self.service_uri = service_uri + self.custom_headers = custom_headers + self.status = status + self.scope = scope + self.actions = actions + + +class WebhookListResult(msrest.serialization.Model): + """The result of a request to list webhooks for a container registry. + + :param value: The list of webhooks. Since this list may be incomplete, the nextLink field + should be used to request the next list of webhooks. + :type value: list[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Webhook] + :param next_link: The URI that can be used to request the next list of webhooks. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Webhook]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Webhook"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(WebhookListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class WebhookUpdateParameters(msrest.serialization.Model): + """The parameters for updating a webhook. + + :param tags: A set of tags. The tags for the webhook. + :type tags: dict[str, str] + :param service_uri: The service URI for the webhook to post notifications. + :type service_uri: str + :param custom_headers: Custom headers that will be added to the webhook notifications. + :type custom_headers: dict[str, str] + :param status: The status of the webhook at the time the operation was called. Possible values + include: "enabled", "disabled". + :type status: str or ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookStatus + :param scope: The scope of repositories where the event can be triggered. For example, 'foo:*' + means events for all tags under repository 'foo'. 'foo:bar' means events for 'foo:bar' only. + 'foo' is equivalent to 'foo:latest'. Empty means all events. + :type scope: str + :param actions: The list of actions that trigger the webhook to post notifications. + :type actions: list[str or + ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookAction] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'service_uri': {'key': 'properties.serviceUri', 'type': 'str'}, + 'custom_headers': {'key': 'properties.customHeaders', 'type': '{str}'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'scope': {'key': 'properties.scope', 'type': 'str'}, + 'actions': {'key': 'properties.actions', 'type': '[str]'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + service_uri: Optional[str] = None, + custom_headers: Optional[Dict[str, str]] = None, + status: Optional[Union[str, "WebhookStatus"]] = None, + scope: Optional[str] = None, + actions: Optional[List[Union[str, "WebhookAction"]]] = None, + **kwargs + ): + super(WebhookUpdateParameters, self).__init__(**kwargs) + self.tags = tags + self.service_uri = service_uri + self.custom_headers = custom_headers + self.status = status + self.scope = scope + self.actions = actions diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/__init__.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/__init__.py new file mode 100644 index 00000000000..c07a02517d7 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/__init__.py @@ -0,0 +1,39 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._export_pipelines_operations import ExportPipelinesOperations +from ._registries_operations import RegistriesOperations +from ._import_pipelines_operations import ImportPipelinesOperations +from ._operations import Operations +from ._pipeline_runs_operations import PipelineRunsOperations +from ._private_endpoint_connections_operations import PrivateEndpointConnectionsOperations +from ._replications_operations import ReplicationsOperations +from ._webhooks_operations import WebhooksOperations +from ._agent_pools_operations import AgentPoolsOperations +from ._runs_operations import RunsOperations +from ._task_runs_operations import TaskRunsOperations +from ._tasks_operations import TasksOperations +from ._scope_maps_operations import ScopeMapsOperations +from ._tokens_operations import TokensOperations + +__all__ = [ + 'ExportPipelinesOperations', + 'RegistriesOperations', + 'ImportPipelinesOperations', + 'Operations', + 'PipelineRunsOperations', + 'PrivateEndpointConnectionsOperations', + 'ReplicationsOperations', + 'WebhooksOperations', + 'AgentPoolsOperations', + 'RunsOperations', + 'TaskRunsOperations', + 'TasksOperations', + 'ScopeMapsOperations', + 'TokensOperations', +] diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_agent_pools_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_agent_pools_operations.py new file mode 100644 index 00000000000..b721429b8e2 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_agent_pools_operations.py @@ -0,0 +1,631 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class AgentPoolsOperations(object): + """AgentPoolsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + agent_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.AgentPool" + """Gets the detailed information for a given agent pool. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPool, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + agent_pool_name, # type: str + agent_pool, # type: "models.AgentPool" + **kwargs # type: Any + ): + # type: (...) -> "models.AgentPool" + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(agent_pool, 'AgentPool') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + agent_pool_name, # type: str + agent_pool, # type: "models.AgentPool" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.AgentPool"] + """Creates an agent pool for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :param agent_pool: The parameters of an agent pool that needs to scheduled. + :type agent_pool: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either AgentPool or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + agent_pool_name=agent_pool_name, + agent_pool=agent_pool, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + agent_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + agent_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a specified agent pool resource. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + agent_pool_name=agent_pool_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + agent_pool_name, # type: str + update_parameters, # type: "models.AgentPoolUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.AgentPool" + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(update_parameters, 'AgentPoolUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + agent_pool_name, # type: str + update_parameters, # type: "models.AgentPoolUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.AgentPool"] + """Updates an agent pool with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :param update_parameters: The parameters for updating an agent pool. + :type update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPoolUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either AgentPool or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPool"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + agent_pool_name=agent_pool_name, + update_parameters=update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AgentPoolListResult"] + """Lists all the agent pools for a specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AgentPoolListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPoolListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPoolListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('AgentPoolListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.ErrorResponse, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools'} # type: ignore + + def get_queue_status( + self, + resource_group_name, # type: str + registry_name, # type: str + agent_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.AgentPoolQueueStatus" + """Gets the count of queued runs for a given agent pool. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPoolQueueStatus, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.AgentPoolQueueStatus + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AgentPoolQueueStatus"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_queue_status.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'agentPoolName': self._serialize.url("agent_pool_name", agent_pool_name, 'str', max_length=20, min_length=3, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPoolQueueStatus', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_queue_status.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/agentPools/{agentPoolName}/listQueueStatus'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_export_pipelines_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_export_pipelines_operations.py new file mode 100644 index 00000000000..fcf10525745 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_export_pipelines_operations.py @@ -0,0 +1,428 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class ExportPipelinesOperations(object): + """ExportPipelinesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + export_pipeline_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ExportPipeline" + """Gets the properties of the export pipeline. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param export_pipeline_name: The name of the export pipeline. + :type export_pipeline_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ExportPipeline, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipeline + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExportPipeline"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'exportPipelineName': self._serialize.url("export_pipeline_name", export_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ExportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + export_pipeline_name, # type: str + export_pipeline_create_parameters, # type: "models.ExportPipeline" + **kwargs # type: Any + ): + # type: (...) -> "models.ExportPipeline" + cls = kwargs.pop('cls', None) # type: ClsType["models.ExportPipeline"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'exportPipelineName': self._serialize.url("export_pipeline_name", export_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(export_pipeline_create_parameters, 'ExportPipeline') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ExportPipeline', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ExportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + export_pipeline_name, # type: str + export_pipeline_create_parameters, # type: "models.ExportPipeline" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.ExportPipeline"] + """Creates an export pipeline for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param export_pipeline_name: The name of the export pipeline. + :type export_pipeline_name: str + :param export_pipeline_create_parameters: The parameters for creating an export pipeline. + :type export_pipeline_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipeline + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either ExportPipeline or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipeline] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.ExportPipeline"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + export_pipeline_name=export_pipeline_name, + export_pipeline_create_parameters=export_pipeline_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ExportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + export_pipeline_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'exportPipelineName': self._serialize.url("export_pipeline_name", export_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + export_pipeline_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes an export pipeline from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param export_pipeline_name: The name of the export pipeline. + :type export_pipeline_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + export_pipeline_name=export_pipeline_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines/{exportPipelineName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ExportPipelineListResult"] + """Lists all export pipelines for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ExportPipelineListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ExportPipelineListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExportPipelineListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('ExportPipelineListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/exportPipelines'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_import_pipelines_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_import_pipelines_operations.py new file mode 100644 index 00000000000..d33e8a76064 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_import_pipelines_operations.py @@ -0,0 +1,428 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class ImportPipelinesOperations(object): + """ImportPipelinesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + import_pipeline_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ImportPipeline" + """Gets the properties of the import pipeline. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param import_pipeline_name: The name of the import pipeline. + :type import_pipeline_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ImportPipeline, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipeline + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ImportPipeline"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'importPipelineName': self._serialize.url("import_pipeline_name", import_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ImportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + import_pipeline_name, # type: str + import_pipeline_create_parameters, # type: "models.ImportPipeline" + **kwargs # type: Any + ): + # type: (...) -> "models.ImportPipeline" + cls = kwargs.pop('cls', None) # type: ClsType["models.ImportPipeline"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'importPipelineName': self._serialize.url("import_pipeline_name", import_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(import_pipeline_create_parameters, 'ImportPipeline') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ImportPipeline', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ImportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + import_pipeline_name, # type: str + import_pipeline_create_parameters, # type: "models.ImportPipeline" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.ImportPipeline"] + """Creates an import pipeline for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param import_pipeline_name: The name of the import pipeline. + :type import_pipeline_name: str + :param import_pipeline_create_parameters: The parameters for creating an import pipeline. + :type import_pipeline_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipeline + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either ImportPipeline or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipeline] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.ImportPipeline"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + import_pipeline_name=import_pipeline_name, + import_pipeline_create_parameters=import_pipeline_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ImportPipeline', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + import_pipeline_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'importPipelineName': self._serialize.url("import_pipeline_name", import_pipeline_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + import_pipeline_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes an import pipeline from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param import_pipeline_name: The name of the import pipeline. + :type import_pipeline_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + import_pipeline_name=import_pipeline_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines/{importPipelineName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ImportPipelineListResult"] + """Lists all import pipelines for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ImportPipelineListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportPipelineListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ImportPipelineListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('ImportPipelineListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importPipelines'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_operations.py new file mode 100644 index 00000000000..bfe974c6321 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_operations.py @@ -0,0 +1,109 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class Operations(object): + """Operations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.OperationListResult"] + """Lists all of the available Azure Container Registry REST API operations. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OperationListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.OperationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OperationListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('OperationListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.ContainerRegistry/operations'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_pipeline_runs_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_pipeline_runs_operations.py new file mode 100644 index 00000000000..3e7063cb401 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_pipeline_runs_operations.py @@ -0,0 +1,428 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class PipelineRunsOperations(object): + """PipelineRunsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + pipeline_run_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.PipelineRun" + """Gets the detailed information for a given pipeline run. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param pipeline_run_name: The name of the pipeline run. + :type pipeline_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PipelineRun, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRun + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PipelineRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'pipelineRunName': self._serialize.url("pipeline_run_name", pipeline_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PipelineRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + pipeline_run_name, # type: str + pipeline_run_create_parameters, # type: "models.PipelineRun" + **kwargs # type: Any + ): + # type: (...) -> "models.PipelineRun" + cls = kwargs.pop('cls', None) # type: ClsType["models.PipelineRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'pipelineRunName': self._serialize.url("pipeline_run_name", pipeline_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(pipeline_run_create_parameters, 'PipelineRun') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('PipelineRun', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('PipelineRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + pipeline_run_name, # type: str + pipeline_run_create_parameters, # type: "models.PipelineRun" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.PipelineRun"] + """Creates a pipeline run for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param pipeline_run_name: The name of the pipeline run. + :type pipeline_run_name: str + :param pipeline_run_create_parameters: The parameters for creating a pipeline run. + :type pipeline_run_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRun + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either PipelineRun or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.PipelineRun"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + pipeline_run_name=pipeline_run_name, + pipeline_run_create_parameters=pipeline_run_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('PipelineRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + pipeline_run_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'pipelineRunName': self._serialize.url("pipeline_run_name", pipeline_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + pipeline_run_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a pipeline run from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param pipeline_run_name: The name of the pipeline run. + :type pipeline_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + pipeline_run_name=pipeline_run_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns/{pipelineRunName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.PipelineRunListResult"] + """Lists all the pipeline runs for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either PipelineRunListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PipelineRunListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PipelineRunListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('PipelineRunListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/pipelineRuns'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_private_endpoint_connections_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_private_endpoint_connections_operations.py new file mode 100644 index 00000000000..3370f8c014c --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_private_endpoint_connections_operations.py @@ -0,0 +1,429 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class PrivateEndpointConnectionsOperations(object): + """PrivateEndpointConnectionsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + private_endpoint_connection_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.PrivateEndpointConnection" + """Get the specified private endpoint connection associated with the container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateEndpointConnection, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateEndpointConnection"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + def _create_or_update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + private_endpoint_connection_name, # type: str + private_endpoint_connection, # type: "models.PrivateEndpointConnection" + **kwargs # type: Any + ): + # type: (...) -> "models.PrivateEndpointConnection" + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateEndpointConnection"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_or_update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(private_endpoint_connection, 'PrivateEndpointConnection') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_or_update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + def begin_create_or_update( + self, + resource_group_name, # type: str + registry_name, # type: str + private_endpoint_connection_name, # type: str + private_endpoint_connection, # type: "models.PrivateEndpointConnection" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.PrivateEndpointConnection"] + """Update the state of specified private endpoint connection associated with the container + registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :param private_endpoint_connection: The parameters for creating a private endpoint connection. + :type private_endpoint_connection: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either PrivateEndpointConnection or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnection] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateEndpointConnection"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_or_update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + private_endpoint_connection_name=private_endpoint_connection_name, + private_endpoint_connection=private_endpoint_connection, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + private_endpoint_connection_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'privateEndpointConnectionName': self._serialize.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + private_endpoint_connection_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes the specified private endpoint connection associated with the container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + private_endpoint_connection_name=private_endpoint_connection_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections/{privateEndpointConnectionName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.PrivateEndpointConnectionListResult"] + """List all private endpoint connections in a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either PrivateEndpointConnectionListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateEndpointConnectionListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateEndpointConnectionListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('PrivateEndpointConnectionListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateEndpointConnections'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_registries_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_registries_operations.py new file mode 100644 index 00000000000..cc46a8c9855 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_registries_operations.py @@ -0,0 +1,1348 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class RegistriesOperations(object): + """RegistriesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def _import_image_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + parameters, # type: "models.ImportImageParameters" + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + + # Construct URL + url = self._import_image_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(parameters, 'ImportImageParameters') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _import_image_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importImage'} # type: ignore + + def begin_import_image( + self, + resource_group_name, # type: str + registry_name, # type: str + parameters, # type: "models.ImportImageParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Copies an image to this container registry from the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param parameters: The parameters specifying the image to copy and the source container + registry. + :type parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ImportImageParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._import_image_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + parameters=parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_import_image.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/importImage'} # type: ignore + + def check_name_availability( + self, + registry_name_check_request, # type: "models.RegistryNameCheckRequest" + **kwargs # type: Any + ): + # type: (...) -> "models.RegistryNameStatus" + """Checks whether the container registry name is available for use. The name must contain only + alphanumeric characters, be globally unique, and between 5 and 50 characters in length. + + :param registry_name_check_request: The object containing information for the availability + request. + :type registry_name_check_request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryNameCheckRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegistryNameStatus, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryNameStatus + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryNameStatus"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.check_name_availability.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(registry_name_check_request, 'RegistryNameCheckRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegistryNameStatus', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + check_name_availability.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.ContainerRegistry/checkNameAvailability'} # type: ignore + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Registry" + """Gets the properties of the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Registry, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + registry, # type: "models.Registry" + **kwargs # type: Any + ): + # type: (...) -> "models.Registry" + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(registry, 'Registry') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Registry', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + registry, # type: "models.Registry" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Registry"] + """Creates a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param registry: The parameters for creating a container registry. + :type registry: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Registry or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + registry=registry, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + registry_update_parameters, # type: "models.RegistryUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.Registry" + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(registry_update_parameters, 'RegistryUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Registry', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + registry_update_parameters, # type: "models.RegistryUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Registry"] + """Updates a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param registry_update_parameters: The parameters for updating a container registry. + :type registry_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Registry or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Registry] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Registry"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + registry_update_parameters=registry_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Registry', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.RegistryListResult"] + """Lists all the container registries under the specified resource group. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegistryListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('RegistryListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries'} # type: ignore + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.RegistryListResult"] + """Lists all the container registries under the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegistryListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('RegistryListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.ContainerRegistry/registries'} # type: ignore + + def list_credentials( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.RegistryListCredentialsResult" + """Lists the login credentials for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegistryListCredentialsResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryListCredentialsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryListCredentialsResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.list_credentials.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegistryListCredentialsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list_credentials.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/listCredentials'} # type: ignore + + def regenerate_credential( + self, + resource_group_name, # type: str + registry_name, # type: str + regenerate_credential_parameters, # type: "models.RegenerateCredentialParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.RegistryListCredentialsResult" + """Regenerates one of the login credentials for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param regenerate_credential_parameters: Specifies name of the password which should be + regenerated -- password or password2. + :type regenerate_credential_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegenerateCredentialParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegistryListCredentialsResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryListCredentialsResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryListCredentialsResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.regenerate_credential.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(regenerate_credential_parameters, 'RegenerateCredentialParameters') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegistryListCredentialsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + regenerate_credential.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/regenerateCredential'} # type: ignore + + def list_usages( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.RegistryUsageListResult" + """Gets the quota usages for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegistryUsageListResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RegistryUsageListResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegistryUsageListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.list_usages.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegistryUsageListResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list_usages.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/listUsages'} # type: ignore + + def list_private_link_resources( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.PrivateLinkResourceListResult"] + """Lists the private link resources for a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either PrivateLinkResourceListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.PrivateLinkResourceListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PrivateLinkResourceListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_private_link_resources.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('PrivateLinkResourceListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_private_link_resources.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/privateLinkResources'} # type: ignore + + def _schedule_run_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + run_request, # type: "models.RunRequest" + **kwargs # type: Any + ): + # type: (...) -> Optional["models.Run"] + cls = kwargs.pop('cls', None) # type: ClsType[Optional["models.Run"]] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._schedule_run_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(run_request, 'RunRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _schedule_run_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scheduleRun'} # type: ignore + + def begin_schedule_run( + self, + resource_group_name, # type: str + registry_name, # type: str + run_request, # type: "models.RunRequest" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Run"] + """Schedules a new run based on the request parameters and add it to the run queue. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_request: The parameters of a run that needs to scheduled. + :type run_request: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Run or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Run"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._schedule_run_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + run_request=run_request, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_schedule_run.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scheduleRun'} # type: ignore + + def get_build_source_upload_url( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SourceUploadDefinition" + """Get the upload location for the user to be able to upload the source. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SourceUploadDefinition, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.SourceUploadDefinition + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SourceUploadDefinition"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_build_source_upload_url.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SourceUploadDefinition', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_build_source_upload_url.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/listBuildSourceUploadUrl'} # type: ignore + + def _generate_credentials_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + generate_credentials_parameters, # type: "models.GenerateCredentialsParameters" + **kwargs # type: Any + ): + # type: (...) -> Optional["models.GenerateCredentialsResult"] + cls = kwargs.pop('cls', None) # type: ClsType[Optional["models.GenerateCredentialsResult"]] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._generate_credentials_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(generate_credentials_parameters, 'GenerateCredentialsParameters') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('GenerateCredentialsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _generate_credentials_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/generateCredentials'} # type: ignore + + def begin_generate_credentials( + self, + resource_group_name, # type: str + registry_name, # type: str + generate_credentials_parameters, # type: "models.GenerateCredentialsParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.GenerateCredentialsResult"] + """Generate keys for a token of a specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param generate_credentials_parameters: The parameters for generating credentials. + :type generate_credentials_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.GenerateCredentialsParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either GenerateCredentialsResult or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.GenerateCredentialsResult] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.GenerateCredentialsResult"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._generate_credentials_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + generate_credentials_parameters=generate_credentials_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('GenerateCredentialsResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_generate_credentials.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/generateCredentials'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_replications_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_replications_operations.py new file mode 100644 index 00000000000..9ae17bccda1 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_replications_operations.py @@ -0,0 +1,559 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class ReplicationsOperations(object): + """ReplicationsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + replication_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Replication" + """Gets the properties of the specified replication. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param replication_name: The name of the replication. + :type replication_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Replication, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'replicationName': self._serialize.url("replication_name", replication_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + replication_name, # type: str + replication, # type: "models.Replication" + **kwargs # type: Any + ): + # type: (...) -> "models.Replication" + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'replicationName': self._serialize.url("replication_name", replication_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(replication, 'Replication') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Replication', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + replication_name, # type: str + replication, # type: "models.Replication" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Replication"] + """Creates a replication for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param replication_name: The name of the replication. + :type replication_name: str + :param replication: The parameters for creating a replication. + :type replication: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Replication or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + replication_name=replication_name, + replication=replication, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + replication_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'replicationName': self._serialize.url("replication_name", replication_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + replication_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a replication from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param replication_name: The name of the replication. + :type replication_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + replication_name=replication_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + replication_name, # type: str + replication_update_parameters, # type: "models.ReplicationUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.Replication" + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'replicationName': self._serialize.url("replication_name", replication_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(replication_update_parameters, 'ReplicationUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Replication', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + replication_name, # type: str + replication_update_parameters, # type: "models.ReplicationUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Replication"] + """Updates a replication for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param replication_name: The name of the replication. + :type replication_name: str + :param replication_update_parameters: The parameters for updating a replication. + :type replication_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ReplicationUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Replication or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Replication] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Replication"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + replication_name=replication_name, + replication_update_parameters=replication_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Replication', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications/{replicationName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ReplicationListResult"] + """Lists all the replications for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ReplicationListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ReplicationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ReplicationListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('ReplicationListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/replications'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_runs_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_runs_operations.py new file mode 100644 index 00000000000..ac06f212a19 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_runs_operations.py @@ -0,0 +1,512 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class RunsOperations(object): + """RunsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + filter=None, # type: Optional[str] + top=None, # type: Optional[int] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.RunListResult"] + """Gets all the runs for a registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param filter: The runs filter to apply on the operation. Arithmetic operators are not + supported. The allowed string function is 'contains'. All logical operators except 'Not', + 'Has', 'All' are allowed. + :type filter: str + :param top: $top is supported for get list of runs, which limits the maximum number of runs to + return. + :type top: int + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RunListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RunListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + if top is not None: + query_parameters['$top'] = self._serialize.query("top", top, 'int') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('RunListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.ErrorResponse, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs'} # type: ignore + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + run_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Run" + """Gets the detailed information for a given run. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_id: The run ID. + :type run_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Run, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Run"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'runId': self._serialize.url("run_id", run_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + run_id, # type: str + run_update_parameters, # type: "models.RunUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.Run" + cls = kwargs.pop('cls', None) # type: ClsType["models.Run"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'runId': self._serialize.url("run_id", run_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(run_update_parameters, 'RunUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Run', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + run_id, # type: str + run_update_parameters, # type: "models.RunUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Run"] + """Patch the run properties. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_id: The run ID. + :type run_id: str + :param run_update_parameters: The run update properties. + :type run_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Run or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Run] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Run"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + run_id=run_id, + run_update_parameters=run_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Run', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}'} # type: ignore + + def get_log_sas_url( + self, + resource_group_name, # type: str + registry_name, # type: str + run_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.RunGetLogResult" + """Gets a link to download the run logs. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_id: The run ID. + :type run_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RunGetLogResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.RunGetLogResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RunGetLogResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_log_sas_url.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'runId': self._serialize.url("run_id", run_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RunGetLogResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_log_sas_url.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}/listLogSasUrl'} # type: ignore + + def _cancel_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + run_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self._cancel_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'runId': self._serialize.url("run_id", run_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _cancel_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}/cancel'} # type: ignore + + def begin_cancel( + self, + resource_group_name, # type: str + registry_name, # type: str + run_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Cancel an existing run. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param run_id: The run ID. + :type run_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._cancel_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + run_id=run_id, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_cancel.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/runs/{runId}/cancel'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_scope_maps_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_scope_maps_operations.py new file mode 100644 index 00000000000..83b11c1df49 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_scope_maps_operations.py @@ -0,0 +1,559 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class ScopeMapsOperations(object): + """ScopeMapsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + scope_map_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ScopeMap" + """Gets the properties of the specified scope map. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param scope_map_name: The name of the scope map. + :type scope_map_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ScopeMap, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'scopeMapName': self._serialize.url("scope_map_name", scope_map_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + scope_map_name, # type: str + scope_map_create_parameters, # type: "models.ScopeMap" + **kwargs # type: Any + ): + # type: (...) -> "models.ScopeMap" + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'scopeMapName': self._serialize.url("scope_map_name", scope_map_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(scope_map_create_parameters, 'ScopeMap') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + scope_map_name, # type: str + scope_map_create_parameters, # type: "models.ScopeMap" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.ScopeMap"] + """Creates a scope map for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param scope_map_name: The name of the scope map. + :type scope_map_name: str + :param scope_map_create_parameters: The parameters for creating a scope map. + :type scope_map_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either ScopeMap or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + scope_map_name=scope_map_name, + scope_map_create_parameters=scope_map_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + scope_map_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'scopeMapName': self._serialize.url("scope_map_name", scope_map_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + scope_map_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a scope map from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param scope_map_name: The name of the scope map. + :type scope_map_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + scope_map_name=scope_map_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + scope_map_name, # type: str + scope_map_update_parameters, # type: "models.ScopeMapUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.ScopeMap" + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'scopeMapName': self._serialize.url("scope_map_name", scope_map_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(scope_map_update_parameters, 'ScopeMapUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + scope_map_name, # type: str + scope_map_update_parameters, # type: "models.ScopeMapUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.ScopeMap"] + """Updates a scope map with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param scope_map_name: The name of the scope map. + :type scope_map_name: str + :param scope_map_update_parameters: The parameters for updating a scope map. + :type scope_map_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMapUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either ScopeMap or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMap] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMap"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + scope_map_name=scope_map_name, + scope_map_update_parameters=scope_map_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ScopeMap', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps/{scopeMapName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ScopeMapListResult"] + """Lists all the scope maps for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ScopeMapListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.ScopeMapListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ScopeMapListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('ScopeMapListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/scopeMaps'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_task_runs_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_task_runs_operations.py new file mode 100644 index 00000000000..4b01758616d --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_task_runs_operations.py @@ -0,0 +1,631 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class TaskRunsOperations(object): + """TaskRunsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + task_run_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.TaskRun" + """Gets the detailed information for a given task run. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TaskRun, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + task_run_name, # type: str + task_run, # type: "models.TaskRun" + **kwargs # type: Any + ): + # type: (...) -> "models.TaskRun" + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(task_run, 'TaskRun') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('TaskRun', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + task_run_name, # type: str + task_run, # type: "models.TaskRun" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.TaskRun"] + """Creates a task run for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :param task_run: The parameters of a run that needs to scheduled. + :type task_run: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either TaskRun or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_run_name=task_run_name, + task_run=task_run, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + task_run_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + task_run_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a specified task run resource. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_run_name=task_run_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + task_run_name, # type: str + update_parameters, # type: "models.TaskRunUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.TaskRun" + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(update_parameters, 'TaskRunUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('TaskRun', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + task_run_name, # type: str + update_parameters, # type: "models.TaskRunUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.TaskRun"] + """Updates a task run with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :param update_parameters: The parameters for updating a task run. + :type update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRunUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either TaskRun or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_run_name=task_run_name, + update_parameters=update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}'} # type: ignore + + def get_details( + self, + resource_group_name, # type: str + registry_name, # type: str + task_run_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.TaskRun" + """Gets the detailed information for a given task run that includes all secrets. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_run_name: The name of the task run. + :type task_run_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TaskRun, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRun + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRun"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_details.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskRunName': self._serialize.url("task_run_name", task_run_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TaskRun', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_details.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns/{taskRunName}/listDetails'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.TaskRunListResult"] + """Lists all the task runs for a specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TaskRunListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskRunListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskRunListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('TaskRunListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.ErrorResponse, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/taskRuns'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_tasks_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_tasks_operations.py new file mode 100644 index 00000000000..1d6680ca98f --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_tasks_operations.py @@ -0,0 +1,631 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class TasksOperations(object): + """TasksOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.TaskListResult"] + """Lists all the tasks for a specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TaskListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TaskListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('TaskListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.ErrorResponse, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks'} # type: ignore + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + task_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Task" + """Get the properties of a specified task. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Task, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + task_name, # type: str + task_create_parameters, # type: "models.Task" + **kwargs # type: Any + ): + # type: (...) -> "models.Task" + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(task_create_parameters, 'Task') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Task', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + task_name, # type: str + task_create_parameters, # type: "models.Task" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Task"] + """Creates a task for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :param task_create_parameters: The parameters for creating a task. + :type task_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Task or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_name=task_name, + task_create_parameters=task_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + task_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + task_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a specified task. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_name=task_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + task_name, # type: str + task_update_parameters, # type: "models.TaskUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.Task" + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(task_update_parameters, 'TaskUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Task', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + task_name, # type: str + task_update_parameters, # type: "models.TaskUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Task"] + """Updates a task with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :param task_update_parameters: The parameters for updating a task. + :type task_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TaskUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Task or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + task_name=task_name, + task_update_parameters=task_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}'} # type: ignore + + def get_details( + self, + resource_group_name, # type: str + registry_name, # type: str + task_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Task" + """Returns a task with extended information that includes all secrets. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param task_name: The name of the container registry task. + :type task_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Task, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Task + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Task"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_details.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'taskName': self._serialize.url("task_name", task_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-_]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.ErrorResponse, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Task', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_details.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tasks/{taskName}/listDetails'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_tokens_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_tokens_operations.py new file mode 100644 index 00000000000..a64b3be51a0 --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_tokens_operations.py @@ -0,0 +1,559 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class TokensOperations(object): + """TokensOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + token_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Token" + """Gets the properties of the specified token. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param token_name: The name of the token. + :type token_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Token, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'tokenName': self._serialize.url("token_name", token_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + token_name, # type: str + token_create_parameters, # type: "models.Token" + **kwargs # type: Any + ): + # type: (...) -> "models.Token" + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'tokenName': self._serialize.url("token_name", token_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(token_create_parameters, 'Token') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Token', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + token_name, # type: str + token_create_parameters, # type: "models.Token" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Token"] + """Creates a token for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param token_name: The name of the token. + :type token_name: str + :param token_create_parameters: The parameters for creating a token. + :type token_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Token or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + token_name=token_name, + token_create_parameters=token_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + token_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'tokenName': self._serialize.url("token_name", token_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + token_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a token from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param token_name: The name of the token. + :type token_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + token_name=token_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + token_name, # type: str + token_update_parameters, # type: "models.TokenUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.Token" + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'tokenName': self._serialize.url("token_name", token_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9-]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(token_update_parameters, 'TokenUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Token', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + token_name, # type: str + token_update_parameters, # type: "models.TokenUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Token"] + """Updates a token with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param token_name: The name of the token. + :type token_name: str + :param token_update_parameters: The parameters for updating a token. + :type token_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Token or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Token] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Token"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + token_name=token_name, + token_update_parameters=token_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Token', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens/{tokenName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.TokenListResult"] + """Lists all the tokens for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TokenListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.TokenListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TokenListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-05-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('TokenListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/tokens'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_webhooks_operations.py b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_webhooks_operations.py new file mode 100644 index 00000000000..9562425d1fc --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/operations/_webhooks_operations.py @@ -0,0 +1,767 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class WebhooksOperations(object): + """WebhooksOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.containerregistry.v2019_12_01_preview.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Webhook" + """Gets the properties of the specified webhook. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Webhook, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.Webhook + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + def _create_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + webhook_create_parameters, # type: "models.WebhookCreateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.Webhook" + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(webhook_create_parameters, 'WebhookCreateParameters') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Webhook', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + def begin_create( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + webhook_create_parameters, # type: "models.WebhookCreateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Webhook"] + """Creates a webhook for a container registry with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :param webhook_create_parameters: The parameters for creating a webhook. + :type webhook_create_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookCreateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Webhook or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Webhook] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + webhook_name=webhook_name, + webhook_create_parameters=webhook_create_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Deletes a webhook from a container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + webhook_name=webhook_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + webhook_update_parameters, # type: "models.WebhookUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> "models.Webhook" + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(webhook_update_parameters, 'WebhookUpdateParameters') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Webhook', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + webhook_update_parameters, # type: "models.WebhookUpdateParameters" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.Webhook"] + """Updates a webhook with the specified parameters. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :param webhook_update_parameters: The parameters for updating a webhook. + :type webhook_update_parameters: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookUpdateParameters + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either Webhook or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerregistry.v2019_12_01_preview.models.Webhook] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.Webhook"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + registry_name=registry_name, + webhook_name=webhook_name, + webhook_update_parameters=webhook_update_parameters, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Webhook', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + registry_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.WebhookListResult"] + """Lists all the webhooks for the specified container registry. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either WebhookListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.WebhookListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.WebhookListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('WebhookListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks'} # type: ignore + + def ping( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.EventInfo" + """Triggers a ping event to be sent to the webhook. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: EventInfo, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventInfo + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.EventInfo"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.ping.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('EventInfo', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + ping.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}/ping'} # type: ignore + + def get_callback_config( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.CallbackConfig" + """Gets the configuration of service URI and custom headers for the webhook. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: CallbackConfig, or the result of cls(response) + :rtype: ~azure.mgmt.containerregistry.v2019_12_01_preview.models.CallbackConfig + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.CallbackConfig"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_callback_config.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('CallbackConfig', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_callback_config.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}/getCallbackConfig'} # type: ignore + + def list_events( + self, + resource_group_name, # type: str + registry_name, # type: str + webhook_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.EventListResult"] + """Lists recent events for the specified webhook. + + :param resource_group_name: The name of the resource group to which the container registry + belongs. + :type resource_group_name: str + :param registry_name: The name of the container registry. + :type registry_name: str + :param webhook_name: The name of the webhook. + :type webhook_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either EventListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerregistry.v2019_12_01_preview.models.EventListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.EventListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2025-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_events.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', min_length=1), + 'registryName': self._serialize.url("registry_name", registry_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + 'webhookName': self._serialize.url("webhook_name", webhook_name, 'str', max_length=50, min_length=5, pattern=r'^[a-zA-Z0-9]*$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('EventListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_events.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerRegistry/registries/{registryName}/webhooks/{webhookName}/listEvents'} # type: ignore diff --git a/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/py.typed b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/py.typed new file mode 100644 index 00000000000..e5aff4f83af --- /dev/null +++ b/src/acrtransfer/azext_acrtransfer/vendored_sdks/containerregistry/v2025_06_01_preview/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561. \ No newline at end of file diff --git a/src/acrtransfer/setup.py b/src/acrtransfer/setup.py index 38e5b100030..48de706d031 100644 --- a/src/acrtransfer/setup.py +++ b/src/acrtransfer/setup.py @@ -14,7 +14,7 @@ logger.warn("Wheel is not available, disabling bdist_wheel hook") # HISTORY.rst entry. -VERSION = '1.1.0' +VERSION = '1.1.1b1' # The full list of classifiers is available at # https://pypi.python.org/pypi?%3Aaction=list_classifiers