簡介
本檔案介紹如何對思科整合式管理控制器(CIMC)執行手動XML API呼叫。
採用元件
- Linux電腦(任何發行版)。
- Linux電腦與Cisco CIMC之間的網路連線(成功的ping測試足以滿足需要)。
附註:本指南中使用的檔名(main.sh、login.xml、get_summary.xml)是任意的。您可以自由使用自己的命名約定,只要在整個過程中正確引用它們。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
在本演示中,使用名為「main.sh」的Bash指令碼對伺服器執行API呼叫。
請注意,替代方法(例如CURL(直接從CLI)或Python)也可以實現相同的結果。
對CIMC執行XML API呼叫
CIMC XML API要求使用「aaaLogin」API呼叫的初始驗證步驟。在此過程中,將檢索會話cookie,然後使用它來驗證所有後續API呼叫。
步驟 1
首先在遠端Linux電腦中建立名為main.sh的檔案。此檔案包含用於傳送API呼叫的bash指令碼。
main.sh指令碼在本練習中多次執行:在隨後的呼叫中,先用於身份驗證,然後用於從CIMC檢索資訊。
以下是main.sh檔案的內容:
#!/bin/bash
# CONFIGURATION - Edit these variables
CIMC_IP="X.X.X.X" # <<<<<<<< Customer CIMC IP address
USERNAME="admin"
PASSWORD="xxxxxxxx" # <<<<<<< CIMC Password in plaintext
XML_PAYLOAD_FILE="login.xml" # <<<<<<< Referencing the login.xml file for authentication and cookie retrieval
CIMC_URL="https://${CIMC_IP}/nuova" # <<<<<<< Call is made to this URL
# Check if payload file exists
if [ ! -f "$XML_PAYLOAD_FILE" ]; then
echo "Error: XML payload file '$XML_PAYLOAD_FILE' not found."
exit 1
fi
# Send XML request using curl
curl -k -s -u "${USERNAME}:${PASSWORD}" -H "Content-Type: text/xml" -d @"${XML_PAYLOAD_FILE}" "${CIMC_URL}" | xmllint --format -
bash指令碼定義CIMC登入引數,還執行XML API呼叫,該呼叫在另一個名為login.xml的檔案中指定,該檔案由名為XML_PAYLOAD_FILE的變數標識。
指令碼還檢查由變數XML_PAYLOAD_FILE定義的login.xml檔案是否存在且是常規檔案。
如果由XML_PAYLOAD_FILE定義的檔案不存在,指令碼將列印錯誤並退出。
在CLI中運行以下命令,儲存該檔案並使其可執行:
$ sudo chmod +x main.sh
步驟 2
接下來,在與main.sh檔案相同的linux目錄中建立calledlogin.xml檔案。
此登入檔案包含發送到CIMC以檢索會話cookie的actualaaaLoginXML API呼叫。檢索到的cookie用於後續的API呼叫:
請記得用適當的憑證替換CIMC使用者名稱和密碼。
在CLI中執行main.sh指令碼以檢索cookie:
$ sudo ./main.sh
如果API呼叫成功,則返回的XML響應包含名為LedoutCookiei的鍵,其值為檢索的cookie,如下所示:

從輸出中,找到outCookie值。
儲存此cookie值。
步驟 3
在main.sh檔案所在的同一目錄中建立一個新檔案。將該檔案命名為get_summary.xml。
有關可用於思科IMC的API請求的綜合清單,請參閱思科UCS機架式伺服器CIMC XML API程式設計師指南。
新的get_summary.xml檔案用於檢索Server Summary Information and Host Power State。使用參考文檔中的XML代碼塊,但將cookie key值替換為較早的檢索cookie。
將<cookie_value>替換為從較早的login.xmlresponse獲取的theoutCookievalue。更新的請求如下所示:

請務必將<cookie_value>替換為驗證過程中檢索到的實際cookie值。
步驟 4
將cookie新增到新的get_summary.xml檔案後,更新main.sh指令碼,以便將"get_summary.xml"作為此請求的XML_PAYLOAD_FILE變數的值。
#!/bin/bash
# CONFIGURATION - Edit these variables
CIMC_IP="X.X.X.X"
USERNAME="admin"
PASSWORD="xxxxxxxx"
XML_PAYLOAD_FILE="get_summary.xml" # <<<<<<< Referencing the get_summary.xml file for subsequent API calls.
CIMC_URL="https://${CIMC_IP}/nuova"
# Check if payload file exists
if [ ! -f "$XML_PAYLOAD_FILE" ]; then
echo "Error: XML payload file '$XML_PAYLOAD_FILE' not found."
exit 1
fi
# Send XML request using curl
curl -k -s -u "${USERNAME}:${PASSWORD}" -H "Content-Type: text/xml" -d @"${XML_PAYLOAD_FILE}" "${CIMC_URL}" | xmllint --format -
再次運行main.sh指令碼以執行更新的API請求。
$ sudo ./main.sh
然後,您會收到一個XML格式的API響應,該響應從CIMC返回請求的對象。

疑難排解
必須注意的是,aaaLogin XML API呼叫返回會話cookie,outRefreshPeriod約為600秒。這意味著,如果未刷新,cookie將在十(10)分鐘後過期,並且需要新cookie才能繼續執行API請求。
如果您嘗試使用過期cookie(600秒後),將返回552「Authorization required」 XML錯誤響應塊:
