среда, 25 июля 2012 г.

Чистка datastore (часть 2)

И так, продолжим очистку наших дисков от старых виртуальных машин.
В первой части (ссылка) мы получили два списка:
1. список зарегистрированных машин с их файлами.
2. список файлов с их директориями, находящимися на всех Datastore.

Этот скрипт поможет вычислить файлы, которые есть в одном списке (datastore.log) и нет в другом (vm.log).


#!/bin/bash

# cat vm.log | gawk -F, '{printf("%s\n", $2)}' | tr -d \"

cat datastore.log1 | gawk -F, '
BEGIN {
c=1;
while (getline < "vm.log_files" > 0) {
vm[c] = $0;
c++;
}
}
{
i=1
j=1
while (i < c) {
printf("%d: %s\n", i, vm[i]);
printf("---\n%s\n---\n", $2);
# printf("%d\n", index(vm[i], $2));
if (index(vm[i], $2) != 0) {
printf("match: %s, %s\n", $2, vm[i]);
j++;
}
i++;
}
printf("--\n%d\n", j);
if (j == 1) {
printf("%s, %s", $1, $2);
}
printf("==\n");

}
'

четверг, 5 июля 2012 г.

Чистка datastore (часть 1)

Возникла необходимость почистить место на datastore. В связи с чем и родились следующие скрипты.

Скрипт №1 - Составление списка всех зарегистрированных виртуальных машин вместе с их дисками
$vCenter = $args[0]

echo 'Connect to vCenter'
Connect-VIServer $vCenter
echo '------------------------------------'

$Report = @()

echo 'Get-VMs'
foreach ($item in Get-VM) {
foreach ($item2 in Get-HardDisk $item) {
$VMInfo = {} | Select VMName,Disk
$VMInfo.VMName = $item.name
$VMInfo.Disk = $item2.filename
$Report += $VMInfo
}
}

$Report = $Report | Sort-Object VMName
IF ($Report -ne "") {
$Report | Export-Csv .\$vCenter.log -NoTypeInformation
}

Disconnect-VIServer -Confirm:$false

Скрипт №2: Составление списка файлов, находящихся на datastore, вместе с их директориями и именами datastore.

$vCenter = $args[0]

echo 'Connect to vCenter'
Connect-VIServer $vCenter

$Report = @()

echo 'Get-VMs'
foreach ($item in get-datastore) {
$item

new-psdrive -location $item -name ds -psprovider VimDatastore -Root "\"

Set-Location ds:\

foreach ($f in Get-ChildItem) {
set-location $f

foreach ($o in get-childitem) {
echo "------------------------file information--------------------------------"
$filelist = {} | Select datastorename,foldername,filename
$filelist.datastorename = $item.Name
$filelist.foldername = $f.Name
$filelist.filename = $o.name
write-host $item.name"; "$f.name"; "$o.name
$report += $filelist
}
}

Set-Location d:\projects\powercli\getvm\

remove-psdrive -name ds
}

# $Report = $Report | Sort-Object VMName
IF ($Report -ne "") {
$Report | Export-Csv .\datastore.log -NoTypeInformation
}

Disconnect-VIServer -Confirm:$false

Вывод всего лишнего в следующей серии, так нет времени на написании скрипта.