我有超过200台电脑可以提供IPMI服务。 这些服务器是由几家不同的公司(SuperMicro,Dell等)生产的,大约有5个不同的供应商有6-7个BMC模型,每个模型都有它自己的特性。
到目前为止,我们一直在使用DHCP和手动configuration每个BMC来configurationBMC。 手动configuration可以使用可启动CD-ROM,BIOS(如果支持)configuration,从主机操作系统使用ipmitool , freeipmi等实用程序完成,或者使用ipmitool远程执行,如果我们可以确定设备。
不过,这种手动configuration相当繁琐。 在某些情况下,我们希望在所有BMC上全局更改设置,这要求pipe理员对几十个盒子运行一个命令。 由于BMC由不同的供应商提供,每个BMC型号可能都有自己的特性,所以相同的命令并不总是适用于所有的BMC。
是否有任何工具可以让我在几十个盒子上批量configurationBMC? 假设我想要查询几十个不同的BMC上的参数,或者更改密码,禁用HTTP访问WebUI或者禁用臭名昭着的密码零安全漏洞。
任何可以让我更新BMC固件的实用程序奖励积分,这是缓解多个安全漏洞所必需的
我可能会使用Ansible 。 这是一个非常简单的configurationpipe理/编排引擎,开始比Puppet简单得多(Puppet曾经是我的首选,但是现在并不总是发现Ansible)。
Ansible在这里的好处是可以直接通过SSH进行通信,因此您只需使用现有的SSH凭证和工作stream即可开始使用。
如果您当前正在使用ipmitoolconfiguration您的BMC,则可以执行如下操作:
定义一个主机文件 – 这告诉Ansible哪些主机在bmc组(在这种情况下),以及在哪些东西上运行。
[bmc] 192.168.1.100 192.168.1.101 192.168.1.102
等等…你也可以使用该文件中的主机名,只要它们是可以parsing的。
然后创build一个“playbook”,它是在主机组中的每个主机上运行的一组命令。 你想要有这种自上而下的目录布局:
ansible/ playbooks/ bmc.yml roles/ bmcconfig/ files/ handlers/ main.yml tasks/ main.yml templates/ group_vars/ all
一个剧本有angular色 ,这是一小部分的configuration,你可以分解和重用。
所以我会创build一个名为bmc.yml
的文件(所有的Ansibleconfiguration都在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
当您运行剧本时,使用ansible-playbook -i hosts bmc.yml
,每个angular色的tasks/main.yml
列出的命令tasks/main.yml
从上到下的顺序在主机中bmc
主机组中的每个主机上执行
group_vars/all
是一个有趣的文件,它允许你定义可以在你的剧本中使用的variables和值的键值对。
所以你可以定义类似的东西
ipmitool_password: $512315Adb
在你的group_vars/all
,结果你可以得到如下的东西:
shell: ipmitool -your -options -go -here --password=${ipmitool_password}
在剧本里。
你可以find关于如何使用“模块”的更多信息 – Ansible的组件,允许你在Ansible文档页面上做东西,如何编写你自己的:D等等。
我已经写了一个小型的python工具来运行我们1000台机器上的命令(以及它们的bmc's,drac's,ilo's和imm)
我所做的是编写一个名为vsc-manage的python框架,我可以运行发送到服务器或bmc的命令,然后configuration什么types的机器需要什么命令。
我有几个类组合了这些命令的组合,
因此,对于具有imm的机器,它将ssh到imm,并power off
(以期望脚本的方式)
对于我们的imb刀片式机箱 ,它将在机箱上运行
power -%(command)s -T system:blade[%(blade)s]
对于一些dell dracs,它会在os(主节点)上运行,
idracadm -r %(hostname)s -u root -p '%(password)s' serveraction %(command)s
对于我们最新的hp系统来说, ipmi (我现在看到的越来越多)将会在master上运行:
ipmitool -I lanplus -H %(hostname)s -U %(user)s -P '%(password)s' chassis power %(command)s
或更新的戴尔系统需要ipmitool -I open
,你可能需要玩一点协议。
对于没有包含在ipmi标准中的设置,我已经从DMTF SMASH CLP中实现了一些东西,例如转动定位器导致:
start /system1/led1
所有这一切都可以在我们的笔记本电脑上运行,它将连接到正确的主节点,为右节点运行正确的命令,并返回输出,并附带一个错误列表(如果有的话)(基于输出在stderr和/或exitcode上)
这已经被certificate是非常方便的,现在增加对新类硬件的支持是相对容易的(由于大多数供应商现在完全支持ipmi和DMTFSMASHCLP)
这不适合于初始configuration(它需要bmc有一个独特的ip和正确的网关,但这是我们的供应商在交付时需要提供的),但几乎可以做任何事情(也可以在主机上运行任意命令系统,并在重新启动节点时在icinga / nagios中自动计划停机时间,和/或立刻在icinga / nagios中确认1000个主机和服务)
更新bmc固件并添加对交换机的支持是计划中的突出问题。
UPDATE
由于至less有一些人似乎感兴趣,我今天给了它最后的波兰,并通过https://github.com/hpcugent/vsc-manage
虽然这是非常针对我们自己的工作stream程(quattor和/或pbs),我希望它至less可以是有趣的。
我很惊讶没有人提到MAAS( http://maas.io/ ),它正是你正在寻找的。 它可以自动configuration和pipe理BMC,并且还可以将任何操作系统部署到已经join系统的节点上。 它有一个Web UI和一个RESTful API,可以与任何自动化系统集成。
当一台机器首次启动PXE时,MAAS将使用带内IPMI为您自动设置凭证。 从那时起,您可以轻松地远程启动和closures一台机器。
有关更多详细信息,请查看MAAS BMC Power Types文档 ,其中介绍了如何为MAAS中的任何节点手动configurationBMC。