Util/MigrationUtil.psm1
Import-Module -Name $PSScriptRoot\Util function Get-RMMigrationByIdAndStatus { param( [string] $MigrationId, [bool] $StatusOnly = $false ) $RMLoginResult = Get-Variable -Name "RMContext-UserLogin" $Uri = Get-Variable -Name "RMContext-ReactorURI" $Headers = @{ Accept = "application/rm+json" "X-Auth-Token" = $RMLoginResult.Value.token } $Params = @{ Method = "Get" Uri = $Uri.Value + "/migrations/" + $MigrationId + "?status_only=$StatusOnly" Headers = $Headers ContentType = "application/json" } return Invoke-RMRestMethod -Params $Params } function Get-RMMigrationsByIds { param( [string[]] $MigrationIds ) $RMLoginResult = Get-Variable -Name "RMContext-UserLogin" $Uri = Get-Variable -Name "RMContext-ReactorURI" $MigrationIdString = $MigrationIds -join "," $Headers = @{ Accept = "application/rm+json" "X-Auth-Token" = $RMLoginResult.Value.token } $Params = @{ Method = "Get" Uri = $Uri.Value + "/migrations?migration_ids=" + $MigrationIdString Headers = $Headers ContentType = "application/json" } return Invoke-RMRestMethod -Params $Params } function Get-RMCurrentStepIndex { param( [system.Object] $Migration ) $Index = 0 switch ($Migration.state) { "success" { $Index = $Migration.steps.Count break } {($_ -ieq "running") -or ($_ -ieq "error")} { while ($Migration.steps.Count -gt ($Index + 1) -and $Migration.steps[$Index + 1].state -ine "pending") { $Index++ } break } } return $Index } function Get-RMFirstPendingStepIndex { param( [System.Object] $Migration ) $Index = -1 foreach ($Step in $Migration.steps) { $Index ++ if ($Step.state -ieq "pending") { return $Index } } return $Index } function Get-RMMigrationProgress { param( [System.Object] $Migration ) $StepIndex = 0 if ($Migration.state -ieq "pending") { $StepIndex = Get-RMFirstPendingStepIndex -Migration $Migration } else { $StepIndex = Get-RMCurrentStepIndex -Migration $Migration } return [int](($StepIndex/$Migration.steps.Count) * 100) } function Test-RMMigrationStalled { param( [System.Object] $Migration ) if ($Migration.state -ne "running") { return $false } foreach ($Step in $Migration.steps) { if ($Step.state -eq "running" -and $null -ne $Step.recoverable_errors -and $Step.recoverable_errors.Count -gt 0) { return $true } } return $false } function Get-RMMigrationsNotFound { param( [string[]] $ReceivedMigrationIds, [string[]] $UserInputMigrationIds ) $NotFoundMigrationIds = @() $CompareResults = Compare-Object -ReferenceObject $UserInputMigrationIds -DifferenceObject $ReceivedMigrationIds foreach ($CompareResult in $CompareResults) { if ($CompareResult.SideIndicator -contains "<=") { $NotFoundMigrationIds += $CompareResult.InputObject } } return $NotFoundMigrationIds } class MigrationStatus { [string] $MigrationId [string] $Status [string] $Progress MigrationStatus( [string] $MigrationId, [string] $Status, [string] $Progress) { $this.MigrationId = $MigrationId $this.Status = $Status $this.Progress = $Progress } } |