Питон овиртсдк с rhev 4.1
Я пытаюсь использовать API RHEV 4.1 для получения статуса хоста моего гипервизора с использованием 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.
В версии 4 API этот тип Status был удален и заменен типами enum. (мой код выше работает для rhev 3.6 и дает правильный статус хоста)
Как я могу получить статус хоста? я обнаружил, что тип host.status является классом, а затем распечатал все связанные методы класса, используя dir(theobject), и нашел следующие полезные методы. состояние get_state, но оно ничего не дает. но мой статус API выше
в соответствии с руководством API.
статус является типом HostStatus ENUM
HOSTSTATUS ENUM содержит имя, называемое "вверх"
не уверен, как получить host.status из API. API возвращает это
<host>
<status>up</status>
</host>
1 ответ
Вы смешиваете здесь два 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>
Так что вы должны быть в состоянии получить state
Python 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>
Но это не актуально, так как вы все еще используете Python SDK v3, который использует APIv3.