Public/New-AGMLibImage.ps1
# Copyright 2022 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. Function New-AGMLibImage ([string]$appid,[string]$policyid,[string]$backuptype,[string]$capturetype,[string]$label,[switch][alias("m")]$monitor,[switch][alias("w")]$wait) { <# .SYNOPSIS Creates a new image .EXAMPLE New-AGMLibImage You will be prompted for Application ID .EXAMPLE New-AGMLibImage 2133445 Create a new snapshot for AppID 2133445 .EXAMPLE New-AGMLibImage -appid 2133445 -policyid 5678 Create a new snapshot for AppID 2133445 using policyID 5678 We learned the policy ID by using: Get-AGMLibPolicies -appid 2133445 .EXAMPLE New-AGMLibImage -appid 2133445 -label "Dev image after upgrade" Create a new snapshot for AppID 2133445 with a label. .EXAMPLE New-AGMLibImage -appid 2133445 -backuptype log Create a new log snapshot for AppID 2133445 .EXAMPLE New-AGMLibImage -appid 2133445 -backuptype log -m Create a new log snapshot for AppID 2133445 and monitor the resulting job to completion .DESCRIPTION A function to create new snapshot images * Databases with log protection If a database has log protection, you will need to specify -backuptype -backuptype log This will run a log snapshot -backuptype db This will run a DB snapshot * Monitoring options: -wait This will wait up to 2 minutes for the job to start, checking every 15 seconds to show you the job name -monitor Same as -wait but will also run Get-AGMLibFollowJobStatus to monitor the job to completion #> if ( (!($AGMSESSIONID)) -or (!($AGMIP)) ) { Get-AGMErrorMessage -messagetoprint "Not logged in or session expired. Please login using Connect-AGM" return } $sessiontest = Get-AGMVersion if ($sessiontest.errormessage) { $sessiontest return } if ($capturetype) { $backuptype = $capturetype } if ($backuptype) { if (( $backuptype -ne "db") -and ( $backuptype -ne "log")) { Get-AGMErrorMessage -messagetoprint "Requested backuptype $backuptype is invalid, use either `'-backuptype db`' or `'-backuptype log`'" return } } if (!($backuptype)) { $backuptype = "" } if (!($appid)) { [string]$appid = Read-Host "AppID" } if ($policyid) { $policygrab = Get-AGMLibPolicies -appid $appid | where-object { $_.id -eq $policyid } if ($policygrab.op.count -ne 1) { Get-AGMErrorMessage -messagetoprint "Failed to find policy ID $policyid for App ID $appid. Please check the Policy ID and AppID with Get-AGMLibApplicationID and Get-AGMLibPolicies" return } $policyname = $policygrab.name } if (!($policyid)) { $appgrab = Get-AGMApplication -filtervalue appid=$appid $sltid = $appgrab.sla.slt.id if (!($sltid)) { Get-AGMErrorMessage -messagetoprint "Failed to learn SLT ID for App ID $appid" return } else { $policygrab = Get-AGMSltPolicy -id $sltid } if (!($policygrab)) { Get-AGMErrorMessage -messagetoprint "Failed to learn Policies for SLT ID $sltid" return } else { $policyid = $($policygrab | Where-Object {$_.op -eq "snap"} | Select-Object -last 1).id $policyname = $($policygrab | Where-Object {$_.op -eq "snap"} | Select-Object -last 1).name if (!($policyid)) { $policyid = $($policygrab | Where-Object {$_.op -eq "DirectOnVault"} | Select-Object -last 1).id $policyname = $($policygrab | Where-Object {$_.op -eq "DirectOnVault"} | Select-Object -last 1).name } if (!($policyid)) { Get-AGMErrorMessage -messagetoprint "Failed to learn any Policy ID for SLT ID $sltid" return } } # help the user write-host -nonewline "Running this command: New-AGMLibImage -appid $appid -policyid $policyid" if ($backuptype) { write-host -nonewline " -backuptype $backuptype" } if ($label) { write-host -nonewline " -label $label" } write-host "" } # now create JSON $policy = @{id=$policyid} $body = [ordered]@{} if ($label) { $body += @{label=$label} } $body += @{policy=$policy} if ($backuptype) { $body += @{backuptype=$backuptype} } $json = $body | ConvertTo-Json $runbackup = Post-AGMAPIData -endpoint /application/$appid/backup -body $json if ($runbackup.err_message) { $runbackup return } if ($monitor) { $wait = $true } if ($wait) { Start-Sleep -s 2 $i=1 while ($i -lt 9) { Clear-Host write-host "Checking for an on-demand job with Policyname `'$policyname`' for appid $appid)" $jobgrab = Get-AGMJob -filtervalue "appid=$appid&policyname=$policyname&isscheduled=False" -sort queuedate:desc -limit 1 if (!($jobgrab.jobname)) { write-host "Job not running yet, will wait 15 seconds and check again. Check $i of 8" Start-Sleep -s 15 $jobgrab = Get-AGMJob -filtervalue "appid=$appid&policyname=$policyname&isscheduled=False" -sort queuedate:desc -limit 1 if (!($jobgrab.jobname)) { $i++ } } else { $i=9 if ($monitor) { $jobgrab| select-object jobname,status,progress,queuedate,startdate,duration,targethost | Format-Table * } else { $jobgrab| select-object jobname,status,progress,queuedate,startdate,targethost } } } if (($jobgrab.jobname) -and ($monitor)) { Get-AGMLibFollowJobStatus $jobgrab.jobname } } } |