Skip to content

Commit 7f0455c

Browse files
helen-afeworkHelen Afework
and
Helen Afework
authored
Add VM validation for Hyper-V/VMware to Azure local replication (Azure#27641)
Co-authored-by: Helen Afework <[email protected]>
1 parent 7907ad4 commit 7f0455c

10 files changed

+177
-32
lines changed

src/Migrate/Migrate.Autorest/Properties/AssemblyInfo.cs

+2-4
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020
[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright © Microsoft")]
2121
[assembly: System.Reflection.AssemblyProductAttribute("Microsoft Azure PowerShell")]
2222
[assembly: System.Reflection.AssemblyTitleAttribute("Microsoft Azure PowerShell - Migrate")]
23-
[assembly: System.Reflection.AssemblyFileVersionAttribute("2.6.0")]
24-
[assembly: System.Reflection.AssemblyVersionAttribute("2.6.0")]
23+
[assembly: System.Reflection.AssemblyFileVersionAttribute("2.7.0")]
24+
[assembly: System.Reflection.AssemblyVersionAttribute("2.7.0")]
2525
[assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)]
2626
[assembly: System.CLSCompliantAttribute(false)]
27-
28-

src/Migrate/Migrate.Autorest/custom/AzLocalDiskInput.cs

+6-7
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@ public AzLocalDiskInput(
2626
? diskPhysicalSectorSize
2727
: null;
2828

29-
// TODO(helenafework): Add this code back once backend is fixed to check for empty string
30-
// StorageContainerId =
31-
// string.IsNullOrWhiteSpace(storageContainerId)
32-
// ? null
33-
// : storageContainerId;
29+
StorageContainerId =
30+
string.IsNullOrWhiteSpace(storageContainerId)
31+
? null
32+
: storageContainerId;
3433
}
3534

3635
/// <summary>Gets or sets the type of the virtual hard disk, vhd or vhdx.</summary>
@@ -54,7 +53,7 @@ public AzLocalDiskInput(
5453
/// <summary>Gets or sets a value indicating whether disk is os disk.</summary>
5554
public bool IsOSDisk { get; set; }
5655

57-
// /// <summary>Gets or sets the target storage account ARM Id.</summary>
58-
// public string StorageContainerId { get; set; }
56+
/// <summary>Gets or sets the target storage account ARM Id.</summary>
57+
public string StorageContainerId { get; set; }
5958
}
6059
}

src/Migrate/Migrate.Autorest/custom/Helper/AzLocalCommonSettings.ps1

+28
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,32 @@ enum StorageAccountProvisioningState
8181
$VMNicSelection = @{
8282
SelectedByUser = "SelectedByUser";
8383
NotSelected = "NotSelected";
84+
}
85+
86+
$PowerStatus = @{
87+
OffVMware = "OFF";
88+
OnVMWare = "ON";
89+
OffHyperV = "PowerOff";
90+
OnHyperV = "Running";
91+
}
92+
93+
$HighAvailability = @{
94+
NO = "No";
95+
YES = "Yes";
96+
}
97+
98+
$VMwareToolsStatus = @{
99+
NotRunning = "NotRunning";
100+
OK = "OK";
101+
NotInstalled = "NotInstalled";
102+
}
103+
104+
$VmReplicationValidationMessage = "Replication could not be initiated. Please ensure the necessary changes are made, and allow up to 30 minutes before re-trying."
105+
$VmReplicationValidationMessages = @{
106+
VmPoweredOff = "The VM is currently powered off. $VmReplicationValidationMessage";
107+
AlreadyInReplication = "The VM is already in replication. $VmReplicationValidationMessage";
108+
VmWareToolsNotInstalled = "VMware tools not installed on VM. $VmReplicationValidationMessage";
109+
VmWareToolsNotRunning = "VMware tools not running on VM. $VmReplicationValidationMessage";
110+
VmNotHighlyAvailable = "VM not highly available. $VmReplicationValidationMessage";
111+
OsTypeNotFound = "Hyper-V Integration Services not running on VM. $VmReplicationValidationMessage";
84112
}

src/Migrate/Migrate.Autorest/custom/Helper/CommonHelper.ps1

+43
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,47 @@ function InvokeAzMigrateGetCommandWithRetries {
230230

231231
return $result
232232
}
233+
}
234+
function ValidateReplication {
235+
[Microsoft.Azure.PowerShell.Cmdlets.Migrate.DoNotExportAttribute()]
236+
param (
237+
[Parameter(Mandatory)]
238+
[PSCustomObject]
239+
${Machine},
240+
241+
[Parameter(Mandatory)]
242+
[System.String]
243+
${MigrationType}
244+
)
245+
# Check if the VM is already protected
246+
$protectedItem = Az.Migrate\Get-AzMigrateLocalServerReplication `
247+
-DiscoveredMachineId $Machine.Id `
248+
-ErrorAction SilentlyContinue
249+
if ($null -ne $protectedItem) {
250+
throw $VmReplicationValidationMessages.AlreadyInReplication
251+
}
252+
253+
if ($Machine.PowerStatus -eq $PowerStatus.OffVMware -or $Machine.PowerStatus -eq $PowerStatus.OffHyperV) {
254+
throw $VmReplicationValidationMessages.VmPoweredOff
255+
}
256+
257+
if ($MigrationType -eq $AzLocalInstanceTypes.HyperVToAzLocal) {
258+
if (-not $Machine.OperatingSystemDetailOSType -or $Machine.OperatingSystemDetailOSType -eq "") {
259+
throw $VmReplicationValidationMessages.OsTypeNotFound
260+
}
261+
262+
if ($Machine.ClusterId -and $Machine.HighAvailability -eq $HighAvailability.NO) {
263+
throw $VmReplicationValidationMessages.VmNotHighlyAvailable
264+
}
265+
}
266+
267+
if ($MigrationType -eq $AzLocalInstanceTypes.VMwareToAzLocal) {
268+
if ($Machine.VMwareToolsStatus -eq $VMwareToolsStatus.NotRunning) {
269+
throw $VmReplicationValidationMessages.VmWareToolsNotRunning
270+
}
271+
272+
if ($Machine.VMwareToolsStatus -eq $VMwareToolsStatus.NotInstalled) {
273+
throw $VmReplicationValidationMessages.VmWareToolsNotInstalled
274+
}
275+
}
233276
}

src/Migrate/Migrate.Autorest/custom/New-AzMigrateLocalServerReplication.ps1

+8-5
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,9 @@ function New-AzMigrateLocalServerReplication {
231231
-ErrorMessage "Machine site '$SiteName' with Type '$SiteType' not found."
232232
}
233233

234+
# Validate the VM
235+
ValidateReplication -Machine $machine -MigrationType $instanceType
236+
234237
# $siteObject is not null or exception would have been thrown
235238
$ProjectName = $siteObject.DiscoverySolutionId.Split("/")[8]
236239

