Использование custom attributes в vCenter
- Что такое Custom Attributes ?
- Как создать настраиваемый атрибут через веб-версию vCenter
- Заполнение настраиваемого атрибута через vCenter
- Как создать настраиваемый атрибут через PowerCLI
- Как посмотреть настраиваемый атрибут через PowerCLI
- Как переименовать настраиваемый атрибут через PowerCLI
- Как удалить настраиваемый атрибут через PowerCLI
- Примеры использования
- Экспорт и импорт настраиваемых атрибутов
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами разбирали ошибку обнаружения оборудования в Windows Server 2016, звучала она вот так "Запуск этого устройства невозможен. (код 10)". Идем далее и сегодня я покажу вам, как вы можете оптимизировать свою инфраструктуру ESXI, встроенными методами vCenter, речь пойдет о настраиваемых полях (Custom Attributes). Мы разберем их удобство создания, фильтрацию по ним, я приведу примеры использования из своей практики.
Что такое Custom Attributes ?
Настраиваемые атрибуты (Custom Attributes) - Это своего рода метка, которую вы можете назначать таким объектам как: виртуальная машина, хост ESXI, папка или шаблон. С помощью этой метки вы можете добавлять дополнительную информацию на данные объекты и фильтровать ее по своему усмотрению. Настраиваемые атрибуты очень похожи на теги, но концептуально отличаются тем, что они хранятся в базе данных vCenter.
Настраиваемые атрибуты (Custom Attributes) можно назвать метаданными объекта. Благодаря им вы легко можете группировать ваши объекты по нужным категориям. Приведу пример из практики, мне периодически необходимо получать информацию какие проекты есть в vCenter, сколько и каких ресурсов они используют. Так как инфраструктура в основном у многих людей теперь виртуальная, то и точкой получения информации правильнее брать центр управления гипервизорами, в случае с VMware это vCenter. Благодаря заранее созданным "Custom Attributes" и заполнением информации, все эти данные можно получать буквально за пару минут.
Как создать настраиваемый атрибут через веб-версию vCenter
Первый метод создания "Custom Attributes", это графический интерфейс самого vCenter. Зайдите в веб интерфейс в раздел "Menu - tags & Custom Attributes"
Выбираем вкладку "Custom Attributes". У меня уже есть несколько созданных ранее. Чтобы добавить новый настраиваемый атрибут, просто нажмите кнопку "New".
У вас откроется окно "New Custom Attributes", тут вам необходимо задать имя атрибута и его тип. Под типом подразумевается уровень применения, например Global применяется ко всем объектам инвентори, можно присоединять для папок, свитчей или виртуальной машины.
В списке у вас появится новый настраиваемый атрибут.
После создания атрибутов установите значение атрибута на каждой виртуальной машине или управляемом хосте, если это необходимо. Это значение хранится на vCenter Server, а не на виртуальной машине или управляемом хосте. Используйте новый атрибут для фильтрации информации о ваших виртуальных машинах и управляемых хостах. Если вам больше не нужен настраиваемый атрибут, удалите его. Настраиваемый атрибут всегда является строкой.
Заполнение настраиваемого атрибута через vCenter
Выберите объект для которого вы создавали настраиваемые атрибуты, в моем примере это виртуальная машина Seh-test. В разделе "Custom Attributes" вы увидите все доступные настраиваемые атрибуты, нажмите кнопку "Edit" для редактирования.
Заполняем нужные поля, обратите внимание, что тут же вы можете создать настраиваемый атрибут, который можно применить к текущему типу объектов или же глобально.
Как создать настраиваемый атрибут через PowerCLI
теперь давайте сделаем все тоже самое, но уже с помощью оболочки PowerCLI. Как установить данный модуль смотрите по ссылке слева. Далее запускам его и подключаемся к вашему vCenter серверу:
Далее для создания нового настраиваемого атрибута есть командлет "New-CustomAttribute". Я для тестирования создам атрибут с именем "Year" год и в качестве типа объекта, к которому он будет прикреплен я укажу виртуальную машину. Команда будет выглядеть вот так:
Кстати номер 403 в поле Key, это ID атрибута.
- TargetType - Задает тип объектов, к которым применяется новый настраиваемый атрибут. Допустимые значения: VirtualMachine, ResourcePool, Folder, VMHost, Cluster, Datacenter и $null. Если значение равно $null, настраиваемый атрибут является глобальным и применяется ко всем целевым типам.
Удостоверимся, что настраиваемый атрибут появился.
Как посмотреть настраиваемый атрибут через PowerCLI
Давайте теперь научимся просматривать существующие настраиваемые атрибуты. Для этого мы воспользуемся командлетом Get-CustomAttribute. Я буду выводить список для объекта VirtualMachine.
- TargetType - Задает целевой тип для фильтрации настраиваемых атрибутов по типу объектов, к которым они могут быть применены. Допустимые значения: VirtualMachine, ResourcePool, Folder, VMHost, Cluster, Datacenter и $null. Если значение равно $null, настраиваемый атрибут является глобальным и применяется ко всем целевым типам.
- Global - Указывает, что извлекаются только глобальные настраиваемые атрибуты. Глобальный настраиваемый атрибут может применяться как к хостам, так и к виртуальным машинам.
- ID - Задает идентификаторы настраиваемых атрибутов, которые вы хотите получить. Примечание. Если для параметра Id указан список значений, возвращаемые объекты будут иметь идентификатор, который точно соответствует одному из строковых значений в этом списке.
Если просто используете Get-CustomAttribute без ключей, то получите общий список всех настраиваемых атрибутов.
Можно использовать для нескольких объектов, например:
Можно поискать Custom Attributes по части имени, например:
Как переименовать настраиваемый атрибут через PowerCLI
Для того, чтобы поменять имя у настраиваемого атрибута, вам необходимо воспользоваться командлетом Set-CustomAttribute. Из ключей:
- Name - Задает новое имя для настраиваемого атрибута
- CustomAttribute - Задает настраиваемый атрибут, который нужно переименовать
- Confirm - Если значение равно $true, это означает, что командлет запрашивает подтверждение перед запуском. Если значение равно $false, командлет запускается без запроса подтверждения пользователя.
Я хочу переименовать "Year" в "Date"
Или двойная конструкция, где я переименую "Date" в "Time".
Как удалить настраиваемый атрибут через PowerCLI
Теперь давайте удалим Custom Attribute с именем "Time", для этого используем командлет Remove-CustomAttribute.
Примеры использования
Предположим, что вы хотите получить все значения настраиваемых полей у виртуальной машины или ряда машин, для этого можно воспользоваться вот такой конструкцией:
Тут я получаю список виртуальных машин, где в имени используется SEH.
Заменим значение заказчика:
Экспорт и импорт настраиваемых атрибутов
Как я и писал выше все Custom Attribute являются частью БД vCenter, если вы хотите после перемещения виртуальных машин в новый vCenter Server захватить с собой настраиваемые атрибуты, то вам необходимо их экспортировать, а затем импортировать.
- Экспорт настраиваемых полей. Для экспорта атрибутов я использовал приведенный ниже скрипт. Вам нужно будет добавить столько пар ключ-значение, сколько у вас есть настраиваемых атрибутов.
Add-PSSnapin VMware.VimAutomation.Core
Connect-VIServer -User 'Имя пользователя' -Password 'Пароль' -Server 'Адрес сервера'
$vmlist = get-vm
$Report =@()
foreach ($vm in $vmlist) {
$row = "" | Select Name, Notes, Key, Value, Key1, Value1
$row.name = $vm.Name
$row.Notes = $vm | select -ExpandProperty Notes
$customattribs = $vm | select -ExpandProperty CustomFields
$row.Key = $customattribs[0].Key
$row.Value = $customattribs[0].value
$row.Key1 = $customattribs[1].Key
$row.Value1 = $customattribs[1].value
$Report += $row
}
$report | Export-Csv "C:\temp\CustomAttribute.csv" -NoTypeInformation -encoding unicode
- Импортирование настраиваемых полей
$NewAttribs = Import-Csv "C:\temp\vms-with-notes-and-attributes.csv"
foreach ($line in $NewAttribs) {
set-vm -vm $line.Name -Description $line.Notes -Confirm:$false
Set-CustomField -Entity (get-vm $line.Name) -Name $line.Key -Value $line.Value -confirm:$false
Set-CustomField -Entity (get-vm $line.Name) -Name $line.Key1 -Value $line.Value1 -confirm:$false
}