Масове розгортання віртуальних машин із використанням SCVMM2008R2 SP1

Як відомо, у VMM є можливості масового розгортання віртуальних машин. І тому використовуються звані шаблони (Templates). Конструктивно шаблон складається з образу віртуального жорсткого диска (ів), налаштувань віртуального "заліза" - кількість процесорів, обсяг пам'яті, мережні адаптери, etc. та налаштувань гостьової ОС: ім'я комп'ютера, Product Key, пароль локального адміна, і т.д. Файли образів VHD зберігаються в розшарованих папках бібліотек (Library Share), за замовчуванням – на сервері VMM, а всі налаштування – в базі даних MS SQL, що використовується для роботи VMM.

Отже, спочатку необхідно створити шаблон (або шаблони – якщо їх буде кілька). Для цього створюється віртуальна машина, на неї встановлюється ОС, інший софт (якщо необхідно) та за допомогою візарду New Template конвертується у шаблон. У процесі конвертації гостьова ОС обробляється за допомогою sysprep, потім VHD копіюється в Library Share, а сама віртуальна машина видаляється.

Після створення шаблону розгортання віртуалок буде проводитись у 2 етапи:

  1. Власне створення віртуалок
  2. Введення в домен – віддалено, за допомогою утиліти psexec

Розгортання

Отже, ми створили шаблон. У процесі створення шаблону потрібно було визначити налаштування як "заліза" так і гостьовий ОС. З якоїсь досі незрозумілої причини в Microsoft вирішили не додавати в цей візард можливості завдання статичних мережевих налаштувань. При цьому можна встановити введення в домен. Спробуємо створити віртуалку із шаблону.

На жаль, ми не зможемо вводити наші віртуалки в домен через Візард - оскільки перед цим необхідно прописати мережеві налаштування.

розгортання

Як це зробити? Єдиний спосіб, який я зміг знайти, - використання секціїGuiRunOnce.

Відразу поки не перейшли далі: задавати пароль локального адміністратора у візарді теж не можна. Якщо його поставити – після завантаження гостьової ОС доведеться набирати цей пароль для входу до системи. Якщо пароль тут не задавати - вхід в систему відбудеться автоматично, і секція GuiRunOnce коректно відпрацює. Проте пароль задавати потрібно. По-перше – з метою безпеки, по-друге – без пароля не відпрацює команда psexec. Так що залишаємо пароль порожнім, він буде заданий командою net user GuiRunOnce.

Я додавав наступні команди:

netsh interface ipv4 set address "Local Area Connection" static 172.16.0.10 255.255.0.0 172.16.0.254

netsh interface ipv4 add dnsserver "Local Area Connection" 172.16.0.1

netsh firewall set opmode mode=disable

net user administrator P@ssw0rd

Пояснення: перша та друга команда задають налаштування мережі: IP 172.16.0.10, Mask 255.255.0.0, Gaterway 172.16.0.254, DNS 172.16.0.1. Третя команда вимикає Windows Firewall (потрібно для коректного відпрацювання psexec – див. далі), справжні джедаї замість відключення фаєрволла можуть задати відповідні правила. Четверта команда визначає пароль для облікового запису локального адміністратора.

Перед натисканням Finish – не забудьте встановити галочку Power on virtual machine after creation, щоб віртуалка запустилася автоматично відразу після створення.

Введення в домен

netdom join %computername% /d:test.local /ud:test\administrator /pd:P@ssw0rd /reb:15

Оскільки віртуалок у нас буде багато, заходити на кожну та виконувати команду ми не будемо. Для автоматизації ми використовуємо чудову утиліту psexec від Марка україновича. У нашому випадку команда виглядатиме так:

psexec\\172.16.0.10 -u administrator -p P@ssw0rd netdom join %computername% /d:test.local /ud:test\administrator /pd:P@ssw0rd /reb:15

На жаль, ця команда візьме значення змінної %computername% не з віртуалки, а з ОС, де ця команда виконувалася. Щоб команда відпрацювала коректно, ми зробимо так:

  1. Створюємо *.cmd-файл
  2. Поміщаємо до нього команду netdom join …(далі за текстом)
  3. За допомогою pscexec із ключем –c виконуємо цей командний файл на цільовій віртуалці:

psexec\\172.16.0.10-c-u administrator -pP@ssw0rdaddtodomain.cmd

Автоматизація

Оскільки, як уже було сказано – віртуалок ми матимемо багато – нам необхідно автоматизувати процес. Найпростіше для цього використовувати Power Shell. Для того, щоб скрипти коректно відпрацювали - необхідно, щоб на комп'ютері була встановлена ​​консоль керування SCVMM і в консолі Power Shell необхідно завантажити відповідні розширення.

Попередньо потрібно підготувати список віртуалок, які ми розгортатимемо. Найпростіше це зробити в Excel і зберегти результати у форматі CSV. В результаті має вийти щось на кшталт:

Vmname,IP,Mask,Gateway,DNS Alpha,172.16.0.10,255.255.0.0,172.16.0.254,172.16.0.1 Bravo,172.16.0.11,22.5.2. 16 .0.1 Charlie,172.16.0.12,255.255.0.0,172.16.0.254,172.16.0.1 Delta,172.16.0.13,255.255.0.0,172.1.1.2.1. 172.16.0.14 ,255.255.0.0,172.16.0.254,172.16.0.1 Foxtrot,172.16.0.15,255.255.0.0,172.16.0.254,172.16.0.1

