Skip to content

Commit e9345c6

Browse files
Merge pull request #235581 from tfitzmac/0423move
add Python to move resources
2 parents 6549244 + af8e0b5 commit e9345c6

File tree

1 file changed

+103
-12
lines changed

1 file changed

+103
-12
lines changed

articles/azure-resource-manager/management/move-resource-group-and-subscription.md

Lines changed: 103 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
title: Move resources to a new subscription or resource group
33
description: Use Azure Resource Manager to move resources to a new resource group or subscription.
44
ms.topic: conceptual
5-
ms.date: 01/30/2023
6-
ms.custom: devx-track-azurecli, devx-track-azurepowershell, devx-track-arm-template
5+
ms.date: 04/24/2023
6+
ms.custom: devx-track-azurecli, devx-track-azurepowershell, devx-track-arm-template, ai-gen-docs
77
---
88

99
# Move resources to a new resource group or subscription
@@ -16,6 +16,8 @@ If your move requires setting up new dependent resources, you'll experience an i
1616

1717
Moving a resource only moves it to a new resource group or subscription. It doesn't change the location of the resource.
1818

19+
[!INCLUDE [AI attribution](../../../includes/ai-generated-attribution.md)]
20+
1921
## Changed resource ID
2022

2123
When you move a resource, you change its resource ID. The standard format for a resource ID is `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}`. When you move a resource to a new resource group or subscription, you change one or more values in that path.
@@ -164,16 +166,21 @@ When the move has completed, you're notified of the result.
164166

165167
### Validate
166168

167-
To test your move scenario without actually moving the resources, use the [Invoke-AzResourceAction](/powershell/module/az.resources/invoke-azresourceaction) command. Use this command only when you need to predetermine the results. To run this operation, you need the:
168-
169-
* Resource ID of the source resource group
170-
* Resource ID of the target resource group
171-
* Resource ID of each resource to move
169+
To test your move scenario without actually moving the resources, use the [Invoke-AzResourceAction](/powershell/module/az.resources/invoke-azresourceaction) command. Use this command only when you need to predetermine the results.
172170

