Omitir para ir al contenido principal
  • Hacer pedidos rápida y fácilmente
  • Ver pedidos y realizar seguimiento al estado del envío
  • Cree y acceda a una lista de sus productos
  • Administre sus sitios, productos y contactos de nivel de producto de Dell EMC con Administración de la empresa.

Exploración de WSMAN más allá de la enumeración

Resumen: Soluciones para aplicaciones y SO de Dell en Dell TechCenter - Project Sputnik, Microsoft Windows, Red Hat Linux, SUSE, Ubuntu y mucho más

Es posible que este artículo se traduzca automáticamente. Si tiene comentarios sobre su calidad, háganoslo saber mediante el formulario en la parte inferior de esta página.

Contenido del artículo


Síntomas

WSMAN es la API de administración elegida para Dell iDRAC y se están realizando grandes esfuerzos para que la administración remota del sistema sea lo más completa y fácil posible. Recientemente pasé algún tiempo entendiendo el protocolo WSMAN para implementar un complemento y después de la acción inicial de enumeración de wsman, el protocolo WSMAN se vuelve un poco peliagudo. No hay documentación/ejemplos sencillos sobre cómo invocar acciones get/put/create/delete/custom con las propiedades clave correctas.  La fuente principal de esta información es la especificación WSMAN del DMTF y la especificación de vinculación WSMAN-CIM, que son dolorosamente largas de seguir. Una vez más, la mayor parte del contenido de este artículo proviene de los documentos de especificación de DMTF. Este es un intento de hacer que esa información sea fácil de digerir con algunos ejemplos (en Linux).

 Ya publiqué un documento técnico sobre cómo comenzar con SFCB y openwsman en https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdf. Si eres nuevo en WSMAN/SFCB, el pdf sería un mejor punto de partida que este artículo. Al igual que en el documento técnico anterior, en este artículo nos ocuparemos principalmente de las implementaciones de openwsman y SFCB CIMOM.

 Ahora, dado un servidor WSMAN, ¿hay alguna manera de enumerar todos los componentes que se pueden administrar mediante la API de wsman? La mayoría de los servidores WSMAN se comunican con un CIMOM en el back-end y exponen las funcionalidades de administración de los CIMOM. Es decir, las capacidades de administración de un servidor WSMAN dependen de los proveedores de CIM registrados en el CIMOM en el backend. CIMOM tiene una función intrínseca con el nombre EnumerateClassNames definida a la que se puede llamar para enumerar todas las clases que están registradas en CIMOM.

Causa

Dado que no hay ninguna correlación uno a uno para EnumerateClassNames en la especificación de WSMAN, este método se invoca como cualquier otra función personalizada en WSMAN. Tenga en cuenta que esto es específico de la implementación y se aplica a la implementación de wsmancli. Esto podría ser diferente o actualizarse en versiones futuras.

Resolución

La función intrínseca EnumerateClassNames de CIMOM se puede llamar de la siguiente manera 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>...................
 
El resultado se verá como el anterior, lo que indica que en el espacio de nombres root/cimv2, Linux_Processor es una de las clases registradas. Hay una serie de clases CIM que se heredan cuando se registran nuevas clases en el espacio de nombres root/cimv2 y el comando anterior también enumerará todos esos nombres de clase. Como regla general, puede ignorar todas las clases con CIM_ prefijo. Todas las clases con Linux_ prefijo son las clases registradas por los proveedores instalados en un sistema Linux. Mientras trabaja con iDRAC de Dell, le interesarán principalmente las clases con DCIM_ prefijo.

 Ahora que tiene una lista de todos los nombres de clase, puede usar la función intrínseca getClass para extraer la definición de la clase Linux_Processor de la siguiente manera:
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
 
 El comando anterior enumerará todas las propiedades que se definen en el Linux_Processor localmente. Lo que significa que cualquiera de las propiedades heredadas de otras clases CIM_* no se enumeran con la implementación actual. Por lo general, a partir de la definición de una clase, puede averiguar qué métodos se definen en la clase, qué parámetros deben pasarse a esos métodos y qué propiedades de la clase son propiedades clave, etc. Sin embargo, dado que el comando anterior solo devuelve las propiedades locales, no se pueden identificar las propiedades clave de la clase. Nuevamente, esta es actualmente una limitación de implementación en wsmancli.

Por lo tanto, aunque la función GetClass es un buen punto de partida, su salida no es suficiente para determinar qué propiedades de la clase se pueden usar como propiedades clave para que se pueda invocar la acción get/put/create/custom. Entonces, ¿qué otras técnicas se pueden utilizar para lograr esto? Aquí es donde las EPR pueden ayudar.


La EPR (referencia de punto final) es un puntero a una instancia con dos piezas de información: ResourceURI y un conjunto de selectores. ResourceURI tiene el nombre de clase a partir del cual se crea la instancia y el conjunto de selección enumera las propiedades con las que se puede identificar de forma única una instancia. Las EPR de una clase específica se pueden enumerar con un comando similar a lo siguiente:
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 todos los procesadores en el sistema de destino, el resultado anterior es solo de un procesador. En la salida, resourceURI se muestra como http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor y SelectorSet enumera los valores de __cimnamespace, SystemCreationClassName, SystemName, CreationClassName y DeviceID. Esto significa que de todas las propiedades de la clase Linux_Processor (heredadas y definidas localmente), estas propiedades se pueden usar para identificar de forma única una instancia.

 Por lo tanto, puede esperar una respuesta válida de un comando como:
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 se utiliza cualquier otra propiedad en la solicitud anterior, el CIMOM en el back-end no podrá identificar una instancia de manera única. Del mismo modo, si hay algunos métodos personalizados que deben ejecutarse en una instancia, la EPR de la clase se puede usar para identificar las propiedades clave con las que invocar un método.

También puede enumerar los EPR de una asociación. Dado un nombre de clase, no se puede averiguar si se trata de un nombre de clase estándar o de una clase de asociación. Dado que una instancia de una asociación tiene punteros a dos instancias, una EPR de una asociación tendrá las EPR de las instancias/objetos a los que hace referencia la asociación. A continuación se muestra un ejemplo de lo mismo:
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 es una asociación entre las clases Linux_ComputerSystem y Linux_Processor que establece la relación entre que los procesadores están contenidos en los sistemas informáticos y, por lo tanto, las secciones GroupComponent y PartComponent.

Tuve que dedicar algún tiempo a averiguar los EPR y cómo se pueden usar para acceder a instancias individuales, pensé que podría ser útil para otros. No dudes en dejarme tus comentarios/sugerencias a continuación.

Descargo de responsabilidad:

El artículo anterior es solo para fines informativos. El contenido proviene de mi interpretación de las tecnologías/terminologías mencionadas. Esta información se proporciona tal cual y puede contener algunos errores tipográficos y/o inexactitudes técnicas.

Propiedades del artículo


Producto comprometido

Ubuntu Server LTS

Fecha de la última publicación

11 jun 2024

Versión

4

Tipo de artículo

Solution