Ansible+Redfish+Idrac管理DELL服务器

背景描述

Drac(Dell Remote Access Controlle)戴尔远程访问控制-是访问DELL服务器管理的一款很好的管理系统。基于WEB界面访问,能够友好的查看服务器的硬件资源,同时利用虚拟控制台能够模拟终端访问操做系统。可是如何批量的管理就成了一个问题。为此DELL开发了基于Redfish APIs的外带OOB的ansible模块。利用redfish经过OOB-controller就能够不用经过web方式获取到服务器相关信息,甚至作一些修改操做,同时利用ansible的特性完成批量管理python

运行实现

运行实现的过程以下图git

Ansible+Redfish+Idrac管理DELL服务器

实现的功能

  1. Inventory: Manages system inventory
  2. Update: Manages system firmware
  3. System: Manages power and BIOS settings
  4. Chassis: Manages the system chassis
  5. Manager: Manages OOB controller settings
  6. Accounts: Manages OOB controller users

实现前的准备

DELL服务器

DELL服务器具有最小化的iDRAC 7/8/9 固件版本要在2.40.40.40以上github

固件版本能够经过iDRAC概述中查看,以下是不符合的
Ansible+Redfish+Idrac管理DELL服务器web

要想实现这个功能就要升级固件,
方法是首先在DELL官方下载固件,而后IDrac设置-更新和回滚-更新上传文件路径,上载便可
Ansible+Redfish+Idrac管理DELL服务器
升级期间有一个等待的过程,根据经验不会中断系统的运行。关于升级固件,可能会在另外一篇文章中描述json

这个就是升级后达到条件的服务器了
Ansible+Redfish+Idrac管理DELL服务器浏览器

有人可能会有疑问,为何要升级固件?其实升级固件除了修复安全漏洞外,本次的目标就是增长redfish服务模块安全

你能够在网络-服务中看到增长了Redfish模块,以下截图
Ansible+Redfish+Idrac管理DELL服务器
同时要保证开启了该模块
Ansible+Redfish+Idrac管理DELL服务器服务器

Redfish(红鱼)简介 是一种标准API,旨在为融合的混合IT和软件定义数据中心(SDDC)提供简单安全的管理。Redfish兼具人类可读性和机器能力,利用通用的Internet和Web服务标准将信息直接暴露给现代工具链。网络

好吧,看上貌似蛮概念化的,你能够理解为就是一个API就行。ide

控制端准备

  1. 在一台系统上安装ansible(过程略)
  2. 该系统能够访问idrac

    只要网络层能够通讯便可,不是真要用浏览器去登陆idrac

  3. 安装 redfish-ansible-module
    一、git clone https://github.com/dell/redfish-ansible-module.git
    二、cd redfish-ansible-module/
    三、python install.py

    准备工做完成

实际操做前的最后准备

由于play-books已是现成的,因此在ansible的hosts作一下配置,格式大体以下

[myhosts]
# hostname OOB controller IP/NAME
webserver1 baseuri=192.168.0.101
webserver2 baseuri=192.168.0.102
dbserver1 baseuri=192.168.0.103

oob controller IP 一开始我也有点迷糊,实际上就是idrac地址,idrac默认地址是192.168.0.120,根据你实际的idrac地址进行配置便可

正式操做

以上准备工做完成之后就能够正式测试使用了,进入到redfish-ansible-module/playbooks 目录后能够看到playbooks剧本了
Ansible+Redfish+Idrac管理DELL服务器

咱们先执行一个get_disk_inventory.yml 看看

ansible-playbook get_disk_inventory.yml

哇哦,我相信你会报以下错误的

TASK [Get disk inventory] *************************************************************************************************************
Thursday 05 July 2018  09:06:44 +0800 (0:00:00.322)       0:00:00.515 ********* 
fatal: [webserver1]: FAILED! => {"changed": false, "msg": "HTTP Error: 401"}

401错误是什么鬼? 还记得上面的图吧?由于使用了OOB就是idrac地址,因此ansible不是利用SSH去执行的,而是利用redfish接口,因此咱们要像登陆WEB同样加上idrac用户名和密码的参数 -e 就能够了

ansible-playbook get_disk_inventory.yml -e "user=root password=123456"

请根据本身实际状况填写用户名和密码

输出的结果大体以下

PLAY [Get disk inventory] *************************************************************************************************************

TASK [Define output file] *************************************************************************************************************
Thursday 05 July 2018  09:11:57 +0800 (0:00:00.063)       0:00:00.063 ********* 
included: /root/redfish-ansible-module/playbooks/create_output_file.yml for webserver1

TASK [Define timestamp] ***************************************************************************************************************
Thursday 05 July 2018  09:11:57 +0800 (0:00:00.025)       0:00:00.088 ********* 
ok: [webserver1]

TASK [Define file to place results] ***************************************************************************************************
Thursday 05 July 2018  09:11:57 +0800 (0:00:00.053)       0:00:00.141 ********* 
ok: [webserver1]

TASK [Create dropoff directory for host] **********************************************************************************************
Thursday 05 July 2018  09:11:57 +0800 (0:00:00.035)       0:00:00.177 ********* 
ok: [webserver1]

TASK [Get disk inventory] *************************************************************************************************************
Thursday 05 July 2018  09:11:57 +0800 (0:00:00.281)       0:00:00.458 ********* 
ok: [webserver1]

TASK [Copy results to output file] ****************************************************************************************************
Thursday 05 July 2018  09:12:05 +0800 (0:00:07.865)       0:00:08.324 ********* 
changed: [webserver1]

PLAY RECAP ****************************************************************************************************************************
webserver1                 : ok=6    changed=1    unreachable=0    failed=0   

Thursday 05 July 2018  09:12:05 +0800 (0:00:00.532)       0:00:08.857 ********* 
=============================================================================== 
Get disk inventory ------------------------------------------------------------------------------------------------------------- 7.87s
Copy results to output file ---------------------------------------------------------------------------------------------------- 0.53s
Create dropoff directory for host ---------------------------------------------------------------------------------------------- 0.28s
Define timestamp --------------------------------------------------------------------------------------------------------------- 0.05s
Define file to place results --------------------------------------------------------------------------------------------------- 0.04s
Define output file ------------------------------------------------------------------------------------------------------------- 0.03s

你的输出可能和个人有点区别,只要咱们看到任务所有是OK的,那就没问题。这时候会在<rootdir>/webserver1 生成一个json文件

Ansible+Redfish+Idrac管理DELL服务器

我截取部分输出内容,大体以下:
Ansible+Redfish+Idrac管理DELL服务器

若是只是查找部分数据,能够经过jq工具过滤出想要的字段,简单例子以下
Ansible+Redfish+Idrac管理DELL服务器

相关文章
相关标签/搜索