173171
```azurepowershell
172+
$sourceName = "sourceRG"
173+
$destinationName = "destinationRG"
174+
$resourcesToMove = @("app1", "app2")
175+
176+
$sourceResourceGroup = Get-AzResourceGroup -Name $sourceName
177+
$destinationResourceGroup = Get-AzResourceGroup -Name $destinationName
178+
179+
$resources = Get-AzResource -ResourceGroupName $sourceName | Where-Object { $_.Name -in $resourcesToMove }
180+
174181
Invoke-AzResourceAction -Action validateMoveResources `
175-
-ResourceId "/subscriptions/{subscription-id}/resourceGroups/{source-rg}" `
176-
-Parameters @{ resources= @("/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}", "/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}", "/subscriptions/{subscription-id}/resourceGroups/{source-rg}/providers/{resource-provider}/{resource-type}/{resource-name}");targetResourceGroup = '/subscriptions/{subscription-id}/resourceGroups/{destination-rg}' }
182+
-ResourceId $sourceResourceGroup.ResourceId `
183+
-Parameters @{ resources= $resources.ResourceId;targetResourceGroup = $destinationResourceGroup.ResourceId }
177184
```
178185

179186
If validation passes, you see no output.
@@ -185,9 +192,13 @@ If validation fails, you see an error message describing why the resources can't
185192
To move existing resources to another resource group or subscription, use the [Move-AzResource](/powershell/module/az.resources/move-azresource) command. The following example shows how to move several resources to a new resource group.
186193

187194
```azurepowershell-interactive
188-
$webapp = Get-AzResource -ResourceGroupName OldRG -ResourceName ExampleSite
189-
$plan = Get-AzResource -ResourceGroupName OldRG -ResourceName ExamplePlan
190-
Move-AzResource -DestinationResourceGroupName NewRG -ResourceId $webapp.ResourceId, $plan.ResourceId
195+
$sourceName = "sourceRG"
196+
$destinationName = "destinationRG"
197+
$resourcesToMove = @("app1", "app2")
198+
199+
$resources = Get-AzResource -ResourceGroupName $sourceName | Where-Object { $_.Name -in $resourcesToMove }
200+
201+
Move-AzResource -DestinationResourceGroupName $destinationName -ResourceId $resources.ResourceId
191202
```
192203

193204
To move to a new subscription, include a value for the `DestinationSubscriptionId` parameter.
@@ -240,6 +251,86 @@ az resource move --destination-group newgroup --ids $webapp $plan
240251

241252
To move to a new subscription, provide the `--destination-subscription-id` parameter.
242253

254+
## Use Python
255+
256+
### Validate
257+
258+
To test your move scenario without actually moving the resources, use the [ResourceManagementClient.resources.begin_validate_move_resources](/python/api/azure-mgmt-resource/azure.mgmt.resource.resources.v2022_09_01.operations.resourcesoperations#azure-mgmt-resource-resources-v2022-09-01-operations-resourcesoperations-begin-validate-move-resources) method. Use this method only when you need to predetermine the results.
259+
260+
```python
261+
import os
262+
from azure.identity import AzureCliCredential
263+
from azure.mgmt.resource import ResourceManagementClient
264+
265+
credential = AzureCliCredential()
266+
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
267+
268+
resource_client = ResourceManagementClient(credential, subscription_id)
269+
270+
source_name = "sourceRG"
271+
destination_name = "destinationRG"
272+
resources_to_move = ["app1", "app2"]
273+
274+
destination_resource_group = resource_client.resource_groups.get(destination_name)
275+
276+
resources = [
277+
resource for resource in resource_client.resources.list_by_resource_group(source_name)
278+
if resource.name in resources_to_move
279+
]
280+
281+
resource_ids = [resource.id for resource in resources]
282+
283+
validate_move_resources_result = resource_client.resources.begin_validate_move_resources(
284+
source_name,
285+
{
286+
"resources": resource_ids,
287+
"target_resource_group": destination_resource_group.id
288+
}
289+
).result()
290+
291+
print("Validate move resources result: {}".format(validate_move_resources_result))
292+
```
293+
294+
If validation passes, you see no output.
295+
296+
If validation fails, you see an error message describing why the resources can't be moved.
297+
298+
### Move
299+
300+
To move existing resources to another resource group or subscription, use the [ResourceManagementClient.resources.begin_move_resources](/python/api/azure-mgmt-resource/azure.mgmt.resource.resources.v2022_09_01.operations.resourcesoperations#azure-mgmt-resource-resources-v2022-09-01-operations-resourcesoperations-begin-move-resources) method. The following example shows how to move several resources to a new resource group.
301+
302+
```python
303+
import os
304+
from azure.identity import AzureCliCredential
305+
from azure.mgmt.resource import ResourceManagementClient
306+
307+
credential = AzureCliCredential()
308+
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
309+
310+
resource_client = ResourceManagementClient(credential, subscription_id)
311+
312+
source_name = "sourceRG"
313+
destination_name = "destinationRG"
314+
resources_to_move = ["app1", "app2"]
315+
316+
destination_resource_group = resource_client.resource_groups.get(destination_name)
317+
318+
resources = [
319+
resource for resource in resource_client.resources.list_by_resource_group(source_name)
320+
if resource.name in resources_to_move
321+
]
322+
323+
resource_ids = [resource.id for resource in resources]
324+
325+
resource_client.resources.begin_move_resources(
326+
source_name,
327+
{
328+
"resources": resource_ids,
329+
"target_resource_group": destination_resource_group.id
330+
}
331+
)
332+
```
333+
243334
## Use REST API
244335

245336
### Validate

0 commit comments

Comments
 (0)