目录

简介

使用的组件

背景信息

对CIMC执行XML API调用

第 1 步

第 2 步

第 3 步

第 4 步

故障排除

简介

本文档介绍如何对思科集成管理控制器(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的变量标识。

脚本还检查文件login.xml(由XML_PAYLOAD_FILE变量定义)是否存在并且是常规文件。

如果由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响应包含名为doutCookieve的键，其值为检索到的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替换cookie密钥值。

将<cookie_value>替换为从较早的login.xmlresponse获取的outCookievalue。更新的请求如下所示：

请确保用身份验证过程中检索到的实际Cookie值替换<cookie_value>。

第 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错误响应块：