VEBA и Python

Уже пару лет Уильям Лам развивает проект под названием vCenter Event Broker Appliance (VEBA), позволяющий выполнять скрипт при наступлении какого-либо события у «Event Provider». В качестве Event Provider может выступать как vCenter, так и другие системы. В текущей версии 0.7.1 VEBA умеет выступать даже в качестве Webhook-системы для других систем. В качестве языков поддерживаются Python, Go и PowerShell.

Развертывание апплайнса выполняется стандартно. Из обязательных настроек тут только указание адреса vCenter (если вам интересен он), логин и пароль на чтение (для считывания событий). Опционально можно указать учетную запись для регистрации веб-плагина управления к VEBA, но у меня это не взлетело 🙂

Читать далее «VEBA и Python»

Python и ESXcli

Если вы захотите собирать информацию о версии драйвера и прошивки сетевого интерфейса ESXi, то можете воспользоваться пакетом от VMware, который нужно поставить на Linux. Есть отдельные версии для 7.0 и 6.7.

После этого Вам потребуется:

  1. подключить к Python библиотеку Subprocess;
  2. если vCenter использует недоверенный сертификат, то вам потребуется игнорировать эту ошибку. Один из вариантов — указать в команде отпечаток (thumbprint) сертификата vCenter, к которому подключены сервера ESXi (оптимально собирать информацию через него). Можно выполнить «esxcli -s <vcenter> -u <vcenter_login> -p <vcenter_password> -h <esxi>», чтобы получить отпечаток.

Для вывода списка сетевых адаптеров с используемым драйвером и красивым названием воспользуемся командой esxcli -s <vcenter> -u <vcenter_login> -p <vcenter_password> -h <esxi> --thumbprint <vcenter_thumbprint> network nic list
Для вывода подробной информации по адаптеру, из которой можно взять версию драйвера и прошивки воспользуемся похожей командой ESXCLI network nic get -n vmnic7, например.

Вот пример скрипта, который делает «что-то похожее»:

Читать далее «Python и ESXcli»

Как вкатиться в ИТ и стать Python-кодером

Как делать не стоит 🙂

    1. проучиться в ВУЗе на программиста/математика 5 лет, изучив C, Pascal, Prolog, List (хотя это-то нормальный пункт);
    2. 15 лет проработать Wind0ws-администратором, карабкаясь по профессиональной лестнице от переустановки рабочих станций — до дирижирования виртуальными серверами;
    3. последние лет пять писать постепенно усложняющиеся скрипты на PowerShell;
    4. года три назад начать занятия на курсе https://dlcourse.ai и бросить их из-за сложностей в математике (Back Propagation, например) и программировании (классы в Python ну вообще не зашли);
    5. начать изучение программирования на Coursera курса по Go… И бросить его из-за чрезвычайной сложности для начинающего программиста.
    6. посмотреть вдохновляющие лекции Ивана Бибилова (еще хвалят Хирьянова, но для меня изучение языка программирования по видеолекциям — так себе затея, имхо);
    7. вписаться в бесплатное соревнование для студентов от Яндекса — Тренировку по алгоритмам (вот это было самым крутым);
    8. написать на питоне свой скрипт синхронизации хостов и виртуальных машин из vSphere в Netbox (пока через Pyvmomi).

Как лучше, — спросите вы?

  1. «Поколение Python»: курс для начинающих на Степике. Отлично то, что есть онлайн-IDE (среда разработки) с автотестами: то есть, вы не только учите язык, но и проверяете себя на практике. Альтернативно, вы можете сесть за Python Tutorial, но практики не будет.
  2. Теперь вы знаете основы языка и можете вписаться в любую более сложную движуху. Можете выбрать курс «Поколение Python»: курс для продвинутых на Степике, а можете — тренировки Яндекса по алгоритмам. Кстати, у Яндекса есть программы стажировки по разным направлениям, причем они не ограничиваются только студентами (по крайней мере, так утверждают сотрудники Яндекса 🙂 )
    Но там очень жесткий отбор — например, в школу бэкенд разработки надо было за несколько часов решить 6 задач.
  3. Как вариант, вместо дальнейшей прокачки Python вы можете пойти в Go (ссылку на Курсеру кидал выше) или в Java. Есть мнение, что это более перспективные языки с точки зрения вашей будущей з/п.
  4. Нелишним будет подтянуть хотя бы основы Git. Там есть много полезного даже для сисадминов.

