Создание тестового стенда
В проектной работе часто используется тестовый стенд для проработки решений. Время от времени на стенде проводятся различные эксперименты, ни какого логирования об изменениях не ведется. Со временем “замученный” стенд требует переустановки с последующей настройки с нуля.
Переустановить стенд в ручном режиме в среднем занимает один день. Выделить на это время сложно. Было решено потратить день на создание автоматизации, теперь при необходимости стенд пересоздается за считанные минуты.
Инфраструктура
Для организации стенда хватает рабочей станции под управлением клиентской Windows с установленным Hyper-V на котором возможно организовать стенд для тестирования и прототипирования решения.
Характеристики рабочей станции
CPU - Intel Core i3 10105 3.7GHz
RAM - 64Gb
DISK - Team Group M2 1Tb
OS - Windows 11 Pro
Настройки окружения
Все виртуальные машины хранятся в каталоге D:\Hyper-V
настройки месторасположения хранения виртуальных машин
В Hyper-V настроены два типа коммутаторов: vExternal и vPrivate. vExternal сопоставлен с Wi-Fi адаптером, чтобы у виртуальных машин был доступ в Интернет.
настройки виртуальных свитчей в Hyper-V
Иногда разворачиваю дополнительную виртуальную машину, с настроенной службой маршрутизации и удаленного доступа (Routing and Remote Access Service - RRAS), которая выполняет роль шлюза для доступа в интернет. Таким образом в виртуальных машинах кому необходим доступ в Интернет в качестве шлюза указывается IP-адрес виртуальная машина с ролью RRAS.
Подготовка образов
Далее, вручную готовим эталонный образ с диском виртуальной машины. Этих эталонных образов понадобится столько, сколько предполагается использовать версий операционных систем. В большинстве случаем хватает несколько актуальных образов, например, Windows Server 2022 Standard и Windows 11 Pro, иногда Windows Server 2022 Core.
Эталонный образ виртуальной машины необходим, чтобы сэкономить время на установку операционной системы, а также сэкономить объем жесткого диска, так как будут использоваться разностные диски и эталонный образ будет является родительским диском для новой виртуальной машины. Для демонстрационного стенда идеальное решение.
Все как обычно: создаем виртуальную машину, запускаем, устанавливаем операционную систему, желательно установить текущие обновления, далее выполняем команду Sysprep с файл ответом, чтобы при первом запуске не настраивать операционную систему.
Быстро подготовить файл ответов без разворачивания Windows ADK может помочь онлайн конфигуратор на сайте https://www.windowsafg.com.
Необходимые настройки операционной системы при первом запуске сохраняем в файл на диске эталонной виртуальной машины, например, autounattend.xml на диске C:, который и будет использоваться как один из параметров файла ответов для запуска Sysprep после окончания настройки ОС в виртуальной машине.
1
sysprep /generalize /oobe /shutdown /unattend:c:\autounattend.xml
Выключаем виртуальную машину. Готово.
На хосте гипервизора в каталоге D:\Hyper-V создаем новый Template, в котором будут размещаться диски с эталонными образами операционных систем со своей системой обозначения:
ws16 - Windows Server 2016 Standard
ws19 - Windows Server 2019 Standard
ws22 - Windows Server 2022 Standard
ws22c - Windows Server 2022 Core
w7 - Windows 7 Pro
w7e - Windows 7 Enterprise
w10 - Windows 10 Pro
w10e - Windows 10 Enterprise
w11 - Windows 11 Pro
w11e - Windows 11 Enterprise
Инструментарий
В качестве автоматизации используется PowerShell. Код удобно писать в Visual Studio Code, иногда в PowerShell ISE, а хранить результат в репозитории GitHub.
Постарался сделать универсальный инструмент для автоматического поднятия демо стенда. Для этого необходимо заполнить CSV-файл, где будут перечислены все виртуальные машины с их параметрами.
Логика работы
В автоматическом режиме будет:
- созданы все виртуальные машины из списка CSV-файла
- развернут контроллер домена
- все виртуальные серверы автоматически включены в домен при условии если это значение было указано в CSV-файле (domain/workgroup)
Пример CSV-файла
1
2
3
4
5
6
7
8
9
10
VM;Role;RAMStart;RAMMin;RAMMax;CPU;Switch;OS;FQDN;IP;Join;Add
DC;DC;2048;512;4096;2;vPrivate;WS19;dc-01;192.168.0.1;domain;False
GTW;gateway;2048;2048;2048;2;vPrivate;WS19;gtw;192.168.0.10;workgroup;False
W10-01;client;2048;512;4096;4;vPrivate;w10;w10-01;192.168.0.11;domain;False
W10-02;client;2048;512;4096;4;vPrivate;w10;w10-02;192.168.0.12;workgroup;Fasle
CM;ConfigMgr;8196;8196;16392;4;vPrivate;WS19;cm;192.168.0.2;domain;False
W10-04;client;2048;512;4096;4;vPrivate;w10;w10-04;192.168.0.15;workgroup;True
W10-05;client;2048;512;4096;4;vPrivate;w10;w10-05;192.168.0.16;workgroup;True
W10-06;client;2048;512;4096;4;vPrivate;w10;w10-06;192.168.0.17;workgroup;True
W10-07;client;2048;512;4096;4;vPrivate;w10;w10-07;192.168.0.18;workgroup;True
Поля в CSV-файле означают следующее:
VM - название виртуальной машнины в Hyper-V
Role - роль виртуальной машины
RAMStart - количесво оперативной памяти для старта виртуальной машины в МБ
RAMMin - минимальное количество оперативной памяти в МБ;
RAMMax - максимальное количеств оперативной памяти в МБ;
CPU - количество ядер для виртуальной машины;
Switch - назначение виртуальнного адаптера vExternal или vPrivate;
OS - шаблон операционной системы;
FQDN - DNS-имя виртуальной машины в Windows;
IP - IP-адрес виртуальной машины в Windows;
Join - присоединять к домену domain или к рабочей группе workgroup;
Add - создавать виртуальную машину из списка True или нет False
Прежде чем запустить код на PowerShell, необходимо скорректировать значения переменных под свою инфраструктуру. И обязательно указать логин и пароль локального администратора от эталонных образов виртуальных машин с установленной операционной системой. Иначе магия автоматизации не произойдет.
В моем случае для всех систем сделал одинаковый логин и пароль, когда создавал файл ответов для запуска Sysprep на эталонных виртуальных машинах:
логин Administrator
пароль P@$$w0rd
Скрипты
Когда все готово можно запускать скрипты по очереди:
- Add-VM.ps1 - скрипт для создания всех виртуальных машин из CSV-файла. После отработки скрипта необходимо подождать пока операционные системы подготовятся на созданных виртуальных машинах, т.к. при первом запуске отрабатывается файл ответом, который был запущен на виртуальной машине, когда была подготовка эталонного образа операционной системы.
- Add-AD.ps1 - скрипт для поднятия контроллера домена После запуска необходимо дождаться автоматической настройки сервера и установки роли контроллера домена.
- Set-Server.ps1 - скрипт для настройки серверов: присвоение имени, назначения IP-адреса и ввода в домен если это указано в CSV-файле.
- Set-Client.ps1 - скрипт для настройки клиентов: присвоение имени, назначения IP-адреса и ввода в домен если это указано в CSV-файле.