Powershell: Удаление очередей RabbitMQ по маске

Скрипт обращается к API RabbitMQ для получения списка очередей. Список фильтруется так, чтобы включать только очереди, соответствующие указанному шаблону (amq.gen*).

Функция Get-Queues получает список доступных очередей, а функция remove-queue удалениет найденные очереди соответствующие заданной маске.

$log_path = "C:\zabbix_agent\_test.log"
$size_mb = $($(Get-ChildItem $log_path | Measure-Object -Property Length -sum).Sum /1Mb)

$size_mb_max = 5;
$queues_like = "amq.gen*"
# Учетные данные
$username = "admin"
$password = "admin"
$baseurl_srv = "http://127.0.0.1:15672/api/queues/"


if ($size_mb -gt $size_mb_max){
    Remove-Item -Path $log_path -Force -ErrorAction Ignore
}
    
Add-Content -Value "*************************" -Path $log_path
Add-Content -Value "baseurl_srv = $baseurl_srv" -Path $log_path

function Get-Queues{
    param (
        [string] $uname,
        [string] $passwd,
        [string] $url
    )

    # Кодирование учетных данных в base64
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(($uname+ ":" +$passwd)))
    # Заголовок Authorization
    $headers = @{
        Authorization = ("Basic {0}" -f $base64AuthInfo)
    }
    # Выполняем GET-запрос с заголовком Authorization
    $response = Invoke-RestMethod -Uri $url -Method Get -Headers $headers
    # Выводим результат
    $queuees = @()
    foreach ($m in $response.name)
        {
            $queuees += $m
        }
    return $queuees
}

function remove-queue{
    param (
        [string] $uname,
        [string] $passwd,
        [string] $url,
        [object] $queues_mass
    )

    foreach ($q1 in $queues_mass){
        Add-Content -Value "queue deleted = $q1" -Path $log_path
        $encoded_queue_name = [System.Uri]::EscapeDataString($q1)
        $_baseurl = $url +  "%2F/" + $encoded_queue_name
        # Кодирование учетных данных в base64
        $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(($uname+ ":" +$passwd)))
        # Заголовок Authorization
        $headers = @{
            Authorization = ("Basic {0}" -f $base64AuthInfo)
        }
        try{
            # Выполняем GET-запрос с заголовком Authorization
            $response = Invoke-RestMethod -Uri $_baseurl -Method Delete -Headers $headers
            Add-Content -Value $response -Path $log_path
        }
        catch{
            Add-Content -Value $($_.Exception.Message) -Path $log_path
        }
        finally{
            Add-Content -Value "*************************" -Path $log_path
        }
    }
}

$qs = Get-Queues -uname $username -passwd $password -url $baseurl_srv
$massiv_for_delete_queues = @();
foreach ($_q in $qs)
{
    if ($_q -like $queues_like)
    {
        Write-Host $_q
        $massiv_for_delete_queues += $_q;
    }
}

remove-queue -uname $username -passwd $password -url $baseurl_srv -queues_mass $massiv_for_delete_queues

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *