WSMAN ist die Management-API der Wahl für Dell iDRAC und es werden umfangreiche Anstrengungen unternommen, um die Remote-Systemverwaltung so umfassend und einfach wie möglich zu gestalten. Ich habe kürzlich einige Zeit damit verbracht, das WSMAN-Protokoll zu verstehen, um ein Plug-in zu implementieren, und nach der anfänglichen Aktion „wsman enumeration“ wird das WSMAN-Protokoll schwieriger zu verwenden. Es gibt keine einfache Dokumentation/Beispiele zum Aufrufen der Aktionen get/put/create/delete/custom mit den richtigen Haupteigenschaften. Die Hauptquelle für diese Informationen sind die technischen Daten zu WSMAN und technischen Daten zur WSMAN-CIM-Bindung der DMTF, deren Befolgung äußerst langwierig ist. Zur Erinnerung, der Großteil des Inhalts dieses Artikels stammt aus den technischen Dokumenten der DMTF. Dies ist ein Versuch, diese Informationen mit einigen Beispielen (unter Linux) leicht umsetzbar zu machen.
Ich habe bereits ein Whitepaper über die ersten Schritte mit SFCB und openwsman hier veröffentlicht:
https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdf. Wenn Sie neu im Umgang mit WSMAN/SFCB sind, ist dieses PDF ein besserer Ausgangspunkt als der vorliegende Artikel. Wie im obigen Whitepaper werden wir uns in diesem Artikel in erster Linie mit Implementierungen von openwsman und SFCB-CIMOM befassen.
Gibt es bei einem WSMAN-Server eine Möglichkeit, alle Komponenten aufzulisten, die über die WSMAN-API verwaltet werden können? Die meisten WSMAN-Server kommunizieren mit einem CIMOM am Back-End und stellen die Managementfunktionen der CIMOMs zur Verfügung. Das bedeutet, dass die Managementfunktionen eines WSMAN-Servers von den CIM-Anbietern abhängen, die beim CIMOM am Back-End registriert sind. CIMOM verfügt über eine systeminterne Funktion mit dem Namen
EnumerateClassNames, die aufgerufen werden kann, um alle Klassen aufzulisten, die bei CIMOM registriert sind.
Die systeminterne Funktion
EnumerateClassNames von CIMOM kann mit wsmancli wie folgt aufgerufen werden:
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>...................
Die Ausgabe sieht wie oben aus und weist darauf hin, dass Linux_Processor im Namespace root/cimv2 eine der registrierten Klassen ist. Es gibt eine Reihe von CIM-Klassen, die weitergegeben werden, wenn neue Klassen im Namespace root/cimv2 registriert werden, und der obige Befehl listet auch alle diese Klassennamen auf. In der Regel können Sie alle Klassen mit dem Präfix
CIM_ ignorieren. Alle Klassen mit dem Präfix
Linux_ sind die Klassen, die von Anbietern registriert werden, die auf einem Linux-System installiert sind. Bei der Arbeit mit dem iDRAC von Dell sind vor allem Klassen mit dem Präfix
DCIM_ interessant.
Nachdem Sie nun über eine Liste aller Klassennamen verfügen, können Sie die systeminterne Funktion
getClass verwenden, um die Definition der Klasse
Linux_Processor wie folgt zu extrahieren:
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
Mit dem obigen Befehl werden alle Eigenschaften aufgelistet, die lokal im
Linux_Processor definiert sind. Das bedeutet, dass alle Eigenschaften, die von anderen Klassen vom Typ
CIM_* übernommen werden, nicht mit der aktuellen Implementierung aufgeführt sind. In der Regel können Sie an der Definition einer Klasse erkennen, welche Methoden in der Klasse definiert sind, welche Parameter an diese Methoden übergeben werden müssen und welche Eigenschaften der Klasse die wichtigsten sind usw. Da der obige Befehl jedoch nur die lokalen Eigenschaften zurückgibt, können die Haupteigenschaften in der Klasse nicht identifiziert werden. Auch dies ist derzeit eine Implementierungseinschränkung in wsmancli.
Obwohl die Funktion „GetClass“ ein guter Ausgangspunkt ist, reicht ihre Ausgabe nicht aus, um zu bestimmen, welche Eigenschaften der Klasse als Haupteigenschaften verwendet werden können, damit die Get/Put/Create/Custom-Aktion aufgerufen werden kann. Welche anderen Techniken können verwendet werden, um dies zu erreichen? Hier können EPRs helfen.
EPR (End Point Reference) ist ein Zeiger auf eine Instanz mit zwei Informationen: dem ResourceURI und einem Selektorsatz. Der ResourceURI hat den Klassennamen, aus dem die Instanz erstellt wird, und der Selektorsatz listet die Eigenschaften auf, mit denen eine Instanz eindeutig identifiziert werden kann. EPRs einer bestimmten Klasse können mit einem Befehl ähnlich dem folgenden aufgelistet werden:
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>
Von allen Prozessoren im Zielsystem bezieht sich die obige Ausgabe nur auf einen einzigen. In der Ausgabe wird der resourceURI als http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor aufgeführt und das SelectorSet listet die Werte __cimnamespace, SystemCreationClassName, SystemName, CreationClassName und DeviceID auf. Das bedeutet, dass von allen Eigenschaften in der Klasse „Linux_Processor“ (übernommen und lokal definiert) diese Eigenschaften verwendet werden können, um eine Instanz eindeutig zu identifizieren.
Sie können also eine gültige Antwort von einem Befehl wie dem folgenden erwarten:
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
Wenn andere Eigenschaften in der obigen Anforderung verwendet werden, kann der CIMOM im Back-End eine Instanz nicht eindeutig identifizieren. Wenn einige benutzerdefinierte Methoden für eine Instanz ausgeführt werden müssen, kann die EPR der Klasse verwendet werden, um die Haupteigenschaften zu identifizieren, mit denen eine Methode aufgerufen werden soll.
Sie können auch die EPRs einer Zuordnung auflisten. Bei einem Klassennamen kann man nicht herausfinden, ob es sich um einen Standardklassennamen oder eine Zuordnungsklasse handelt. Da eine Instanz einer Zuordnung Zeiger auf zwei Instanzen hat, verfügt eine EPR einer Zuordnung über die EPRs der Instanzen/Objekte, auf die sich die Zuordnung bezieht. Im Folgenden finden Sie ein Beispiel dafür:
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 ist eine Zuordnung zwischen den Klassen
Linux_ComputerSystem und
Linux_Processor, die die Beziehung herstellt, dass die Prozessoren in Computersystemen enthalten sind, was die Abschnitte GroupComponent und PartComponent bedingt.
Ich musste einige Zeit damit verbringen, die EPRs zu ermitteln und wie sie für den Zugriff auf einzelne Instanzen verwendet werden können, und dachte, dass es für andere nützlich sein könnte. Hinterlassen Sie mir gerne unten Ihre Kommentare/Vorschläge.
Haftungsausschluss:
Der obige Artikel dient nur zu Informationszwecken. Der Inhalt ergibt sich aus meiner Interpretation der genannten Technologien/Terminologien. Diese Informationen werden ohne Gewähr zur Verfügung gestellt und können typografische Fehler und/oder technische Ungenauigkeiten enthalten.