AutomationVMware

VMware PowerCLI ve Slack Alarmları #2 VM Descriptions

vSphere ortamındaki sanal makinelerin açıklama kısımlarını sunucuların hizmet verdiği iş birimine, uygulamaya,ekiplere yada sanal makine talep ticketlarına göre doldurmaya çalışıyoruz. İhtiyaç halinde sanal makinelerin hangi birime, hangi sürece yada hangi ticketa istinaden kurulduğunun bilgisi gerekebiliyor. Hele ki bu sanal makinelerin açıklama kısımları boş ise malesef uğraştırıcı bir arayış içerisine girebiliyoruz. Bu makalede sizlere açıklama kısımları doldurulmamış sanal makinelerin listesini PowerCLI ile toplayıp bu veriyi Slack kanalına alarm olarak göndermeyi ve sonrasında JIRA üzerinde bu iş yükünün ticketını açmayı anlatacağım.

VMware PowerCLI ile sanal makine snapshotlarının Slack alarm durumundan bahsettiğim bir önceki makaleyi incelemek isterseniz aşağıda bulabilirsiniz.

Aşağıdaki değişkenler ile vCenter üzerinden tüm sanal makine listesini çekip açıklama kısımlarına göre filtreleyeceğiz. Sonrasında bu listeyi hem Slack kanalına iletilmesini hem de JIRA üzerinde iş kayıtlarının açılmasını sağlayacağız.

PowerShell
$vcenter = "vcenter01.domain.local"
$user = "administrator@vsphere.local"
$password = ""
$location = "Site B - DEV vCenter"
$uriSlack = "https://hooks.slack.com/...."
$jiraProjectKey = ""
$jiraUsername = ""
$jiraToken = ""
$jiraURL = ''

İlk olarak aşağıdaki foreach döngüsüyle açıklaması boş olan sanal makineleri bir listeye ekliyoruz.

PowerShell
$noDescVMs = Get-VM

foreach ($vm in $noDescVMs) {
    if ([string]::IsNullOrEmpty($vm.Notes)) {
        $vmList += $vm.Name + "`n"
    }
}
if (![string]::IsNullOrEmpty($vmList)) {
    sendSlack $vmList
}
else {
    Write-Host "Everything is OK."
}

Sanal makine listesini sendSlack fonksiyonuna gönderip Slack kanalına bildirimini sağladıktan sonra ilgili değişkenlerle beraber JIRA da iş kayıtlarını açacağımız python scriptini çağırıyoruz.

PowerShell
function sendSlack {
    param([string]$vmNames)
    Write-Host $vmName
    $locationText = "*Location:* " + $location + "`n";
    $vcenterURLText = "*vCenter URL*: https://" + $vcenter + "`n"
    $slackText += $locationText + $vcenterURLText + '```' + $vmNames + '```'
    $slackBody = ConvertTo-Json @{
        text = $issueTitle + $slackText + $action
    }
    Invoke-RestMethod -uri $uriSlack -Method Post -body $slackBody -ContentType 'application/json' | Out-Null
    write-host "You can check your Slack"
    & "$PSScriptRoot\noDescriptionVMs.py" $location, $vmNames, $jiraProjectKey, $jiraUsername, $jiraToken, $jiraURL
}

sendSlack() fonksiyonundan sonra Slack kanalına aşağıdaki gibi bir bildirim alacaksınız.

Son olarak Powershellden aldığımız değişkenlerle beraber JIRA ya gönderip iş kayıtlarını açıyoruz.

Python
from jira import JIRA
import sys
location = sys.argv[1]
vmNames = sys.argv[2]
jiraProjectKey = sys.argv[3]
jiraUsername = sys.argv[4]
jiraToken = sys.argv[5]
jiraURL = sys.argv[6]
issueTitle = location + " | Virtual Machines with empty notes"
summary = "'" + '"' + issueTitle + '"' + "'"
issueDescription = "*Virtual machines does not have any note/description.*\n"
issueAction = "Please fill the VM Notes section."
description = issueDescription + "\n{code:java}" + vmNames + "{code}\n"
jira_connection = JIRA(basic_auth=(jiraUsername, jiraToken), options={'server': jiraURL})
issue_dict = {
    'project': {'key': jiraProjectKey},
    'summary': issueTitle,
    'description': description,
    'issuetype': {'name': 'Task'},
}
jira_connection.create_issue(fields=issue_dict)

JIRA da artık bu sanal makine listesini issue olarak görebiliyoruz.

You can access the scripts used in the article from my Github profile.

Leave a Reply

Your email address will not be published. Required fields are marked *