WSMAN є обраним API управління для Dell iDRAC, і докладаються значні зусилля, щоб зробити віддалене управління системою максимально комплексним і простим. Нещодавно я витратив деякий час на розуміння протоколу WSMAN для реалізації плагіна, і після початкової дії з перерахування wsman, протокол WSMAN стає трохи волохатим. Не існує простої документації/прикладів про те, як викликати дії, отримання, розміщення, створення, видалення, з правильними властивостями ключа. Основним джерелом цієї інформації є специфікації 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, чи є спосіб перерахувати всі компоненти, якими можна керувати за допомогою wsman API? Більшість серверів 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_* , не перераховані в поточній реалізації. Зазвичай з визначення класу можна зрозуміти, які методи визначені в класі, які параметри потрібно передати цим методам, які властивості класу є ключовими властивостями тощо. Але, оскільки наведена вище команда повертає лише властивості Local, ключові властивості в класі не можуть бути ідентифіковані. Знову ж таки, наразі це обмеження реалізації у wsmancli.
Отже, хоча функція GetClass є гарною відправною точкою, її виведення недостатньо для того, щоб визначити, які властивості класу можуть бути використані як ключові властивості, щоб можна було викликати дію get/put/create/custom. Отже, які ще прийоми можна використовувати для цього? У цьому на допомогу можуть прийти РВВ.
EPR (End Point Reference) — це покажчик на екземпляр із двома частинами інформації: ResourceURI та селекторним набором. ResourceURI має ім'я класу, з якого створено екземпляр, а селекторний набір перелічує властивості, з якими екземпляр може бути унікально ідентифікований. ЕПР певного класу можна перерахувати за допомогою команди, подібної до такої:
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 класу може бути використаний для ідентифікації ключових властивостей для виклику методу.
Ви також можете перерахувати РВВ асоціації. Отримавши ім'я класу, неможливо зрозуміти, чи є це стандартним ім'ям класу чи класом асоціації. Оскільки екземпляр асоціації має покажчики на два екземпляри, то РВВ асоціації матиме ЕПР екземплярів/об'єктів, на які посилається асоціація. Нижче наведено приклад того самого:
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.
Мені довелося витратити деякий час на те, щоб з'ясувати РВВ і те, як їх можна використовувати для доступу до окремих інстансів, і я подумав, що це може стати в нагоді іншим. Не соромтеся залишати мені свої коментарі/пропозиції нижче.
Відмова від відповідальності:
Наведена вище стаття призначена лише для інформаційних цілей. Зміст взято з моєї інтерпретації згаданих технологій/термінологій. Ця інформація надається як є і може містити деякі друкарські помилки та/або технічні неточності.