1. 程式人生 > >ansible+redfish+idrac管理DELL服務器

ansible+redfish+idrac管理DELL服務器

reat c51 執行 模擬 Inventor 批量 size int 記得

背景描述
  Drac(Dell Remote Access Controlle)戴爾遠程遠程訪問控制是訪問DELL服務器管理的一款很好的平臺。基於WEB界面訪問,可以友好的查看服務器的硬件資源,同時利用虛擬控制臺可以模擬終端訪問操作系統。但是如何批量的管理就成了一個問題。為此DELL開發了基於Redfish APIs的外帶OOB的ansible模塊。

於是利用redfish通過OOB-controller就可以不用通過web方式獲取到服務器相關信息,甚至做一些修改操作,同時利用ansible的特性完成批量管理

運行實現

運行實現的過程如下圖

技術分享圖片

完成的功能

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

可以在DRAC概述中查看,如下是不符合的
技術分享圖片

要想實現這個功能就是要升級固件,
方法是首先在DELL官方下載固件,然後IDrac設置-更新和回滾-更新上傳文件路徑,上載即可

技術分享圖片
升級期間有一個等待的過程,根據經驗不會中斷系統的運行。關於升級固件,可能會在另一篇文章中描述

這個就是升級後達到條件的服務器了
技術分享圖片

有人可能會有疑問,為什麽要升級固件?其實升級固件除了修改安全漏洞外,本次的目標就是增加redfish

你可以在網絡-服務中看到增加了Redfish模塊,如下截圖
技術分享圖片
同時要保證開啟了該模塊
技術分享圖片

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

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

控制端準備

  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劇本了
技術分享圖片

我們先執行一個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
技術分享圖片

大致內容如下:
技術分享圖片

我們甚至可以通過jq工具過濾出想要的字段,簡單例子如下
技術分享圖片

ansible+redfish+idrac管理DELL服務器