Тепер можна написати скрипт, зокрема PowerShell, який створить віртуалки з шаблону з параметрами, взятими зі списку. У мене скрипт вийшов такий:

$VMS = Import-CSV c:\temp\vm.csv

$Template = Get-Template -VMMServer localhost where $VMHost = Get-VMHost -VMMServer localhost where $HardwareProfile = Get-HardwareProfile -VMMServer localhost where

$VMS Foreach-Object

< $VMName=$_.Vmname $IP=$_.IP $Mask=$_.Mask $Gateway=$_.Gateway $DNS=$_.DNS

New-VM -Template $Template -Name $VMName -VMHost $VMHost -Path "c:\VM" -Owner "TEST\administrator" -HardwareProfile $HardwareProfile -ComputerName $VMName -TimeZone 170 -GuiRunOnceCommands "netsh interface ipv4 встановити адресу ""Підключення по локальній мережі"" static $IP $Mask $Gateway", "netsh interface ipv4 add dnsserver ""Підключення по локальній мережі"" $DNS", "netsh firewall set opmode mode=disable", "netsh user administrator P @ssw0rd" -RunAsSystem -StartAction TurnOnVMIfRunningWhenVSStopped -DelayStart 0 -StopAction ShutdownGuestOS -StartVM -JobGroup 63e01329-c734-4c1b-a796-1ed955bda1eb -RunAsynchronously >

Тепер можна запустити наш скрипт і іти курити (пити каву, чай, пиво тощо) – процес затягнеться досить довго, особливо коли віртуальнок багато.

Після того, як усі віртуальні машини будуть створені та запущені – потрібно «пройти» по ним за допомогою psexec і ввести в домен. Для цього створюємо ще один сценарій Power Shell.

Припускається, що файл domain.cmd у нас вже створений і лежить в тому ж каталозі, що і скрипт.

$VMS = Import-CSV c:\temp\vm.csv

$VMS Foreach-Object < $IP=$_.IP .\psexec.exe \\$IP -c -u адміністратор -p P@ssw0rd domain.cmd >

Після роботи цього скрипта всі наші віртуальні машини зі списку будуть введені в домен. Вітаю, ви виповнили цей квест!

P.S. Знаю, що в скрипти ще багато чого можна додати – запис влог, наприклад, або в другому скрипті обійтися без CMD-шника, а брати computername з CSV, і, напевно, багато іншого - тим не менш, напрям куди копати я задав. Якщо комусь стане в нагоді в роботі – буду радий. Коментарі, зрозуміло, вітаються.

  • Рубрика: System Center,Virtualization,Без рубрики,Нове
  • Автор: Олександр Косівченко
  • Дата: Fr >

Найближчий ToDo List: 1) Прикрутити запис в Log-файл - потрібно хіба що для 2го скрипта, по 1му всі Job'и і так видно в консолі VMM 2) У 1м скрипті додати поле hostname, щоб брав ім'я хоста з CSV Що ще можна додати?

Наприклад, додати в окремий текстовий файл нумератори. Під час створення віртуальної машини, її назва береться з, допустимо фіксованого префікса “VM” і нумератора з файлу “1”, після створення нумератор змінюється на “2”, тоді можна уникнути заповнення імен віртуалок при повторному запуску скрипта.

Навіщо нумератори, окремі файли? Мені здається, найпростіше Excel сформувати CSV і по ньому вже робити віртуалки. Принаймні це рішення більш універсальне. По-моєму так.

Unatended файл дозволяє задавати статику. Просто спосіб не зовсім секурний вийшов.

Дозволяти він дозволяє, але це ж доведеться генерувати сотню XML-ників, по одному для кожної віртуалки?

Коли мова про сотні віртуалок, то використання статики скидається на самобичування)))

@8 або на напади параної у безпечників &#128521;

І тим не менш, при всій дурості – доводиться з цим працювати &#128577;

У нас був якось великий держзамовник і ми робили їм серверну для якогось страшно секретного обладнання. Так от, усю електроніку, яку ми там розміщували – кондиціонери, блок погодження, аждо пожежних сповіщувачів та датчиків диму – відправляли до якоїсь організації, де їх розбирали, фотографували у рентгені та перевіряли на відсутність “жучків”. При цьому вони погоджувалися на втрату гарантії. Так-то!

  • Андрій Шимкін
  • 24 April, 2012

Не знаю як у інших, у мене при читанні статті відразу ж виникло бажання записати вираз “netsh interface ipv4 set address “Local Area Connection” static $IP $Mask $Gateway”, netsh interface ipv4 add dnsserver “Local Area Connection "$DNS", "netsh firewall set opmode mode = disable", "net user administrator P@ssw0rd" в змінну, а вже потім її подавати в командлет.

підкажіть будь ласка як запустити подібний скрипт віддалено? на віддаленому сервері, на сервері встановлено SCVMM бажано запустити це скрипт з-під php

Думаю, Вам треба подивитися у бік SCVMM Self-Service Portal.

SCVMM і Self-Service Portal до нього налаштований і працює, але мені потрібно, щоб скрипт запускався на сервері SCVMM за подією та з параметрами з білінгу… білінг запущений на linux PHP

SCVMM і Self-Service Portal до нього налаштований і працює, але мені потрібно щоб скрипт запускався на сервері SCVMM за подією і з параметрами з білінгу ... білінг запущений на linux PHP