@@ -419,23 +422,23 @@ function New-AzMigrateLocalServerReplication {
419422
if ($SiteType -eq $SiteTypes.HyperVSites) {
420423
$osDisk = $machine.Disk | Where-Object { $_.InstanceId -eq $OSDiskID }
421424
if ($null -eq $osDisk) {
422-
throw "No Disk found with InstanceId '$OSDiskID' from discovered machine disks."
425+
throw "No Disk found with InstanceId $OSDiskID from discovered machine disks."
423426
}
424427

425428
$diskName = Split-Path $osDisk.Path -leaf
426429
if (IsReservedOrTrademarked($diskName)) {
427-
throw "The disk name '$diskName' or part of the name is a trademarked or reserved word."
430+
throw "The disk name $diskName or part of the name is a trademarked or reserved word."
428431
}
429432
}
430433
elseif ($SiteType -eq $SiteTypes.VMwareSites) {
431434
$osDisk = $machine.Disk | Where-Object { $_.Uuid -eq $OSDiskID }
432435
if ($null -eq $osDisk) {
433-
throw "No Disk found with Uuid '$OSDiskID' from discovered machine disks."
436+
throw "No Disk found with Uuid $OSDiskID from discovered machine disks."
434437
}
435438

436439
$diskName = Split-Path $osDisk.Path -leaf
437440
if (IsReservedOrTrademarked($diskName)) {
438-
throw "The disk name '$diskName' or part of the name is a trademarked or reserved word."
441+
throw "The disk name $diskName or part of the name is a trademarked or reserved word."
439442
}
440443
}
441444

@@ -495,7 +498,7 @@ function New-AzMigrateLocalServerReplication {
495498

496499
$diskName = Split-Path -Path $discoveredDisk.Path -Leaf
497500
if (IsReservedOrTrademarked($diskName)) {
498-
throw "The disk name '$diskName' or part of the name is a trademarked or reserved word."
501+
throw "The disk name $diskName or part of the name is a trademarked or reserved word."
499502
}
500503

501504
if ($uniqueDisks.Contains($disk.DiskId)) {

src/Migrate/Migrate.Autorest/docs/Az.Migrate.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
Module Name: Az.Migrate
3-
Module Guid: 72e0bbdf-2561-4f4e-90e1-2a27c36b7ab8
3+
Module Guid: f86539fb-ae5e-499c-af58-5b21bbeef039
44
Download Help Link: https://learn.microsoft.com/powershell/module/az.migrate
55
Help Version: 1.0.0.0
66
Locale: en-US
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"generate_Id": "145f526c-1786-4548-bea6-6c9c35ec0f0e"
2+
"generate_Id": "46df379f-23ec-4e1f-b9b2-d493388e0d5c"
33
}

src/Migrate/Migrate.sln

+79-8
Original file line numberDiff line numberDiff line change
@@ -19,49 +19,119 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Authenticators", "..\Accoun
1919
EndProject
2020
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Migrate", "Migrate\Migrate.csproj", "{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}"
2121
EndProject
22-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Az.Migrate", "..\..\generated\Migrate\Migrate.Autorest\Az.Migrate.csproj", "{DE49266B-1267-409E-A68D-49AE62DD73A5}"
22+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Migrate.Autorest", "Migrate.Autorest", "{9AA2C35A-2264-B74D-8556-EB72BD88EE60}"
23+
EndProject
24+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Az.Migrate", "..\..\generated\Migrate\Migrate.Autorest\Az.Migrate.csproj", "{0A0C9F3C-5853-40D8-9584-35186085C965}"
2325
EndProject
2426
Global
2527
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2628
Debug|Any CPU = Debug|Any CPU
29+
Debug|x64 = Debug|x64
30+
Debug|x86 = Debug|x86
2731
Release|Any CPU = Release|Any CPU
28-
EndGlobalSection
29-
GlobalSection(SolutionProperties) = preSolution
30-
HideSolutionNode = FALSE
32+
Release|x64 = Release|x64
33+
Release|x86 = Release|x86
3134
EndGlobalSection
3235
GlobalSection(ProjectConfigurationPlatforms) = postSolution
3336
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
3437
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Debug|Any CPU.Build.0 = Debug|Any CPU
38+
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Debug|x64.ActiveCfg = Debug|Any CPU
39+
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Debug|x64.Build.0 = Debug|Any CPU
40+
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Debug|x86.ActiveCfg = Debug|Any CPU
41+
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Debug|x86.Build.0 = Debug|Any CPU
3542
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Release|Any CPU.ActiveCfg = Release|Any CPU
3643
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Release|Any CPU.Build.0 = Release|Any CPU
44+
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Release|x64.ActiveCfg = Release|Any CPU
45+
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Release|x64.Build.0 = Release|Any CPU
46+
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Release|x86.ActiveCfg = Release|Any CPU
47+
{395019BE-8D3A-46E4-9CFB-7E298FEEB747}.Release|x86.Build.0 = Release|Any CPU
3748
{F8556062-9A47-4812-8D95-213808B0B620}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
3849
{F8556062-9A47-4812-8D95-213808B0B620}.Debug|Any CPU.Build.0 = Debug|Any CPU
50+
{F8556062-9A47-4812-8D95-213808B0B620}.Debug|x64.ActiveCfg = Debug|Any CPU
51+
{F8556062-9A47-4812-8D95-213808B0B620}.Debug|x64.Build.0 = Debug|Any CPU
52+
{F8556062-9A47-4812-8D95-213808B0B620}.Debug|x86.ActiveCfg = Debug|Any CPU
53+
{F8556062-9A47-4812-8D95-213808B0B620}.Debug|x86.Build.0 = Debug|Any CPU
3954
{F8556062-9A47-4812-8D95-213808B0B620}.Release|Any CPU.ActiveCfg = Release|Any CPU
4055
{F8556062-9A47-4812-8D95-213808B0B620}.Release|Any CPU.Build.0 = Release|Any CPU
56+
{F8556062-9A47-4812-8D95-213808B0B620}.Release|x64.ActiveCfg = Release|Any CPU
57+
{F8556062-9A47-4812-8D95-213808B0B620}.Release|x64.Build.0 = Release|Any CPU
58+
{F8556062-9A47-4812-8D95-213808B0B620}.Release|x86.ActiveCfg = Release|Any CPU
59+
{F8556062-9A47-4812-8D95-213808B0B620}.Release|x86.Build.0 = Release|Any CPU
4160
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4261
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Debug|Any CPU.Build.0 = Debug|Any CPU
62+
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Debug|x64.ActiveCfg = Debug|Any CPU
63+
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Debug|x64.Build.0 = Debug|Any CPU
64+
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Debug|x86.ActiveCfg = Debug|Any CPU
65+
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Debug|x86.Build.0 = Debug|Any CPU
4366
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Release|Any CPU.ActiveCfg = Release|Any CPU
4467
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Release|Any CPU.Build.0 = Release|Any CPU
68+
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Release|x64.ActiveCfg = Release|Any CPU
69+
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Release|x64.Build.0 = Release|Any CPU
70+
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Release|x86.ActiveCfg = Release|Any CPU
71+
{AA3B61A6-4FC7-4C41-9B09-408BA70BB905}.Release|x86.Build.0 = Release|Any CPU
4572
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4673
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Debug|Any CPU.Build.0 = Debug|Any CPU
74+
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Debug|x64.ActiveCfg = Debug|Any CPU
75+
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Debug|x64.Build.0 = Debug|Any CPU
76+
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Debug|x86.ActiveCfg = Debug|Any CPU
77+
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Debug|x86.Build.0 = Debug|Any CPU
4778
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Release|Any CPU.ActiveCfg = Release|Any CPU
4879
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Release|Any CPU.Build.0 = Release|Any CPU
80+
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Release|x64.ActiveCfg = Release|Any CPU
81+
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Release|x64.Build.0 = Release|Any CPU
82+
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Release|x86.ActiveCfg = Release|Any CPU
83+
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F}.Release|x86.Build.0 = Release|Any CPU
4984
{D8D28132-CE20-45C8-8476-6B88C891D945}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
5085
{D8D28132-CE20-45C8-8476-6B88C891D945}.Debug|Any CPU.Build.0 = Debug|Any CPU
86+
{D8D28132-CE20-45C8-8476-6B88C891D945}.Debug|x64.ActiveCfg = Debug|Any CPU
87+
{D8D28132-CE20-45C8-8476-6B88C891D945}.Debug|x64.Build.0 = Debug|Any CPU
88+
{D8D28132-CE20-45C8-8476-6B88C891D945}.Debug|x86.ActiveCfg = Debug|Any CPU
89+
{D8D28132-CE20-45C8-8476-6B88C891D945}.Debug|x86.Build.0 = Debug|Any CPU
5190
{D8D28132-CE20-45C8-8476-6B88C891D945}.Release|Any CPU.ActiveCfg = Release|Any CPU
5291
{D8D28132-CE20-45C8-8476-6B88C891D945}.Release|Any CPU.Build.0 = Release|Any CPU
92+
{D8D28132-CE20-45C8-8476-6B88C891D945}.Release|x64.ActiveCfg = Release|Any CPU
93+
{D8D28132-CE20-45C8-8476-6B88C891D945}.Release|x64.Build.0 = Release|Any CPU
94+
{D8D28132-CE20-45C8-8476-6B88C891D945}.Release|x86.ActiveCfg = Release|Any CPU
95+
{D8D28132-CE20-45C8-8476-6B88C891D945}.Release|x86.Build.0 = Release|Any CPU
5396
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
5497
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
98+
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Debug|x64.ActiveCfg = Debug|Any CPU
99+
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Debug|x64.Build.0 = Debug|Any CPU
100+
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Debug|x86.ActiveCfg = Debug|Any CPU
101+
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Debug|x86.Build.0 = Debug|Any CPU
55102
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
56103
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Release|Any CPU.Build.0 = Release|Any CPU
104+
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Release|x64.ActiveCfg = Release|Any CPU
105+
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Release|x64.Build.0 = Release|Any CPU
106+
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Release|x86.ActiveCfg = Release|Any CPU
107+
{B799EA2F-9E28-421A-9301-BB061C6ADDC2}.Release|x86.Build.0 = Release|Any CPU
57108
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
58109
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
110+
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Debug|x64.ActiveCfg = Debug|Any CPU
111+
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Debug|x64.Build.0 = Debug|Any CPU
112+
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Debug|x86.ActiveCfg = Debug|Any CPU
113+
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Debug|x86.Build.0 = Debug|Any CPU
59114
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
60115
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Release|Any CPU.Build.0 = Release|Any CPU
61-
{DE49266B-1267-409E-A68D-49AE62DD73A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
62-
{DE49266B-1267-409E-A68D-49AE62DD73A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
63-
{DE49266B-1267-409E-A68D-49AE62DD73A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
64-
{DE49266B-1267-409E-A68D-49AE62DD73A5}.Release|Any CPU.Build.0 = Release|Any CPU
116+
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Release|x64.ActiveCfg = Release|Any CPU
117+
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Release|x64.Build.0 = Release|Any CPU
118+
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Release|x86.ActiveCfg = Release|Any CPU
119+
{1847EC8D-87A5-4772-9E75-1DEA1DC531EE}.Release|x86.Build.0 = Release|Any CPU
120+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
121+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Debug|Any CPU.Build.0 = Debug|Any CPU
122+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Debug|x64.ActiveCfg = Debug|Any CPU
123+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Debug|x64.Build.0 = Debug|Any CPU
124+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Debug|x86.ActiveCfg = Debug|Any CPU
125+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Debug|x86.Build.0 = Debug|Any CPU
126+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Release|Any CPU.ActiveCfg = Release|Any CPU
127+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Release|Any CPU.Build.0 = Release|Any CPU
128+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Release|x64.ActiveCfg = Release|Any CPU
129+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Release|x64.Build.0 = Release|Any CPU
130+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Release|x86.ActiveCfg = Release|Any CPU
131+
{0A0C9F3C-5853-40D8-9584-35186085C965}.Release|x86.Build.0 = Release|Any CPU
132+
EndGlobalSection
133+
GlobalSection(SolutionProperties) = preSolution
134+
HideSolutionNode = FALSE
65135
EndGlobalSection
66136
GlobalSection(NestedProjects) = preSolution
67137
{395019BE-8D3A-46E4-9CFB-7E298FEEB747} = {2D0176AD-AE30-4235-9D62-17043F0D4CD8}
@@ -70,5 +140,6 @@ Global
70140
{FB2B969F-E6FB-4E6E-9D2A-E52F4F53F51F} = {2D0176AD-AE30-4235-9D62-17043F0D4CD8}
71141
{D8D28132-CE20-45C8-8476-6B88C891D945} = {2D0176AD-AE30-4235-9D62-17043F0D4CD8}
72142
{B799EA2F-9E28-421A-9301-BB061C6ADDC2} = {2D0176AD-AE30-4235-9D62-17043F0D4CD8}
143+
{0A0C9F3C-5853-40D8-9584-35186085C965} = {9AA2C35A-2264-B74D-8556-EB72BD88EE60}
73144
EndGlobalSection
74145
EndGlobal

src/Migrate/Migrate/Az.Migrate.psd1

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#
44
# Generated by: Microsoft Corporation
55
#
6-
# Generated on: 2/25/2025
6+
# Generated on: 5/8/2025
77
#
88

99
@{
@@ -51,16 +51,16 @@ DotNetFrameworkVersion = '4.7.2'
5151
# ProcessorArchitecture = ''
5252

5353
# Modules that must be imported into the global environment prior to importing this module
54-
RequiredModules = @(@{ModuleName = 'Az.Accounts'; ModuleVersion = '4.0.2'; })
54+
RequiredModules = @(@{ModuleName = 'Az.Accounts'; ModuleVersion = '4.1.0'; })
5555

5656
# Assemblies that must be loaded prior to importing this module
5757
RequiredAssemblies = 'Migrate.Autorest/bin/Az.Migrate.private.dll'
5858

5959
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
60-
# ScriptsToProcess = @()
60+
ScriptsToProcess = @()
6161

6262
# Type files (.ps1xml) to be loaded when importing this module
63-
# TypesToProcess = @()
63+
TypesToProcess = @()
6464

6565
# Format files (.ps1xml) to be loaded when importing this module
6666
FormatsToProcess = 'Migrate.Autorest/Az.Migrate.format.ps1xml'
@@ -122,7 +122,7 @@ PrivateData = @{
122122
PSData = @{
123123

124124
# Tags applied to this module. These help with module discovery in online galleries.
125-
Tags = 'Azure','ResourceManager','ARM','PSModule','Migrate'
125+
Tags = 'Azure', 'ResourceManager', 'ARM', 'PSModule', 'Migrate'
126126

127127
# A URL to the license for this module.
128128
LicenseUri = 'https://aka.ms/azps-license'
@@ -150,7 +150,7 @@ PrivateData = @{
150150

151151
} # End of PSData hashtable
152152

153-
} # End of PrivateData hashtable
153+
} # End of PrivateData hashtable
154154

155155
# HelpInfo URI of this module
156156
# HelpInfoURI = ''

src/Migrate/Migrate/ChangeLog.md

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
-->
2020
## Upcoming Release
2121

22+
* Added validation for Data.Replication
23+
- Added validation to protect virtual machines in `New-AzMigrateLocalServerReplication`
24+
2225
## Version 2.7.0
2326
* Updated Data.Replication to newer API version
2427
- Updated Data.Replication to point to stable API version 2024-09-01

0 commit comments

Comments
 (0)