PowerEdge : exploration de WSMAN au-delà de l’énumération
Summary: Système d’exploitation Dell et solutions d’applications sur Dell TechCenter - Project Sputnik, Microsoft Windows, Red Hat Linux, SUSE, Ubuntu et bien plus encore
Symptoms
, j’ai trouvé qu’il devenait complexe suite à l’action d’énumération initiale. Il n’y a pas de documentation ou d’exemples sur la façon d’appeler des actions get/put/create/delete/custom avec les propriétés de clé appropriées. La principale source de ces informations est la spécification WSMAN de DMTF et la spécification de liaison WSMAN-CIM qui sont extrêmement longues à suivre. Là encore, la plupart du contenu de cet article provient des documents de spécification DMTF. Il s’agit d’une tentative de rendre cette information digérée avec quelques exemples (sous Linux).
J’ai déjà publié un livre blanc sur la façon de commencer avec SFCB et openwsman à l’adresse https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdf. Si vous êtes nouveau sur WSMAN et SFCB, le pdf serait un meilleur point de départ que cet article. Comme dans le livre blanc ci-dessus, traite principalement des implémentations openwsman et SFCB CIMOM dans cet article
Maintenant, étant donné un serveur WSMAN, existe-t-il un moyen de répertorier tous les composants qui sont gérables par l’API wsman ? La plupart des serveurs WSMAN communiquent avec un CIMOM sur le back-end et exposent les fonctionnalités de gestion des CIMOM. Cela signifie que les capacités de gestion d’un serveur WSMAN dépendent des fournisseurs CIM qui sont enregistrés sur le CIMOM qui se trouve sur le back-end. Le CIMOM a une fonction intrinsèque du nom EnumerateClassNames qui peut être appelée pour répertorier toutes les classes enregistrées sur CIMOM.
Cause
Resolution
L’intrinsèque du CIMOM EnumerateClassNames peut être appelée comme suit avec 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>...................
Le résultat ressemble à ce qui précède, indiquant que dans l’espace de nommage root/cimv2, Linux_Processor est l’une des classes inscrites. Plusieurs classes CIM sont héritées lorsque de nouvelles classes s’enregistrent dans root ou cimv2, et la commande répertorie tous ces noms de classe. En règle générale, vous pouvez ignorer toutes les classes avec CIM_ . Toutes les classes avec Linux_ préfixe sont les classes enregistrées par les fournisseurs installés sur un système Linux.
Lorsque vous travaillez avec l’iDRAC de Dell, vous êtes particulièrement intéressé par les cours avec DCIM_ prefix.
Avec la liste des noms de classe, utilisez la commande getClass pour extraire le fichier Linux_Processor La définition de la classe est la suivante :
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
La commande ci-dessus répertorie toutes les propriétés définies dans le fichier Linux_Processor localement. C’est-à-dire l’une des propriétés héritées d’autres CIM_* Les classes ne sont pas répertoriées avec l’implémentation actuelle. Les définitions de classe révèlent les méthodes, les paramètres et les propriétés de clé, mais la commande ne renvoie que les propriétés locales, ce qui rend les propriétés clés non identifiables. Encore une fois, il s’agit d’une limitation de mise en œuvre dans wsmancli.
Tandis que GetClass est un bon début, sa sortie ne suffit pas à identifier les propriétés clés pour appeler des actions get or put ou create ou custom.
Alors, quelles autres techniques peuvent être utilisées pour y parvenir ? C’est là que les EPR peuvent vous aider.
La référence de point final (EPR) est un pointeur vers une instance avec deux éléments d’information : le ResourceURI et un ensemble de sélecteurs. L' ResourceURI a le nom de classe à partir duquel l’instance est créée et le Selector Set répertorie les propriétés avec lesquelles une instance peut être identifiée de manière unique. Les EPR d’une classe particulière peuvent être énumérées à l’aide d’une commande similaire à :
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>
De tous les processeurs du système cible, la sortie ci-dessus est celle d’un seul processeur.
Dans la sortie, l’URI de ressource est répertorié comme suit : https://sblim.sourceforge.net/wbem/wscim/1/cim-schema/2/Linux_Processor et SelectorSet Répertorie les valeurs de __cimnamespace, SystemCreationClassName, SystemName, CreationClassName, and DeviceID. Cela signifie que pour toutes les propriétés de la classe héritées et définies localement, ces propriétés peuvent être utilisées pour identifier de manière unique une instance.
Vous pouvez donc vous attendre à une réponse valide d’une commande telle que :
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
Si d’autres propriétés sont utilisées dans la demande ci-dessus, le CIMOM du back-end ne peut pas identifier une instance de manière unique. Pour exécuter des méthodes personnalisées sur une instance, utilisez l’EPR de la classe afin d’identifier les propriétés clés pour l’appel de méthode.
Vous pouvez également énumérer les EPR d’une association. Pour un nom de classe donné, il n’est pas possible de savoir s’il s’agit d’un nom de classe standard ou d’association. Une instance d’association pointe vers deux instances, de sorte que son EPR inclut les EPR des instances ou des objets auxquels elle fait référence. Voici un exemple de la même chose :
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 Liens Linux_ComputerSystem et Linux_Processor, montrant les processeurs dans les systèmes informatiques, en détaillant GroupComponent et PartComponent des sections de l’Île-du-Prince
J’ai passé du temps à comprendre les EPR et leur utilisation pour accéder aux instances, pensant que cela pourrait aider les autres. N’hésitez pas à me laisser vos commentaires ou suggestions ci-dessous.
Avis de non-responsabilité :
L’article ci-dessus est fourni à titre informatif uniquement. Le contenu provient de mon interprétation des technologies et des terminologies mentionnées. Ces informations sont fournies en l’état et peuvent contenir des erreurs typographiques et/ou des inexactitudes techniques.