Pull to refresh

Comments 30

с графическим инструментом
Часть про ServiceNow пропущена, у вас там используется встроенный Service Catalog, или что-то кастомное? Заказчик принципиально требует работать только через ServiceNow? Иначе часто удобнее работать через какой-нибудь портал самообслуживания именно для server/service provisioning'га.
А может вы репозиторий публичный откроете со своими наработками?

PS: хостнейм машины в инфраструктуре заказчика из текста уберите.
Часть про Service-Now добавлена.
Да, испольуется встроенный Service-Catalog. Дело в том, что в проекте уже много реализованных автоматизаций интегрированных с Service-Now, поэтому и данная автоматизация также реализована в интеграции с Service-Now.
А репозиторий откроете? В целях популяризации компании, улучшения HR-бренда.
Данное решение-собственность Заказчика. Я опубликовал общий подход:
1. транслятор JSON-DSC Configuration
2. JSON->Stage VM->Connect to DSC->DSC Management
И отключаемся:

Disconnect-VIServer * -Force -Confirm:$false

Странно, а для чего? После ведь создание виртуальной машины продолжаем через PowerCLI.

Адрес можно взять проще:
$vm_ip_address = (Get-VMGuest -VM $Name).ExtensionData.IpAddress


Интересная статья. Спасибо!
В процессе отладки выяснилось, что не закрытые сессии ведут иногда к не предсказуемым результатам. Понятно, что .net c GC сам все закроет, но лучше сделать это самому.

А сами виртуальные машины на чем разворачиваются? В тексте упоминалась VMware, на ней? Или что-то ещё: Hyper-V или типа того?


Ещё было бы полезно узнать немного о бизнес-задачах Заказчика, это во многом объяснило бы, почему вы реализовали схему именно так. Уверен. можно это сделать не засвечивая конф. информации)

Виртуальные машины разворачиваются в vSphere кластерах через PowerCLI. Все это делает BuildVM.ps1 скрипт и нет никаких проблем сделать ответвление на разворачивание машин в Hyper-V.

Этот инструмент особенно удобен Заказчику, когда нужно создать ряд симметричных машины, например: для фермы терминальных серверов с SAP, Navision, etc., кластера принт-серверов.
Этот инструмент удобен для всякого рода Disaster ситуаций-мы сможем сбилдить новую машину в короткие сроки, тот-же принт-сервер воссоздастся со всеми принтерами и драйверами. Доходило до смешного, что нам было быстрее сбилдить новую машину, чем пытаться доконфигурить старую.
Этот инструмент удобен для создания SCCM/SCOM кластеров с SQL Server.
IPAM позволяет рулить всеми IP все сети заказчика и даже DMZ машины имеют свою А-запись, что удобно.
C DSC SQL Server настраивается ровно так, как нужно по Дизайну, со всеми скедул тасками, выключенным sa и прочее. DSC вообще много чего позволяет делать. А json лишь удобный формат хранения таких конфигурация-более читаемый.
Не очень понял, почему размеры диска и памяти проверяются как просто числа (даже не числа, а строки! )
IF ($Datastore1.FreeSpaceGB -le "200"){
Write-Host -foreground red "STOP: Not enough datastore capacity for DISK" $vdisk.Id
Break
}
IF ($VMHost.MemoryUsageGB -le "20"){
Write-Host -foreground red "STOP: No enough ESXi host capacity"
        Break
}
а не как $Configuration.VM.RAM и т.д.

а вот это, наверное, вы так с кодировкой боретесь или зачем?
$Configuration=(Get-Content -Raw $File | Out-String | ConvertFrom-Json)


PowerShell в этом плане «умен», в данном случае «200» это Runtime type.
Данно выражение работает:
PS C:\Program Files\WindowsPowerShell\Scripts> $Datastore.FreeSpaceGB
1265.4

PS C:\Program Files\WindowsPowerShell\Scripts> $Datastore.FreeSpaceGB -le 1600
True

PS C:\Program Files\WindowsPowerShell\Scripts> $Datastore.FreeSpaceGB -le 1200
False

PS C:\Program Files\WindowsPowerShell\Scripts> $Datastore.FreeSpaceGB -le "1600"
True

PS C:\Program Files\WindowsPowerShell\Scripts> $Datastore.FreeSpaceGB -le "1200"
False


$VMHost.MemoryUsageGB -это память на ESXi хосте. У нас есть условие, что у ESXi хоста должно быть не менее 20Gb памяти до размещения машины. Понятно, что машина с 32Gb Ram туда «не влезет», но машина с 32Gb это также довольно редкое явление и требующее повышенного внимания.
Ваше замечание верно. Я обновлю код.