Выводы

Если вы — сисадмин и поступите так, как я написал, то ваша жизнь может заиграть новыми красками. О, сколько новых слов я сказал, когда:

  • узнал, что кабели в Netbox могут соединять как два устройства, так и устройство с «circuit»;
  • цвет кабеля в Netbox можно задать неправильно и это будет ломать API-запросы к нему;
  • узнал, что хост ESXi может не содержать vmnic5, но содержать vmnic7 (vmnic0, 1, 2, 3, 6, 7).

Зато помог коллегам вычистить конфликты серийников у хостов в Netbox.

Big Memory or Project Capitola

Одним из грядущих «бутылочных» горлышек гипервизоров называют оперативную память. Это связано с несколькими причинами:

  • кризис производства полупроводников 2021;
  • в предыдущую десятилетку было построено так много заводов по производству DRAM, что их владельцы были вынуждены демпинговать в борьбе за потребителя;
  • оперативная память не успевает вслед за процессорами понижать техпроцесс, вследствие чего количество ОЗУ на сокет ограничено (например, 6 каналами и двумя DIMM-слотами на каждый в Xeon Skylake). Количество ОЗУ на ядро перестало расти в последние годы, а вскоре, возможно, начнет падать;
  • немаловажным аспектом также является и цена за гигабайт — в стоимости современного сервера ОЗУ дороже всего остального вместе взятого.

Читать далее «Big Memory or Project Capitola»

Купил монитор

Виктор давненько подбивал меня купить себе новый монитор.

На UHD я не развелся, однако купил себе QHD.

Зацените картинку БЫЛО-СТАЛО:

До красной линии — 14″ FHD 150% масштаб. После — 27″ QHD 100% масштаб.

Я считаю — оно того стоило, а вы? 🙂

Синхронизация ВМ с хостов

Мы ранее уже писали про тонкости синхронизации времени с хостом.

А сейчас речь пойдет про локальное время на хосте и опцию по синхронизации времени ВМ с хостом, появившуюся в vSphere 7.0.

Для того, чтобы узнать локальное время на сервере ESXi в часовом поясе UTC+0, можно воспользоваться следующим скриптом PowerCLI:

Get-View -ViewType HostSystem -Property Name,ConfigManager.DateTimeSystem | sort Name | select Name,@{Name="Current VMHost Time";Expression={(Get-View $_.ConfigManager.DateTimeSystem).QueryDateTime()}}
Name Current VMHost Time

---- -------------------

esxi1.domain.ru 11.06.2021 6:58:04
esxi2.domain.ru 11.06.2021 7:28:16
esxi3.domain.ru 11.06.2021 6:58:04
esxi4.domain.ru 11.06.2021 7:23:46
esxi5.domain.ru 11.06.2021 6:58:05
esxi6.domain.ru 11.06.2021 6:58:05

Если захотите побольше узнать про вложенные свойства ConfigManager.DateTimeSystem, то можно воспользоваться фильтром к Get-View и параметром -ExpandProperty (ниже будет приведен пример для виртуальной машины).

Для того, чтобы узнать, синхронизирует ли свое время виртуальная машина через VMware Tools с хостом, можно воспользоваться одним из вариантов ниже.

Для vSphere 7.0U1 и выше:

Get-View -ViewType virtualmachine | Select name,@{N='ToolsConfigInfo';E={$_.Config.Tools.syncTimeWithHostallowed }}

