WSMAN — выбранный API управления для Dell iDRAC, и в настоящее время предпринимаются значительные усилия, чтобы сделать удаленное управление системами максимально комплексным и простым. Недавно я потратил некоторое время на изучение протокола WSMAN, чтобы внедрить подключаемый модуль, а после первоначального действия перечисления wsman протокол WSMAN становится довольно сложным. Нет простых документов/примеров, как вызвать действия get/put/create/delete и пользовательские действия с помощью свойств правой кнопки. Основным источником этой информации является спецификация WSMAN от компании DMTF и спецификация связывания WSMAN-CIM, слишком объемные, чтобы им следовать. Повторю, большая часть содержимого этой статьи взята из документов спецификации DMTF. Это попытка сделать эту информацию простой для ознакомления, с добавлением нескольких примеров (в Linux).
Технический документ о том, как начать работу с SFCB и openwsman уже опубликован на сайте
https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdf. Если вы еще не пользовались WSMAN/SFCB, то файл PDF будет лучшей отправной точкой, чем эта статья. Как и в приведенном выше техническом документе, в этой статье мы в первую очередь рассматриваем openwsman и SFCB CIMOM.
У нас есть сервер WSMAN, можно ли вывести список всех компонентов, управляемых API wsman? Большинство серверов WSMAN обмениваются данными с CIMOM на внутреннем сервере и предоставляют доступ к функциям управления CIMOM. То есть возможности управления сервера WSMAN зависят от поставщиков CIM, зарегистрированных в CIMOM на внутреннем сервере. В CIMOM есть внутренняя функция
EnumerateClassNames, которую можно вызвать для вывода списка всех классов, зарегистрированных в CIMOM.
Внутренняя функция CIMOM
EnumerateClassNames может быть вызвана следующим образом с помощью wsmancli.
wsman invoke -a EnumerateClassNames --hostname=test_host --port=5985 --username=abc --password=password http://schemas.openwsman.org/wbem/wscim/1/instrinsic --namespace=root/cimv2
<s:Body>
<n1:EnumerateClassNames>
<n1:name>root/cimv2:CIM_Service</n1:name>
<n1:name>root/cimv2:Syslog_RecordInLog</n1:name>
<n1:name>root/cimv2:Linux_SambaValidUsersForShare</n1:name>
<n1:name>root/cimv2:Linux_BaseBoard</n1:name>
<n1:name>root/cimv2:Linux_SambaForceUserForShare</n1:name>
<n1:name>root/cimv2:Linux_Processor</n1:name>
<n1:name>root/cimv2:CIM_RecordForLog</n1:name>
<n1:name>root/cimv2:Linux_SambaShareForService</n1:name>
<n1:name>root/cimv2:Linux_SambaServiceConfigurationForService</n1:name>
<n1:name>root/cimv2:Linux_SambaHostsForService</n1:name>
<n1:name>root/cimv2:Linux_SambaForceUserForGlobal</n1:name>
<n1:name>root/cimv2:CIM_OSProcess</n1:name>
<n1:name>root/cimv2:CIM_RunningOS</n1:name>...................
Результат будет выглядеть, как показано выше, указывая, что в пространстве имен root/cimv2 Linux_Processor является одним из зарегистрированных классов. Существует ряд классов CIM, унаследованных при регистрации новых классов в пространстве имен root/cimv2, и указанная выше команда также перечислит все эти имена классов. Как правило, можно игнорировать все классы с префиксом
CIM_. Все классы с префиксом
Linux_ являются классами, зарегистрированными поставщиками, установленными в системе Linux. При работе с iDRAC от Dell вас в основном интересуют классы с префиксом
DCIM_.
Теперь, когда у вас есть список всех имен классов, вы можете использовать внутреннюю функцию
getClass для извлечения определения класса
Linux_Processor следующим образом.
wsman invoke -a GetClass --hostname=test_host --port=5985 --username=abc --password=password http://schemas.openwsman.org/wbem/wscim/1/intrinsic/Linux_Processor --namespace=root/cimv2
После выполнения приведенной выше команды вы получите список всех свойств, локально определенных в
Linux_Processor. Это означает, что любые свойства, унаследованные от других классов
CIM_*, не включены в текущую реализацию. Как правило, из определения класса можно понять, какие методы определены в классе, какие параметры необходимо передать этим методам, какие свойства класса являются ключевыми и т. д. Однако, поскольку указанная выше команда возвращает только локальные свойства, невозможно определить ключевые свойства класса. В настоящее время это ограничение реализации в wsmancli.
Таким образом, хотя функция GetClass является хорошей отправной точкой, ее вывода недостаточно для определения свойств класса, которые могут быть использованы в качестве ключевых свойств, чтобы можно было вызвать действие get/put/create или пользовательское действие. Какие еще методики можно использовать для этого? В этом случае могут помочь EPR.
EPR (ссылка на конечную точку) — это указатель на экземпляр с двумя фрагментами информации: ResourceURI и Selector Set. ResourceURI содержит имя класса, из которого создается экземпляр, а Selector Set выводит список свойств, с помощью которых экземпляр может быть однозначно идентифицирован. EPR определенного класса можно перечислить с помощью команды, аналогичной следующей:
wsman enumerate -M epr http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor -h test_host-P 5985 -u abc -p password -O out
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration" xmlns:wsman="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">
<s:Header>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
<wsa:Action>http://schemas.xmlsoap.org/ws/2004/09/enumeration/PullResponse</wsa:Action>
<wsa:RelatesTo>uuid:ca52c9e9-cd47-1d47-8003-a52924d9bed4</wsa:RelatesTo>
<wsa:MessageID>uuid:ca622bb3-cd47-1d47-8097-a52924d9bed4</wsa:MessageID>
</s:Header>
<s:Body>
<wsen:PullResponse>
<wsen:EnumerationContext>ca4fdd21-cd47-1d47-8095-a52924d9bed4</wsen:EnumerationContext>
<wsen:Items>
<wsa:EndpointReference>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
<wsa:ReferenceParameters>
<wsman:ResourceURI>http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor</wsman:ResourceURI>
<wsman:SelectorSet>
<wsman:Selector Name="__cimnamespace">root/cimv2</wsman:Selector>
<wsman:Selector Name="SystemCreationClassName">Linux_ComputerSystem</wsman:Selector>
<wsman:Selector Name="SystemName">localhost.localdomain</wsman:Selector>
<wsman:Selector Name="CreationClassName">Linux_Processor</wsman:Selector>
<wsman:Selector Name="DeviceID">0</wsman:Selector>
</wsman:SelectorSet>
</wsa:ReferenceParameters>
</wsa:EndpointReference>
</wsen:Items>
</wsen:PullResponse>
</s:Body>
</s:Envelope>
Выше представлены выходные данные только для одного процессора из всех, присутствующих в целевой системе. В выходных данных ResourceURI указан как http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor, а SelectorSet выводит значения __cimnamespace, SystemCreationClassName, SystemName, CreationClassName и DeviceID. Это означает, что из всех свойств класса Linux_Processor (унаследованные и локально определенные) именно эти свойства можно использовать для уникальной идентификации экземпляра.
Таким образом, можно ожидать действительный ответ от такой команды, как:
wsman get http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor?SystemCreationClassName="Linux_ComputerSystem",SystemName="localhost.localdomain",CreationClassName="Linux_Processor",DeviceID="3",__cimnamespace="root/cimv2" -h test_host -P 5985 -u abc -p password -O get
Если в указанном выше запросе используются другие свойства, CIMOM внутреннего сервера не сможет уникально идентифицировать экземпляр. Аналогичным образом, если существует несколько пользовательских методов, для которых необходимо запустить экземпляр, EPR класса можно использовать для определения ключевых свойств для вызова метода.
Также можно перечислить EPR связи. В случае, если не удается определить, является ли имя класса стандартным именем класса или классом связи. Поскольку экземпляр связи имеет указатели на два экземпляра, EPR связи будет содержать EPR экземпляров/объектов, на которые ссылается связь. Пример такого сценария представлен ниже:
wsman enumerate -M epr http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_CSProcessor -h test_host -P 5985 -u abc -p password -O out
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration" xmlns:wsman="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">
<s:Header>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
<wsa:Action>http://schemas.xmlsoap.org/ws/2004/09/enumeration/PullResponse</wsa:Action>
<wsa:RelatesTo>uuid:2efbfcad-cd4b-1d4b-8003-a52924d9bed4</wsa:RelatesTo>
<wsa:MessageID>uuid:2efc1c6f-cd4b-1d4b-80b3-a52924d9bed4</wsa:MessageID>
</s:Header>
<s:Body>
<wsen:PullResponse>
<wsen:EnumerationContext>2ef7f6f5-cd4b-1d4b-80b1-a52924d9bed4</wsen:EnumerationContext>
<wsen:Items>
<wsa:EndpointReference>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
<wsa:ReferenceParameters>
<wsman:ResourceURI>http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_CSProcessor</wsman:ResourceURI>
<wsman:SelectorSet>
<wsman:Selector Name="__cimnamespace">root/cimv2</wsman:Selector>
<wsman:Selector Name="GroupComponent">
<wsa:EndpointReference>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
<wsa:ReferenceParameters>
<wsman:ResourceURI>http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_ComputerSystem</wsman:ResourceURI>
<wsman:SelectorSet>
<wsman:Selector Name="CreationClassName">Linux_ComputerSystem</wsman:Selector>
<wsman:Selector Name="Name">localhost.localdomain</wsman:Selector>
<wsman:Selector Name="__cimnamespace">root/cimv2</wsman:Selector>
</wsman:SelectorSet>
</wsa:ReferenceParameters>
</wsa:EndpointReference>
</wsman:Selector>
<wsman:Selector Name="PartComponent">
<wsa:EndpointReference>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
<wsa:ReferenceParameters>
<wsman:ResourceURI>http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor</wsman:ResourceURI>
<wsman:SelectorSet>
<wsman:Selector Name="SystemCreationClassName">Linux_ComputerSystem</wsman:Selector>
<wsman:Selector Name="SystemName">localhost.localdomain</wsman:Selector>
<wsman:Selector Name="CreationClassName">Linux_Processor</wsman:Selector>
<wsman:Selector Name="DeviceID">0</wsman:Selector>
<wsman:Selector Name="__cimnamespace">root/cimv2</wsman:Selector>
</wsman:SelectorSet>
</wsa:ReferenceParameters>
</wsa:EndpointReference>
</wsman:Selector>
</wsman:SelectorSet>
</wsa:ReferenceParameters>
</wsa:EndpointReference>
</wsen:Items>
</wsen:PullResponse>
</s:Body>
</s:Envelope>
Linux_CSProcessor — это связь между классами
Linux_ComputerSystem и
Linux_Processor, которая устанавливает взаимоотношения между процессорами, содержащимися в компьютерных системах, и разделами GroupComponent и PartComponent.
Мне пришлось потратить некоторое время на понимание EPR и того, как их можно использовать для доступа к отдельным экземплярам, предполагая, что это может оказаться полезно для других. Оставьте свои комментарии/предложения ниже.
Отказ от ответственности.
Приведенная выше статья предоставлена исключительно в информационных целях. Содержимое является моей интерпретацией упомянутых технологий/терминологий. Эта информация предоставляется на условиях «как есть» и может содержать некоторые типографские ошибки и/или технические неточности.