вторник, 29 мая 2012 г.

Создание виртуальных машин

Скрипт автоматического создания виртуальных машин


#Usage: powershell.exe ./CreateVM.ps1 ./machines.csv

# include VmWare
add-pssnapin VMware*

# get file name with VMs content
$InputFileName = $args[0]

#storage maximums
$storageMaximum = '0.2'

# vCenter name
$vCenter='192.168.0.2'

# import content
$InputFile = Import-Csv $InputFileName

echo 'Connect to vCenter'
$vccred = Get-VICredentialStoreItem -host $vCenter -file 'c:\vmware\credentials.xml'
Connect-VIServer $vCenter -User $vccred.user -Password $vccred.Password
echo '------------------------------------'

echo 'Create VMs'
foreach ($item in $inputFile) {
    echo 'current item'
    echo $item
    echo '------------------------------------'

    echo 'parser of item'
    echo $item.folder
    echo $item.name
    echo "CPU: "$item.cpu
    echo "RAM: "$item.ram
    echo $item.template
    echo '------------------------------------'
 
# create new folder for current VM
    $VMFolder = '0'
    $VMFolder = Get-Folder $item.folder
    if ($VMFolder.Name -eq $item.folder) {
        echo 'folder already exists'
    }
    else {
        echo 'create folder'
        $VMFolder = Get-Folder 'Export URG' | New-Folder -Name $item.folder
    }
    echo $VMFolder
    echo '------------------------------------'
 
# get template for current VM
    $template = '0'
    $template = Get-Template -Name $item.template
    echo $template
 
# get specification for current VM
    $specification = '0'
    $specification = Get-OSCustomizationSpec -Name $item.specification
    echo $specification
 
# get datastore with maximum free space
    $bad = 0
    $datastore = 0
    $stores = Get-DataStore
    foreach ($store in $stores) {
        if ($store.FreeSpaceMB -gt $bad) {
            $bad = $store.FreeSpaceMB
            $datastore = $store
        }
    }
# get datastore with minimum RAM usage
    $bad = 1000000000000000000000
    $esxihost = 0
    $hosts = Get-DataStore -name $datastore.name | get-vmhost
    foreach ($hosti in $hosts) {
        if ($hosti.MemoryUsageMB -lt $bad) {
            $bad = $hosti.MemoryUsageMB
            $esxihost = $hosti
        }
    }

echo 'choosed esxi host (name)'$esxihost.name
echo 'choosed datastore (name)'$datastore.name
     
    if (-not($datastore -eq '0')) {
    if (($datastore.freespacemb / $datastore.capacitymb) -gt $storageMaximum) {

# create new VM
    if (-not($item.ram -eq 0)) {
        if (-not($item.cpu -eq 0)) {
            New-VM -Name $item.name -Template $template -VMHost $esxihost -Datastore $datastore -OSCustomizationSpec $specification -location $VMFolder -MemoryMB $item.ram -NumCPU $item.cpu
        }
        else {
            New-VM -Name $item.name -Template $template -VMHost $esxihost -Datastore $datastore -OSCustomizationSpec $specification -location $VMFolder -MemoryMB $item.ram
        }
    }
    else {
        if (-not($item.cpu -eq 0)) {
            New-VM -Name $item.name -Template $template -VMHost $esxihost -Datastore $datastore -OSCustomizationSpec $specification -location $VMFolder -NumCPU $item.cpu
        }
        else {
            New-VM -Name $item.name -Template $template -VMHost $esxihost -Datastore $datastore -OSCustomizationSpec $specification -location $VMFolder
        }
    }
}
    }
}

Disconnect-VIServer -server $vCenter -Confirm:$false

Пример файла-таблицы к скрипту

folder,name,cpu,ram,template,specification,theend
foldername1,vmName1,1,4,temp1*,temp1,theend
foldername2,vmName2,2,4,temp2*,temp2,theend 
foldername2,vmName3,2,4,temp2*,temp2,theend 
foldername3,vmName4,4,4,temp3*,temp3,theend 

понедельник, 21 мая 2012 г.

Блокировки виртуальной машины

В процессе работы столкнулся с багой VmWare, описанной здесь (kb10051).

Машинка молотила в своем привычном режиме час-черезсутки и понадобилось ее переместить в другой ДЦ. А так связь между ДЦ только по меди, делаем это с помощью Database Browser.
Выключил машинку, удалил кучу snapshot и начал делать download from storage, но не тут то было...
vCenter сказал: "Unable to access file since it is locked " и отвалился.
Хотел смигрировать на другой раздел, не получилось.
Полез в инет и наткнулся на статью в KB, в которой косвенно признавалась бага в продукте.

Итак, метод решения:
1. включаем ssh на хосте и логинимся под root.
2. ищем залоченный файл
3. делаем touch .

И в принципе все, должно помочь.

Более запущенные случаи стоит смотреть в КВ.

понедельник, 14 мая 2012 г.

Установка обновлений с помощью VmWare Update Manager

При обновлении своего хозяйства с 5.0.0 на 5.0.0 Update 1 столкнулся с интересной вещью. По умолчанию, esxi кладет распакованные архивы с патчами на раздел, который находится в памяти в виде RAM диска. Но для распаковки Update 1, на отдельных серверах, мне этого раздела не хватало и система выдавала ошибку №15 (кажется).
При поиске решения проблемы натолкнулся на KB, в которой все подробнейшим образом описывается (KB1033696).

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

суббота, 12 мая 2012 г.

Начало!!!

Начну-с!

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

Все остальное (если оно будет), для информации.