WSMAN is de gekozen beheer-API voor Dell iDRAC en er worden uitgebreide inspanningen geleverd om systeembeheer op afstand zo uitgebreid en eenvoudig mogelijk te maken. Ik heb onlangs wat tijd besteed aan het begrijpen van het WSMAN-protocol om een plug-in te implementeren en na de eerste wsman-opsommingsactie wordt het WSMAN-protocol een beetje harig. Er is geen eenvoudige documentatie/voorbeelden voor het aanroepen van get/put/create/delete/custom Actions met de juiste sleuteleigenschappen. De primaire bron voor deze informatie is de WSMAN-specificatie van de DMTF en de WSMAN-CIM-bindingsspecificatie, die pijnlijk lang op zich laten wachten. Nogmaals, het grootste deel van de inhoud van dit artikel is afkomstig uit de DMTF-specificatiedocumenten. Dit is een poging om die informatie gemakkelijk verteerbaar te maken met enkele voorbeelden (op Linux).
Ik heb al een whitepaper geplaatst over hoe je aan de slag kunt gaan met SFCB en openwsman op
https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdfte installeren. Als u nieuw bent bij WSMAN/SFCB, zou de pdf een beter startpunt zijn dan dit artikel. Net als in de bovenstaande whitepaper zullen we in dit artikel voornamelijk ingaan op openwsman en SFCB CIMOM implementaties.
Is er nu, gegeven een WSMAN-server, een manier om alle componenten op te sommen die door wsman API kunnen worden beheerd? De meeste WSMAN-servers praten met een CIMOM op de back-end en leggen de beheerfunctionaliteiten van de CIMOM's bloot. Dit betekent dat de beheermogelijkheden van een WSMAN-server afhankelijk zijn van de CIM-providers die bij de CIMOM op de back-end zijn geregistreerd. De CIMOM heeft een intrinsieke functie met de naam
EnumerateClassNames gedefinieerd die kan worden aangeroepen om alle klassen weer te geven die zijn geregistreerd bij CIMOM.
De intrinsieke
functie EnumerateClassNames van CIMOM kan als volgt worden aangeroepen met 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>...................
De uitvoer ziet er als hierboven uit, wat aangeeft dat in de naamruimte root/cimv2, Linux_Processor een van de geregistreerde klassen is. Er zijn een aantal CIM-klassen die worden overgenomen wanneer nieuwe klassen worden geregistreerd in de root/cimv2-namespace en de bovenstaande opdracht zal ook al deze klassenamen weergeven. Als algemene regel geldt dat u alle klassen met
CIM_ voorvoegsel kunt negeren. Alle klassen met
Linux_ voorvoegsel zijn de klassen die zijn geregistreerd door providers die op een Linux-systeem zijn geïnstalleerd. Als u met de idrac van Dell werkt, zult u vooral geïnteresseerd zijn in klassen met
DCIM_ voorvoegsel.
Nu u een lijst met alle klassenamen hebt, kunt u de intrinsieke functie
getClass gebruiken om de definitie van de
Linux_Processor klasse als volgt te extraheren:
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
De bovenstaande opdracht geeft alle eigenschappen weer die lokaal in de
Linux_Processor zijn gedefinieerd. Dit betekent dat de eigenschappen die zijn overgenomen van andere
CIM_*- klassen niet worden vermeld bij de huidige implementatie. Meestal kun je aan de hand van de definitie van een klasse achterhalen welke methoden in de klasse zijn gedefinieerd, welke parameters aan die methoden moeten worden doorgegeven en welke eigenschappen van de klasse sleuteleigenschappen zijn, enz. Maar aangezien de bovenstaande opdracht alleen de lokale eigenschappen retourneert, kunnen de belangrijkste eigenschappen in de klasse niet worden geïdentificeerd. Nogmaals, dit is momenteel een implementatiebeperking in wsmancli.
Dus hoewel de functie GetClass een goed uitgangspunt is, is de uitvoer ervan niet voldoende om te bepalen welke eigenschappen van de klasse kunnen worden gebruikt als sleuteleigenschappen, zodat get/put/create/custom action kan worden aangeroepen. Dus, welke andere technieken kunnen worden gebruikt om dit te bereiken? Dit is waar UPV's kunnen helpen.
EPR (End Point Reference) is een pointer naar een instantie met twee stukjes informatie: de ResourceURI en een Selector Set. De ResourceURI heeft de klassenaam op basis waarvan de instantie is gemaakt en de selectieset vermeldt de eigenschappen waarmee een instantie uniek kan worden geïdentificeerd. EPR's van een bepaalde klasse kunnen worden geïnventariseerd met een opdracht die vergelijkbaar is met:
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>
Van alle processoren in het doelsysteem is de bovenstaande uitvoer slechts van één processor. In de uitvoer wordt de resourceURI vermeld als http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor en de SelectorSet vermeldt de waarden van __cimnamespace, SystemCreationClassName, SystemName, CreationClassName en DeviceID. Dit betekent dat van alle eigenschappen in de klasse Linux_Processor (overgenomen en lokaal gedefinieerd) deze eigenschappen kunnen worden gebruikt om een instantie uniek te identificeren.
U kunt dus een geldig antwoord verwachten van een opdracht als:
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
Als er andere eigenschappen worden gebruikt in de bovenstaande aanvraag, kan de CIMOM in de back-end geen unieke instantie identificeren. Als er enkele aangepaste methoden zijn die een instantie moeten uitvoeren, kan de EPR van de klasse worden gebruikt om de belangrijkste eigenschappen te identificeren waarmee een methode moet worden aangeroepen.
U kunt ook de UPV's van een vereniging opsommen. Gegeven een klassenaam kan men er niet achter komen of het een standaard klassenaam is of een associatieklasse. Aangezien een instantie van een associatie verwijzingen heeft naar twee instanties, heeft een EPR van een associatie de EPR's van de instanties/objecten waarnaar de associatie verwijst. Hieronder volgt een voorbeeld hiervan:
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 is een associatie tussen de
Linux_ComputerSystem en
Linux_Processor klassen die de relatie tot stand brengen dat de processors zich in computersystemen bevinden, en dus de secties GroupComponent en PartComponent.
Ik moest wat tijd besteden aan het uitzoeken van de EPD's en hoe ze kunnen worden gebruikt om toegang te krijgen tot individuele instanties, dacht dat het voor anderen van pas zou kunnen komen. Voel je vrij om hieronder je opmerkingen/suggesties achter te laten.
Disclaimer:
Bovenstaand artikel is alleen voor informatieve doeleinden. De inhoud is van mijn interpretatie van de genoemde technologieën/terminologieën. Deze informatie wordt verstrekt in de huidige vorm en kan typografische fouten en/of technische onnauwkeurigheden bevatten.