Ansible+Redfish+Idrac管理DELL服務器

背景描述

Drac(Dell Remote Access Controlle)戴爾遠程訪問控制-是訪問DELL服務器管理的一款很好的管理系統。基於WEB界面訪問,可以友好的查看服務器的硬件資源,同時利用虛擬控制檯可以模擬終端訪問操作系統。但是如何批量的管理就成了一個問題。爲此DELL開發了基於Redfish APIs的外帶OOB的ansible模塊。利用redfish通過OOB-controller就可以不用通過web方式獲取到服務器相關信息,甚至做一些修改操作,同時利用ansible的特性完成批量管理

運行實現

運行實現的過程如下圖

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以上

固件版本可以通過iDRAC概述中查看,如下是不符合的
Ansible+Redfish+Idrac管理DELL服務器

要想實現這個功能就要升級固件,
方法是首先在DELL官方下載固件,然後IDrac設置-更新和回滾-更新上傳文件路徑,上載即可
Ansible+Redfish+Idrac管理DELL服務器
升級期間有一個等待的過程,根據經驗不會中斷系統的運行。關於升級固件,可能會在另一篇文章中描述

這個就是升級後達到條件的服務器了
Ansible+Redfish+Idrac管理DELL服務器

有人可能會有疑問,爲什麼要升級固件?其實升級固件除了修復安全漏洞外,本次的目標就是增加redfish服務模塊

你可以在網絡-服務中看到增加了Redfish模塊,如下截圖
Ansible+Redfish+Idrac管理DELL服務器
同時要保證開啓了該模塊
Ansible+Redfish+Idrac管理DELL服務器

Redfish(紅魚)簡介 是一種標準API,旨在爲融合的混合IT和軟件定義數據中心(SDDC)提供簡單安全的管理。Redfish兼具人類可讀性和機器能力,利用通用的Internet和Web服務標準將信息直接暴露給現代工具鏈。

好吧,看上貌似蠻概念化的,你可以理解爲就是一個API就行。

控制端準備

  1. 在一臺系統上安裝ansible(過程略)
  2. 該系統可以訪問idrac

    只要網絡層可以通信即可,不是真要用瀏覽器去登錄idrac

  3. 安裝 redfish-ansible-module
    1、git clone https://github.com/dell/redfish-ansible-module.git
    2、cd redfish-ansible-module/
    3、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服務器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章