У меня более 200 компьютеров, которые могут предоставить IPMI Сервисы. Серверы производятся несколькими разными компаниями (SuperMicro, Dell и т. Д.), И существует 6-7 моделей BMC примерно от 5 разных производителей, и каждая модель имеет свои особенности.
До сих пор мы настраивали BMC, используя комбинацию DHCP и вручную настраивая каждый BMC. Ручная настройка может быть выполнена с помощью загрузочного компакт-диска, настройка из BIOS (если поддерживается), из операционной системы хоста с помощью утилит, например ipmitool, Freeipmiи т. д. или удаленно с помощью ipmitool, если мы можем определить сетевой адрес устройства.
Однако эта ручная настройка довольно утомительна. В некоторых случаях мы хотим изменить настройку глобально на всех BMC, что требует, чтобы администратор запустил команду для десятков ящиков. Поскольку BMC предоставляются разными поставщиками, и каждая модель BMC может иметь свои особенности, одна и та же команда не всегда работает на всех BMC.
Есть ли какие-нибудь утилиты, позволяющие массово настраивать BMC на десятках боксов? Скажем, я хочу запросить параметр на десятках различных BMC или изменить пароль, отключить доступ HTTP к веб-интерфейсу или отключить позорный нулевой шифр дыра в безопасности.
Бонусные баллы за любую утилиту, которая позволит мне обновить прошивку BMC, что необходимо для смягчения несколько уязвимостей безопасности
Я бы, наверное, использовал Ansible. Это очень простой механизм управления конфигурацией / оркестровки, с которым гораздо проще начать работу, чем с Puppet (раньше я выбирал Puppet, но не всегда, когда я открыл для себя Ansible).
Преимущество Ansible в том, что он обменивается данными напрямую через SSH, поэтому вы сможете начать работу, используя только свои существующие учетные данные и рабочий процесс SSH.
Если вы в настоящее время настраиваете BMC с помощью ipmitool, вы можете сделать что-то вроде:
Определите файл Hosts - он сообщает Ansible, какие хосты находятся в bmc group (в данном случае), и на которой запускать материал.
[bmc]
192.168.1.100
192.168.1.101
192.168.1.102
И так далее ... Вы также можете использовать имена хостов в этом файле, если они разрешимы.
Затем создайте «playbook», который представляет собой набор команд для запуска на каждом хосте в группе хостов. Вы хотите иметь такую компоновку каталогов сверху вниз:
ansible/
playbooks/
bmc.yml
roles/
bmcconfig/
files/
handlers/
main.yml
tasks/
main.yml
templates/
group_vars/
all
В пьесе есть Роли, которые представляют собой небольшие разделы конфигурации, которые можно разбить и использовать повторно.
Итак, я бы создал файл с именем bmc.yml
(Вся конфигурация Ansible находится в файлах YAML)
---
- name: Configure BMC on the hosts
hosts: bmc
user: root
roles:
- bmcconfig
Тогда внутри roles/bmcconfig/tasks/main.yml
вы можете начать перечисление команд, которые должны выполняться на каждом хосте для связи с ipmi.
---
- name: Install ipmitool
apt: pkg=ipmitool state=installed
- name: Run ipmitool config
shell: ipmitool -your -options -go -here
Когда вы запускаете playbook, с ansible-playbook -i hosts bmc.yml
команды, перечисленные в tasks/main.yml
для каждой роли будет выполняться в порядке сверху вниз на каждом хосте, найденном в bmc
группа хостов в hosts
group_vars/all
- интересный файл, он позволяет вам определять пары «ключ-значение» переменных и значений, которые можно использовать в ваших плейбуках.
чтобы вы могли определить что-то вроде
ipmitool_password: $512315Adb
в твоем group_vars/all
и в результате вы получите что-то вроде:
shell: ipmitool -your -options -go -here --password=${ipmitool_password}
в сборнике пьес.
Вы можете найти больше информации о том, как использовать «модули» - компоненты Ansible, которые позволяют вам делать разные вещи, как писать свои собственные: D и т. Д. На странице Страницы документации Ansible.
Я написал небольшой инструмент Python для запуска команд на наших 1000 машинах (и их bmc, drac, ilo и imm)
Я написал Python-фреймворк под названием vsc-manage где я могу запускать команды, которые отправляются либо на сервер, либо на bmc, а затем настраивать, какой тип машины нуждается в какой команде.
У меня есть несколько классов, которые сочетают в себе сочетание этих команд,
Так что для машин с имм он отправит ssh в imm и запустит power off
(в виде сценария ожидания)
За наших imb blade шассиэто будет запускать это на шасси
power -%(command)s -T system:blade[%(blade)s]
Для некоторых dell dracs он запустит это в ОС (главного узла)
idracadm -r %(hostname)s -u root -p '%(password)s' serveraction %(command)s
Для наших новых систем HP, которые ipmi (и в наши дни я вижу все больше и больше) он запустит это на мастере:
ipmitool -I lanplus -H %(hostname)s -U %(user)s -P '%(password)s' chassis power %(command)s
или более новые системы dell ipmitool -I open
, возможно, вам придется немного поиграть с протоколом.
Для настроек, не включенных в стандарт ipmi, я реализовал некоторые вещи из DMTF SMASH CLP, например включение светодиода локатора:
start /system1/led1
Все это в инструменте командной строки, который можно запустить с наших ноутбуков, который будет подключаться к правильному главному узлу, запускать правильную команду для правильного узла и возвращать выходные данные с дополнительным списком ошибок, если таковые имеются (на основе вывод на stderr и / или код выхода)
Это оказалось очень удобным, и добавить поддержку нового класса оборудования теперь относительно просто (благодаря тому факту, что большинство поставщиков теперь полностью поддерживают ipmi и DMTFSMASHCLP)
Это не подходит для начальной настройки (требуется, чтобы bmc имел уникальный IP-адрес и правильный шлюз, но это то, что наши поставщики должны предоставить нам при доставке), но может делать почти все остальное (также запускать произвольные команды на хосте, работающем системы, и автоматически планировать простои в icinga / nagios когда вы перезагружаете узел и / или подтверждаете сразу 1000 хостов и сервисов в icinga / nagios)
Обновление прошивки bmc и добавление поддержки для наших коммутаторов - это запланированные нерешенные проблемы.
ОБНОВИТЬ
Поскольку, по крайней мере, некоторые люди казались заинтересованными, я сегодня отполировал его в последний раз и открыл исходный код на https://github.com/hpcugent/vsc-manage
Хотя это очень нацелено на наш собственный рабочий процесс (quattor и / или pbs), я надеюсь, что по крайней мере это может быть интересно.
Я удивлен, что никто не упомянул MAAS (http://maas.io/), который делает именно то, что вы ищете. Он может автоматически настраивать и управлять BMC, а также развертывать любую ОС на узлах, которые вы зачислили в систему. Он имеет веб-интерфейс и RESTful API и предназначен для интеграции с любой системой автоматизации.
Когда машина PXE загружается в первый раз, MAAS использует внутриполосный IPMI для автоматической настройки учетных данных. С этого момента вы можете легко удаленно загружать и выключать машину.
Для получения дополнительной информации проверьте документация MAAS BMC Power Types в котором показано, как вручную настроить BMC для любого узла, включенного в MAAS.