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.

Explorando 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 gestão escolhida para o Dell iDRAC e estão em curso esforços extensivos para facilitar ao máximo a gestão remota do sistema. Recentemente passei algum tempo entendendo o protocolo WSMAN para implementar um plugin e após a ação inicial de enumeração wsman, o protocolo WSMAN fica um pouco peludo. Não há documentação/exemplos fáceis sobre como invocar ações get/put/create/delete/custom com as propriedades de chave corretas.  A principal fonte para essas informações é a especificação WSMAN do DMTF e a especificação de vinculação WSMAN-CIM, que são dolorosamente demoradas de seguir. Mais uma vez, a maior parte do conteúdo deste artigo é dos documentos de especificação DMTF. Esta é uma tentativa de tornar essa informação fácil de digerir com alguns exemplos (no Linux).

 Eu já postei um whitepaper sobre como começar com 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 whitepaper acima, trataremos principalmente das implementações openwsman e SFCB CIMOM neste artigo.

 Agora, dado um servidor WSMAN, existe uma maneira de listar todos os componentes que são gerenciáveis pela API wsman? A maioria dos servidores WSMAN fala 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 chamada para listar todas as classes que estão registradas no CIMOM.

Cause

Como não há mapeamento um-para-um para EnumerateClassNames na especificação WSMAN, esse método é invocado como qualquer outra função personalizada no WSMAN. Por favor, note que isto é específico da implementação e aplica-se à implementação wsmancli. Isso pode ser diferente ou atualizado em versões futuras.

Resolution

A função intrínseca EnumerateClassNames do CIMOM pode ser chamada 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>...................
 
A saída será semelhante à 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 CIM_ prefixo. Todas as classes com prefixo Linux_ são as classes que são registradas por provedores instalados em um sistema Linux. Ao trabalhar com o iDRAC da Dell, você estará interessado principalmente em aulas com DCIM_ prefixo.

 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. Ou seja, qualquer uma das propriedades herdadas de outras classes CIM_* não está listada 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 Local, as propriedades de chave na classe não podem ser identificadas. Mais uma vez, esta é atualmente uma limitação de implementação no wsmancli.

Portanto, 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 principais para que a ação get/put/create/custom possa ser invocada. Então, que outras técnicas podem ser usadas para conseguir isso? É aqui que as EPR podem ajudar.


EPR (End Point Reference) é um ponteiro para uma instância com duas informações: o ResourceURI e um Conjunto de Seletores. O ResourceURI tem o nome da classe a partir da qual a instância é criada e o Conjunto de Seletores lista as propriedades com as quais uma instância pode ser identificada exclusivamente. EPRs de classe específica podem ser enumerados 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 quaisquer outras propriedades forem usadas 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, o EPR da classe pode ser usado para identificar as propriedades de chave com as quais invocar 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. Uma vez que 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 a que a associação se refere. Segue-se 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 que os processadores estão contidos em Sistemas de Computador e, portanto, as seções GroupComponent e PartComponent.

Eu tive que gastar algum tempo descobrindo os EPRs e como eles podem ser usados para acessar instâncias individuais, pensei que poderia ser útil para outros. Sinta-se livre para me deixar seus comentários / sugestões abaixo.

Declaração de exoneração de responsabilidade:

O artigo acima destina-se apenas a fins informativos. O conteúdo é da minha interpretação das tecnologias/terminologias mencionadas. Esta informação é fornecida tal como está e pode 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