python ovirtsdk with rhev 4.1



我正在尝试使用 RHEV 4.1 API 使用 python 获取虚拟机管理程序的主机状态。RHEV 3.6 正在使用我的脚本。但是如果我使用以下。

host = api.hosts.get(host_name)
host_state = host.status      //RHEV 3.6 this was host.state.status
print(host_state)

它给出以下内容

<ovirtsdk.xml.params.Status object at 0x3ce0f10>
dev-dbe101t                <ovirtsdk.xml.params.Status object at    0x3ce0f10>
dev-be101t-data1          None                   master
dev-be101t-data2          None

我可以正确获取主机名和数据中心名称。 甚至此 Status 对象也不是可迭代的。根据 rhvm 3.6 和 rhev 4.1 的 api 区别。

在 API 版本 4 中,此状态类型已被删除并替换为枚举类型。 (我上面的代码适用于 RHE 3.6,它给出了主机的正确状态)

如何检索主机状态? 我发现 host.status 类型是一个类,然后我使用 dir(theobject) 打印出所有相关的类方法,并找到以下有用的方法。 状态,get_state, 但它没有给出任何。但是我的 API 状态已启动

根据 API 指南。

状态为主机状态枚举的类型

HOSTSTATUS 枚举包含一个名为"up"的名称

不知道如何从 API 获取主机状态。 API 返回此

<host>
<status>up</status>
</host>

你在这里混合了两个API。正如您正确编写的那样,oVirt 有两个版本的 API v3 和 v4。Python SDK v3 默认与 v3 API 配合使用,因此您应该将其与 oVirt 4.1/RHV 4.1 一起使用,与以前相同。

如果使用 API v3 列出主机状态:

GET https://fqdn/ovirt-engine/api/v3/hosts

您将获得:

<status><state>up</state></status>

因此,您应该能够获取statePython SDK v3 作为:

host = api.hosts.get(host_name) host_state = host.status.state print(host_state)

在 APIv4 中,您将获得:

GET https://ondra.local:8443/ovirt-engine/api/v4/hosts

<status>up</status>

但这无关紧要,因为你仍然使用使用 APIv3 的 Python SDK v3。

相关内容

  • 没有找到相关文章

最新更新