ansible+redfish+idrac管理DELL服務器
Drac(Dell Remote Access Controlle)戴爾遠程遠程訪問控制是訪問DELL服務器管理的一款很好的平臺。基於WEB界面訪問,可以友好的查看服務器的硬件資源,同時利用虛擬控制臺可以模擬終端訪問操作系統。但是如何批量的管理就成了一個問題。為此DELL開發了基於Redfish APIs的外帶OOB的ansible模塊。
於是利用redfish通過OOB-controller就可以不用通過web方式獲取到服務器相關信息,甚至做一些修改操作,同時利用ansible的特性完成批量管理
運行實現
運行實現的過程如下圖
完成的功能
- Inventory: Manages system inventory
- Update: Manages system firmware
- System: Manages power and BIOS settings
- Chassis: Manages the system chassis
- 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服務標準將信息直接暴露給現代工具鏈。
好吧,看上貌似蠻概念化的,你可以理解為就是一個借口就行。
控制端準備
- 在一臺系統上安裝ansible(過程略)
- 該系統可以訪問idrac
只要網絡層可以通信即可,不是真要用瀏覽器去登錄idrac
- 安裝 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服務器