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
  • Manage your Dell EMC sites, products, and product-level contacts using Company Administration.

Como explorar o WSMAN além da enumeração

Summary: Soluções de aplicativos e SO da Dell no Dell TechCenter - Project Sputnik, Microsoft Windows, Red Hat Linux, SUSE, Ubuntu e muito mais

This article may have been automatically translated. If you have any feedback regarding its quality, please let us know using the form at the bottom of this page.

Article Content


Symptoms

O WSMAN é a API de gerenciamento escolhida para o Dell iDRAC e esforços consideráveis estão em andamento para tornar o gerenciamento de sistemas remoto o mais abrangente e fácil possível. Recentemente passei algum tempo entendendo o protocolo WSMAN para implementar um plug-in e após a ação inicial de enumeração do WSMAN, o protocolo WSMAN fica um pouco complicado. Não há documentação/exemplos fáceis sobre como acionar as ações get/put/create/delete/custom com as propriedades de chave certas.  A fonte primária para essas informações é a especificação WSMAN do DMTF e a especificação de vinculação WSMAN-CIM que são extremamente demoradas de seguir. Novamente, a maior parte do conteúdo deste artigo provém dos documentos de especificação do DMTF. Esta é uma tentativa de facilitar o entendimento dessas informações com alguns exemplos (no Linux).

 Já publiquei um white paper sobre como começar a usar o SFCB e openwsman em https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdf. Se você é novo no WSMAN/SFCB, o pdf seria um ponto de partida melhor do que este artigo. Como no white paper acima, lidaremos principalmente com as implementações do Openwsman e SFCB CIMOM neste artigo.

 Agora, considerando um servidor WSMAN, existe uma maneira de listar todos os componentes que são gerenciáveis pela API WSMAN? A maioria dos servidores WSMAN se comunica com um CIMOM no back-end e expõe as funcionalidades de gerenciamento dos CIMOMs. Ou seja, os recursos de gerenciamento de um servidor WSMAN dependem dos provedores CIM registrados no CIMOM no back-end. O CIMOM tem uma função intrínseca pelo nome EnumerateClassNames definido que pode ser acionado para listar todas as classes que estão registradas para o CIMOM.

Cause

Como não há mapeamento individualizado para EnumerateClassNames na especificação WSMAN, esse método é acionado como qualquer outra função personalizada no WSMAN. Note que isso é específico da implementação e se aplica à implementação do wsmancli. Isso pode mudar ou ser atualizado em versões futuras.

Resolution

A função intrínseca EnumerateClassNames do CIMOM pode ser acionada da seguinte forma com 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>...................
 
O resultado será semelhante ao acima, indicando que no namespace root/cimv2, Linux_Processor é uma das classes registradas. Há várias classes CIM que são herdadas quando novas classes são registradas no namespace root/cimv2 e o comando acima listará todos esses nomes de classe também. Como regra geral, você pode ignorar todas as classes com o prefixo CIM_. Todas as classes com o prefixo Linux_ são as classes registradas por provedores instalados em um sistema Linux. Ao trabalhar com o iDRAC da Dell, você estará interessado principalmente em classes com o prefixo DCIM_.

 Agora que você tem uma lista de todos os nomes de classe, você pode usar a função intrínseca getClass para extrair a definição da classe Linux_Processor da seguinte maneira:
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
 
 O comando acima listará todas as propriedades definidas no Linux_Processor localmente. Isso significa que qualquer uma das propriedades herdadas de outras classes CIM_* não são listadas com a implementação atual. Normalmente, a partir da definição de uma classe, você pode descobrir quais métodos são definidos na classe, quais parâmetros precisam ser passados para esses métodos e quais propriedades da classe são propriedades chave etc. Mas, como o comando acima retorna apenas as propriedades locais, as propriedades de chave na classe não podem ser identificadas. Novamente, no momento essa é uma limitação de implementação no wsmancli.

Assim, embora a função GetClass seja um bom ponto de partida, a saída dela não é suficiente para determinar quais propriedades da classe podem ser usadas como propriedades de chave para que a ação get/put/create/custom possa ser acionada. Então, que outras técnicas podem ser usadas para conseguir isso? É aqui que as EPRs podem ajudar.


EPR (End Point Reference, referência de endpoint) é um ponteiro para uma instância com duas informações: o ResourceURI e um Selector Set. O ResourceURI tem o nome de classe do qual a instância é criada e o Selector Set lista as propriedades com as quais uma instância pode ser identificada exclusivamente. As EPRs de classe específica podem ser enumeradas com um comando semelhante 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>
 De todos os processadores no sistema de destino, a saída acima é apenas de um processador. Na saída, o resourceURI é listado como http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor e o SelectorSet lista os valores de __cimnamespace, SystemCreationClassName, SystemName, CreationClassName e DeviceID. Isso significa que, de todas as propriedades na classe Linux_Processor (herdadas e definidas localmente), essas propriedades podem ser usadas para identificar exclusivamente uma instância.

 Portanto, você pode esperar uma resposta válida de um 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
 Se qualquer outra propriedade for usada na solicitação acima, o CIMOM no back-end não poderá identificar uma instância exclusivamente. Da mesma forma, se houver alguns métodos personalizados que precisem ser executados em uma instância, a EPR da classe pode ser usada para identificar as propriedades de chave para acionar um método.

Você também pode enumerar as EPRs de uma associação. Dado um nome de classe, não é possível descobrir se é um nome de classe padrão ou uma classe de associação. Como uma instância de uma associação tem ponteiros para duas instâncias, uma EPR de uma associação terá as EPRs das instâncias/objetos às quais a associação está se referindo. A seguir, um exemplo do mesmo:
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 é uma associação entre as classes Linux_ComputerSystem e Linux_Processor que estabelece a relação de que os processadores estão contidos em sistemas de computador e, portanto, as seções GroupComponent e PartComponent.

Tive que passar algum tempo entendendo as EPRs e como elas podem ser usadas para acessar instâncias individuais, que poderia ser útil para outros. Fique à vontade para deixar seus comentários/sugestões abaixo.

Isenção:

O artigo acima é apenas para fins informativos. O conteúdo é de minha interpretação das tecnologias/terminologias mencionadas. Essas informações são fornecidas como estão e podem conter alguns erros tipográficos e/ou imprecisões técnicas.

Article Properties


Affected Product

Ubuntu Server LTS

Last Published Date

11 Jun 2024

Version

4

Article Type

Solution