diff --git a/GetVPGInfo.ps1 b/GetVPGInfo.ps1 new file mode 100644 index 0000000..8e1c3b0 --- /dev/null +++ b/GetVPGInfo.ps1 @@ -0,0 +1,95 @@ +################################################################# +# ZVMEmailAlerts.ps1 +# +# By Justin Paul, Zerto Technical Alliances Architect +# Contact info: jp@zerto.com +# Repo: https://www.github.com/recklessop/ZertoScripts +# +# This script looks for Alerts in ZVM in the "Warning" status and +# sends an email with relevant information to the administrator. +# +# For a list of warnings see this PDF +# http://s3.amazonaws.com/zertodownload_docs/Latest/Guide%20to%20Alarms,%20Alerts%20and%20Events.pdf +# +# Note this script is provided as-is and comes with no warranty. +# The author takes no responsability for dataloss or corruption of any kind. +# Also this script is not supported by Zerto Technical Support. +# +# With that said, the script only uses "GET" commands so you should be pretty safe. +# +################################################################# + +################ Variables for your script ###################### + +$strZVMIP = "172.16.1.20" +$strZVMPort = "9669" +$strZVMUser = "administrator@vsphere.local" +$strZVMPwd = "myPassword" +$vpgName = "myVPG" + +############### ignore self signed SSL ########################## +if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type) +{ +$certCallback = @" + using System; + using System.Net; + using System.Net.Security; + using System.Security.Cryptography.X509Certificates; + public class ServerCertificateValidationCallback + { + public static void Ignore() + { + if(ServicePointManager.ServerCertificateValidationCallback ==null) + { + ServicePointManager.ServerCertificateValidationCallback += + delegate + ( + Object obj, + X509Certificate certificate, + X509Chain chain, + SslPolicyErrors errors + ) + { + return true; + }; + } + } + } +"@ + Add-Type $certCallback + } +[ServerCertificateValidationCallback]::Ignore() +################################################################# + +## Perform authentication so that Zerto APIs can run. Return a session identifier that needs tobe inserted in the header for subsequent requests. +function getxZertoSession ($userName, $password){ + $baseURL = "https://" + $strZVMIP + ":" + $strZVMPort + $xZertoSessionURL = $baseURL +"/v1/session/add" + $authInfo = ("{0}:{1}" -f $userName,$password) + $authInfo = [System.Text.Encoding]::UTF8.GetBytes($authInfo) + $authInfo = [System.Convert]::ToBase64String($authInfo) + $headers = @{Authorization=("Basic {0}" -f $authInfo)} + $contentType = "application/json" + $xZertoSessionResponse = Invoke-WebRequest -Uri $xZertoSessionURL -Headers $headers -Method POST -Body $body -ContentType $contentType + #$xZertoSessionResponse = Invoke-WebRequest -Uri $xZertoSessionURL -Headers $headers -Body $body -Method POST + return $xZertoSessionResponse.headers.get_item("x-zerto-session") +} + +#Extract x-zerto-session from the response, and add it to the actual API: +$xZertoSession = getxZertoSession $strZVMUser $strZVMPwd +$zertoSessionHeader = @{"x-zerto-session"=$xZertoSession} +$zertoSessionHeader_xml = @{"Accept"="application/xml" +"x-zerto-session"=$xZertoSession} + +################ Your Script starts here ####################### +#Invoke the Zerto API: +$peerListApiUrl = "https://" + $strZVMIP + ":"+$strZVMPort+"/v1/vpgs" + +#Iterate with JSON: +$vpgListJSON = Invoke-RestMethod -Uri $peerListApiUrl -Headers $zertoSessionHeader +foreach ($vpg in $vpgListJSON){ + if ( $vpg.VpgName -eq $vpgName ){ + $vpg + } +} +##End of script \ No newline at end of file diff --git a/ZertoMySQLCheckpoint.sh b/ZertoMySQLCheckpoint.sh new file mode 100644 index 0000000..b99fe6c --- /dev/null +++ b/ZertoMySQLCheckpoint.sh @@ -0,0 +1,47 @@ +#!/bin/bash +############################################################################## +# ZertoMySQLCheckpoint.sh +# +# Created by Justin Paul, Tech Alliances Architect, Zerto +# Contact at jp@zerto.com or on Twitter at @recklessop +# +# This script does the following: +# 1.) Lock all MySQL tables and flush data to disk. +# 2.) Call Zerto REST API and insert a User defined Checkpoint +# 3.) Unlock the MySQL tables and resume normal operations +# +# You must provide the VPGID for the VPG that needs the checkpoint inserted. +# To get this information +############################################################################## + +##### Variables Replace with your information ##### +ZVMIP="172.16.1.20" +ZVMPORT="9669" +ZVMUSER="administrator@vsphere.local" +ZVMPWD="mypassword" +VPGID="97b4b6be-5447-491b-bd10-be3600c91ff0" +MYSQLUSER="adminuser" +MYSQLPASSWORD="adminpassword" + +##### Write Date Time to Log file ##### + +##### Login to Zerto REST API ##### +curl -k -D responseHeader -H "Content-Type: application/json" -H "Accept: application/json" --user $ZVMUSER:$ZVMPWD https://${ZVMIP}:${ZVMPORT}/v1/session/add -d "{\"AuthenticationMethod\":0}" +COOKIE=`cat responseHeader | grep x-zerto-session` +SESSION=$(echo "$COOKIE"|tr -d '\r') +echo "---------------------------------" >> ZertoCheckpointInsert.log +echo $SESSION >> ZertoCheckpointInsert.log +echo "---------------------------------" >> ZertoCheckpointInsert.log + +##### Lock and Flush MySQL Databases ##### +outputLock=$(mysql --user="${MYSQLUSER}" --password="${MYSQLPASSWORD}" --execute=' flush tables with read lock;' 2>&1) +echo $outputLock >> ZertoCheckpointInsert.log + +##### Insert Zerto User Checkpoint ##### +INSERTOUTPUT=$(curl -k -H "${SESSION}" -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"checkpointName":"MySQL Quiesced Checkpoint"}' https://${ZVMIP}:${ZVMPORT}/v1/vpgs/"${VPGID}"/Checkpoints) +echo $responseHeader >> ZertoCheckpointInsert.log + +##### Lock and Flush MySQL Databases ##### +outputUnlock=$(mysql --user="${MYSQLUSER}" --password="${MYSQLPASSWORD}" --execute=' unlock tables;' 2>&1) +echo $outputUnlock >> ZertoCheckpointInsert.log +