По пайплайну содержимое файла сразу попадает к ConvertFrom-Json и получаем PowerShell объект $Configuration. Возможно как-то можно это и улучшить, но данная строка отлично работает и пока никаких проблем.
Про то что Powershell умный — это понятно :)

А про пайплайн я имел ввиду, почему не просто
$Configuration = Get-Content $File | ConvertFrom-Json
Так исторически сложилось, как я понимаю.

Ну и максимальные/минимальные значения из массива объектов получать через «Measure-Object -Maximum -Minimum» раза в три быстрее и, главное, нагляднее.

Особенно он пригодится, если размеры необходимого дискового пространства тоже считать, а не «200» брать :)
Да, так исторически сложилось. А все из-за отладки когда (Get-Content ukhqsv50876.json | Out-String ) использовалось для вывода в консоль содержимого json файла.
$Configuration = Get-Content $File | ConvertFrom-Json

так тоже работает.
Measure-Object — это не самый популярный командлет, поэтому его и не использовали. Почти во всех статьях -le -eq etc и в большинстве случаев этого достаточно и многие сходу поймут что с чем сравнивается. Попробуем использовать Ваше предложение
Забыл ещё вот про это —
$VMTemplate = Get-Template -Name 'Win2016_Std_x64_Template' 
У вас же машинки по идее 2012 тоже бывают…

а за идею установки PS через "DISM /online" — большое спрасибо. а то через schatasks/psexec вечно раздражало.
Тогда в коде ответвление по условию на
$VMTemplate = Get-Template -Name 'Win2012r2_Std_x64_Template' 
Отличная статья.

Я так понимаю, что это всё возможно только для vSphere, а в «десктопных» вариациях VmWare и VirtualBox подобного не сделать, верно?

Ну почему же, все до чего может дотянуться PowerShell- применимо. По большому счету, все что имеет CLI-применимо.

Disk 0 (C:\) имеет фиксированный размер
Какой же? А, нашёл.
A почему объём то в кавычках, то без?
В образе сохранен локальный администратор с известным нам паролем
У меня для вас плохая новость…

P.S. Клиентам этих товарищей: ну вы поняли, да?

Нашлась "ошибка", для других дисков определен int тип данных. Я исправлю.


Локальными админами в доменной среде управляет LAPS, а в dmz-dsc выставляет пароль. Вклинится в процесс staging весьма сложно.

Про «вклиниться» никто и не говорил, но если образ можно получить «на руки», то узнать пароль — дело техники. Другими словами, пароль известен не только вам

VMware имеет свою защиту, образ не так-то и просто получить.
Потом, что даст этот пароль если на развернутых машинах этот пароль другой?

Если этот пароль всегда неактуален, какой смысл в его знании?
Помимо доступа к самому прообразу, прямой или опосредованный доступ возможен к файлу, в котором хранится хэш на «живой» VM

Доступ к VMware темплейту? Если кто-то сможет скопировать его и запустить то у нас и так — большие проблемы.
Расскажите подробнее за какой хэш вы говорите.

Хэш пароля учётной записи локального администратора (знание которой, если верить статье, имеет какое-то сакраментальное значение, а если верить вашим комментариям — полностью бесполезно) можно достать из безопасного режима ОС, если не ошибаюсь

В ос даже в безопасном режиме надо "зайти".
В частности у нас была ситуация когда был один локальный админ который имел флаги password expired и user cannot change password и машина потеряла domain trust. Чтобы восстановить доступ пришлось грузиться с диска, цеплять реестр и сбрасывать пароль. Но для этого нужен доступ к VMware консоли или к irmc. Не выцепить этот хэш без доступа к консоли машины.

Да вы издеваетесь?
Пароль можно узнать в своей ВМ, а получить доступ к чужой, однако если они не совпадают, почему в тексте статьи ставится акцент на его знании? И что значит «позже»?
Пару слов о машине. Это подготовленный образ виртуальный машины, который был финализирован sysprep и сконвертирован в template в нашем vSphere. В образе сохранен локальный администратор с известным нам паролем, эта учетная запись «не слетает» после sysprep, что позволит нам получить доступ к каждой машине из этого темплейта, а позже мы сможем заменить этот пароль в целях безопасности.
этот пароль используется для подключении машины к DSC, после этого он меняется.
написано
«намекается» или «подразумевается», вы хотели сказать?
Sign up to leave a comment.