Для более старых версий:

Get-View -ViewType virtualmachine | Select name,@{N='ToolsConfigInfo';E={$_.Config.Tools.syncTimeWithHost }}

Отличие 7.0U1 от более старых версий в том, что свойство SyncTimeWithHost переключает разные настройки ВМ. В новой версии появился дополнительный флаг — «Synchronize time periodically», который отвечает за синхронизацию времени с хостом раз в 60 секунд (по умолчанию отключен).

Соответственно, свойство «SyncTimeWithHost» в 7.0.1 переключает не общую синхронизацию времени, а именно «периодическую» синхронизацию. В более старых версиях это свойство отвечает за общую синхронизацию времени, тогда как в 7.0.1 за общую синхронизацию стал отвечать параметр SyncTimeWithHostAllowed!

P.S. Для того, чтобы узнать больше о содержимом вложенного свойства, например, Config.Tools, можно воспользоваться следующим фильтром:

get-view -viewtype VirtualMachine -filter @{Name="vm_name"} | select -ExpandProperty config | select -ExpandProperty tools

VeeamONTour 2021

Всем привет!

Приглашаем Вас 16 июня 2021 года на онлайн-конференцию #VeeamONTour «Эффективная стратегия защиты данных» по этой ссылке.

Я и другие блогеры записали для вас видео-приглашение:

Как я доменный контроллер переносил

Передо мной стояла достаточно легкая задача по переносу адреса и имени контроллера домена на новый сервер. Её можно разбить на следующие подзадачи:

  1. проверить текущих владельцев FSMO-ролей,  при необходимости — передать их на другой сервер, остающийся в работе;
  2. проверить настройки DNS, чтобы оба сервера использовали в первую очередь рабочий DNS;
  3. проверить статусы репликации NTDS (AD) и SYSVOL;
  4. убедившись, что все работает, понизить контроллер домена, сменить имя и адрес;
  5. назначить имя и адрес новому готовому серверу;
  6. поднять на нем роль контроллера домена.

Как видите, ничего сложного, поэтому я оценил общую трудоемкость задачи в 4 часа, как обычно заложив запас под 100% на работы.

Кстати, в статье заложена пасхалочка-бонус 🙂

Давайте вместе посмотрим, что же из этого вышло…

Читать далее «Как я доменный контроллер переносил»

Статья про RAID

@kr0k0k0t прислал статью про неСХД и RAID.

Вместо эпиграфа:
«Был неправ, вспылил. Но теперь считаю своё предложение безобразной ошибкой, раскаиваюсь, прошу дать возможность загладить, искупить. Всё, ушел.» (C) «Обыкновенное чудо.»

Часто приходится быть свидетелем споров типа «а QNAP – это СХД?» «В чем разница между СХД и NAS?», «а можно ли использовать QNAP такие-то цифры для бекапов?» и т.п. Вот и здесь недавно было. Посему, в качестве деятельного раскаяния за флуд решил поделиться своим IMHO’м на эту тему. Возможно, будет для кого-то полезно. Осторожно, многабукаф. Читать далее «Статья про RAID»

Get-ADUser и Organization Unit

Возник вопрос: как экспортировать список пользователей из AD с организационным подразделением (Organization Unit или OU).

Get-ADUser user -Properties * показал, что OU присутствует в двух атрибутах:

  • Distinguishedname: CN=user,ou=ou1,ou=ou2,dc=domain,dc=ru;
  • CanonicalName: domain.ru/ou2/ou1/user

В готовом виде OU нет, хотя для целей сортировки удобнее использовать CanonicalName.

Так родился «однострочник», позволяющий вытащить OU в качестве атрибута

get-aduser -filter * -SearchBase ou=ou1,ou=ou2,dc=domain,dc=ru" -Properties cn,canonicalname | select name,userprincipalname,@{Name="OU";expression={$_.Canonicalname.substring(0,$_.canonicalname.length-$_.cn.length)}}