Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products

Esplorazione di WSMAN oltre l'enumerazione

Summary: Soluzioni per sistemi operativi e applicazioni Dell su Dell TechCenter - Progetto Sputnik, Microsoft Windows, Red Hat Linux, SUSE, Ubuntu e altro ancora

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms

WSMAN è l'API di gestione scelta per Dell iDRAC e al momento ci stiamo impegnando a rendere la gestione remota dei sistemi il più completa e semplice possibile. Recentemente ho dedicato del tempo al protocollo WSMAN per implementare un plug-in e, dopo l'azione iniziale di enumerazione wsman, il protocollo WSMAN diventa un po' complicato. Non esiste una documentazione o esempi semplici su come richiamare le azioni get/put/create/delete/custom con le giuste proprietà chiave.  Le fonti principali di queste informazioni sono la specifica WSMAN di DMTF e la specifica di associazione di WSMAN-CIM, particolarmente lunghe da seguire. Anche in questo caso, la maggior parte del contenuto di questo articolo proviene da documenti delle specifiche DMTF. Questo è un tentativo di rendere queste informazioni più semplici da acquisire con alcuni esempi (su Linux).

 Ho già pubblicato un white paper su come iniziare a utilizzare SFCB e openwsman all'indirizzo https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdf. Per chi non conosce WSMAN/SFCB, il file PDF è un punto di partenza migliore rispetto a questo articolo. Come nel white paper di cui sopra, in questo articolo vengono trattate principalmente le implementazioni CIMOM di openwsman e SFCB.

 Ora, dato un server WSMAN, c'è un modo per elencare tutti i componenti gestibili dall'API wsman? La maggior parte dei server WSMAN comunica con un CIMOM sul back-end ed espone le funzionalità di gestione dei CIMOM. Questo significa che le funzionalità di gestione di un server WSMAN dipendono dai provider CIM registrati nel CIMOM sul back-end. Il CIMOM ha una funzione intrinseca definita denominata EnumerateClassNames che può essere chiamata per elencare tutte le classi registrate in CIMOM.

Cause

Poiché non esiste un mapping uno-a-uno per EnumerateClassNames nella specifica WSMAN, questo metodo viene richiamato come qualsiasi altra funzione personalizzata in WSMAN. Si noti che si tratta di un'implementazione specifica e si applica all'implementazione di wsmancli. Potrebbe variare o essere aggiornata nelle versioni future.

Resolution

La funzione EnumerateClassNames intrinseca di CIMOM può essere chiamata come segue con 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>...................
 
L'output è simile a quello riportato sopra e indica che, nel namespace root/cimv2, Linux_Processor è una delle classi registrate. Esistono diverse classi CIM che vengono ereditate quando nuove classi vengono registrate nel namespace root/cimv2 e il comando precedente elenca anche tutti i nomi di queste classi. Come regola generale, è possibile ignorare tutte le classi con il prefisso CIM_. Tutte le classi con il prefisso Linux_ sono le classi registrate dai provider installati in un sistema Linux. Quando si utilizza Dell iDRAC, si è interessati soprattutto alle classi con prefisso DCIM_.

 Ora che si dispone di un elenco di tutti i nomi delle classi, è possibile utilizzare la funzione getClass intrinseca per estrarre la definizione della classe Linux_Processor come segue:
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
 
 Il comando precedente elenca tutte le proprietà definite in Linux_Processor a livello locale. Ciò significa che le proprietà ereditate da altre classi CIM_* non sono elencate con l'implementazione corrente. In genere, dalla definizione di una classe è possibile capire quali metodi sono definiti nella classe, quali parametri devono essere passati a tali metodi, quali proprietà della classe sono proprietà chiave e così via. Tuttavia, poiché il comando precedente restituisce solo le proprietà locali, non è possibile identificare le proprietà chiave nella classe. Anche in questo caso, si tratta di una limitazione di implementazione in wsmancli.

Quindi, sebbene la funzione GetClass sia un buon punto di partenza, il suo output non è sufficiente per determinare quali proprietà della classe possono essere utilizzate come proprietà chiave in modo che sia possibile richiamare l'azione get/put/create/custom. Quindi, quali altre tecniche possono essere utilizzate per raggiungere questo obiettivo? È qui che gli EPR entrano in gioco.


Un EPR (End Point Reference) è un puntatore a un'istanza con due informazioni: ResourceURI e SelectorSet. ResourceURI ha il nome della classe da cui viene creata l'istanza e SelectorSet elenca le proprietà con cui un'istanza può essere identificata in modo univoco. Gli EPR di una particolare classe possono essere enumerati con un comando simile a:
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>
 Di tutti i processori nel sistema di destinazione, l'output precedente è di un solo processore. Nell'output, resourceURI viene elencato come http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor e SelectorSet elenca i valori di __cimnamespace, SystemCreationClassName, SystemName, CreationClassName e DeviceID. Ciò significa che tutte le proprietà nella classe Linux_Processor (ereditate e definite localmente) possono essere utilizzate per identificare in modo univoco un'istanza.

 È quindi lecito aspettarsi una risposta valida da un comando come:
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
 Se nella richiesta precedente vengono utilizzate altre proprietà, CIMOM nel back-end non è in grado di identificare un'istanza in modo univoco. Analogamente, se sono presenti alcuni metodi personalizzati che devono essere eseguiti in un'istanza, è possibile utilizzare l'EPR della classe per identificare le proprietà chiave con cui richiamare un metodo.

È anche possibile enumerare gli EPR di un'associazione. Dato il nome di una classe, non è possibile capire se si tratta di un nome di classe standard o di una classe di associazione. Poiché un'istanza di un'associazione dispone di puntatori a due istanze, l'EPR di un'associazione ha gli EPR delle istanze o degli oggetti a cui fa riferimento l'associazione. Di seguito è riportato un esempio:
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 è un'associazione tra le classi Linux_ComputerSystem e Linux_Processor che stabilisce la relazione in base alla quale i processori sono contenuti nei sistemi di computer e quindi nelle sezioni GroupComponent e PartComponent.

Ho dovuto dedicare un po' di tempo a capire gli EPR e come possono essere utilizzati per accedere alle singole istanze, quindi ho pensato che potesse tornare utile per altri. Si invita a lasciare commenti/suggerimenti qui sotto.

Dichiarazione di non responsabilità:

Questo articolo è solo a scopo informativo. Il contenuto deriva dalla mia interpretazione delle tecnologie e delle terminologie menzionate. Queste informazioni sono fornite così come sono e potrebbero contenere alcuni errori tipografici e/o imprecisioni tecniche.

Affected Products

Ubuntu Server LTS
Article Properties
Article Number: 000145895
Article Type: Solution
Last Modified: 11 Jun 2024
Version:  4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.