120 lines
4.5 KiB
PowerShell
120 lines
4.5 KiB
PowerShell
$Filter = '&$select=ID,Title,DateCreated,Status,DataCenter,Environment,StartupPriority,OS,Processors,RAM,DiskTotal,DataProtection,DR_Protection,SRM_RecoveryVMtype,LicensingRestrictions,Network/Vlan_Id,Network/CIDR,AppName/Title,Cluster/Name&$expand=Network/Id,AppName/Id,Cluster/Id'
|
|
$URLVMItems = "https://share.nd.gov/itd/computer-systems/distributed-systems/vmware/_api/lists/getbytitle('VM Guests')/items?" + '$top=10000' + $Filter
|
|
$InvokeRestMethodParams = @{
|
|
Uri = $URLVMItems;
|
|
Method = "Get";
|
|
headers = @{ "Accept" = "application/json;odata=verbose" };
|
|
UseBasicParsing = $true;
|
|
}
|
|
$z = (Invoke-RestMethod @InvokeRestMethodParams -UseDefaultCredentials) -creplace '"Id":', '"Idx":' | ConvertFrom-Json
|
|
$VMList = $z.d.results
|
|
|
|
$URLAppNames = "https://share.nd.gov/itd/computer-systems/distributed-systems/vmware/_api/lists/getbytitle('VM App Name')/items?" + '$top=10000'
|
|
$InvokeRestMethodParams = @{
|
|
Uri = $URLAppNames;
|
|
Method = "Get";
|
|
headers = @{ "Accept" = "application/json;odata=verbose" };
|
|
UseBasicParsing = $true;
|
|
}
|
|
$z = (Invoke-RestMethod @InvokeRestMethodParams -UseDefaultCredentials) -creplace '"Id":', '"Idx":' | ConvertFrom-Json
|
|
$AppNameList = $z.d.results
|
|
|
|
$AllAppNameVMs = $AppNameList | where-object Cohesity -eq "All VMs"
|
|
$NewAppNameVMs = $AppNameList | where-object Cohesity -eq "New VMs Only"
|
|
|
|
|
|
# compare new vm list to cohesity vm list
|
|
$NewVMs = $VMList | where-object DateCreated -gt (Get-Date -Year 2021 -Month 2 -Day 1)
|
|
|
|
$CohesityVMs = Get-CohesityVMwareVM -Protected
|
|
|
|
$compare = Compare-Object -ReferenceObject $NewVMs.Title -DifferenceObject $CohesityVMs.Name
|
|
$VMsToAdd = $compare | where-object Sideindicator -eq "<="
|
|
$VMsToAddAppNames = $VMsToAdd.InputObject | forEach-object { ($VMList | where-object Title -eq $_).AppName.Title } | Select-Object -unique
|
|
|
|
$AllProtectionGroups = Get-CohesityProtectionJob
|
|
|
|
$AllProtectionSourceObject = Get-CohesityProtectionSourceObject
|
|
$AppNamesToReview = [System.Collections.ArrayList]@()
|
|
ForEach ($AppName in $VMsToAddAppNames) {
|
|
$SourceObjects = $AllProtectionSourceObject | Where-Object Name -eq $AppName
|
|
$ExistingPGs = Get-CohesityProtectionJob -Names $AppName
|
|
|
|
If ($ExistingPGs) {
|
|
$PGsWithTags = $ExistingPGs | where-object { $_.vmTagIds -match '8744' -or $_.vmTagIds -match '8747' }
|
|
If ($PGsWithTags) { $Style = "Tagged VMs" }
|
|
Else { $Style = "All VMs" }
|
|
|
|
$obj = [PSCustomObject]@{
|
|
AppName = $AppName;
|
|
Style = $Style
|
|
}
|
|
}
|
|
Else {
|
|
$obj = [PSCustomObject]@{
|
|
AppName = $AppName;
|
|
Style = "New PG, needs human"
|
|
}
|
|
}
|
|
$null = $AppNamesToReview.Add($obj)
|
|
}
|
|
|
|
$AppNamesToReview | sort-object AppName
|
|
|
|
ForEach ($item in $VMsToAdd) {
|
|
$SPItem = $null
|
|
|
|
# get appname, then appname metadata
|
|
$VMSPItem = $VMList | where-object Title -eq $item.InputObject
|
|
$AppName = $VMSPItem.AppName.Title
|
|
$AppNameSPItem = $AppNameList | where-object Title -eq $AppName
|
|
|
|
|
|
ForEach ($SourceObject in $SourceObjects) {
|
|
switch ($AppNameSPItem.Cohesity) {
|
|
$null {
|
|
If ($AppNameSPItem.Created -gt (Get-Date -Year 2021 -Month 2 -Day 1)) {
|
|
# created after 2021-02-01, set "All VMs"
|
|
$AppNameProtection = "All VMs"
|
|
}
|
|
Else {
|
|
# created before 2021-02-01, set "New VMs"
|
|
$AppNameProtection = "New VMs Only"
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
# find if protection group exists
|
|
$CohesityPGs = Get-CohesityProtectionJob -Names $AppName
|
|
If ($CohesityPGs) {
|
|
|
|
}
|
|
Else {
|
|
New-ITDCohesityProtectionGroupWIP -AppName $AppName
|
|
switch ($AppNameProtection) {
|
|
'All VMs' {
|
|
# do nothing
|
|
}
|
|
'New VMs Only' {
|
|
|
|
}
|
|
}
|
|
}
|
|
# create protection group if needed, configure for "All VMs" condition, end
|
|
# if protection group exists, find out if protect all VMs, or just new
|
|
# if all VMs, no work to do
|
|
# if new VMs, add VM to protection group
|
|
|
|
|
|
|
|
}
|
|
|
|
# Cohesity Protection Groups with the entire AppName protected
|
|
Get-CohesityProtectionJob | Where-Object { $_.vmTagIds -notmatch 8747 -and $_.vmTagIds -notmatch 8744 } | sort-object Name
|
|
|
|
# Cohesity Protection Groups with only new AppName VMs protected
|
|
Get-CohesityProtectionJob | Where-Object { $_.vmTagIds -match 8747 -or $_.vmTagIds -match 8744 } | sort-object Name
|