WSMANは、Dell iDRAC用に選択された管理APIであり、リモート システム管理を可能な限り包括的かつ簡単に行うために広範な取り組みが進行中です。最近、プラグインを実装するため、WSMANプロトコルを理解するのに時間を費やしましたが、最初のwsman列挙アクションの後、WSMANプロトコルが少し困難になりました。適切なキー プロパティを使用してget/put/create/delete/customアクションを呼び出す方法に関する簡単なドキュメント/例がありません。 この情報の主なソースは、DMTFのWSMAN仕様とWSMAN-CIMバインディング仕様であり、どちらも苦痛なほど長い資料です。繰り返しになりますが、この記事の内容のほとんどは、DMTF仕様ドキュメントに基づいています。これは、いくつかの例(Linuxの場合)を使用して、その情報を簡単に理解できるようにする試みです。
SFCBとopenwsmanを使い始める方法に関するホワイトペーパーは、次の場所に既に掲載されています。
https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdfWSMAN/SFCBを初めて使用する場合は、本記事よりもこのPDFの方が出発点として適しています。前述のホワイトペーパーにあるように、この記事では主にopenwsmanとSFCB CIMOMの実装を扱います。
WSMANサーバーの場合、wsman APIで管理可能なすべてのコンポーネントを一覧表示する方法はあるでしょうか?ほとんどのWSMANサーバーは、バックエンドのCIMOMと通信し、CIMOMの管理機能を公開します。つまり、WSMANサーバーの管理機能は、バックエンドのCIMOMに登録されているCIMプロバイダーに依存します。CIMOMには、
EnumerateClassNamesという名前の組み込み関数が定義されており、この関数を呼び出すと、CIMOMに登録されているすべてのクラスが一覧表示されます。
CIMOMの
EnumerateClassNames組み込み関数は、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>...................
出力は上記のようになり、ネームスペースroot/cimv2では、Linux_Processorが登録されているクラスの1つであることが分かります。新しいクラスがroot/cimv2ネームスペースに登録されたときに継承されるCIMクラスは多数あり、上記のコマンドではそれらすべてのクラス名も一覧表示されます。原則として、プレフィックスが
CIM_のすべてのクラスは無視できます。プレフィックス
Linux_が付いたクラスはすべて、Linuxシステムにインストールされているプロバイダーによって登録されたクラスです。DellのiDRACを使用している場合、ほとんどの場合、プレフィックス
DCIM_が付いたクラスに関係します。
すべてのクラス名が一覧表示されているので、
getClass組み込み関数を使用して、次のように
Linux_Processorクラスの定義を抽出できます。
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
上記のコマンドは、
Linux_Processorで定義されているすべてのプロパティをローカルに一覧表示します。つまり、他の
CIM_*クラスから継承されたプロパティは、現在の実装ではリストされません。通常、クラスの定義から、クラスでどのメソッドが定義されているか、それらのメソッドに渡す必要があるパラメーター、クラスのどのプロパティがキー プロパティであるかなどを把握できます。ただし、上記のコマンドはローカル プロパティのみを返すため、クラス内のキー プロパティを識別できません。これも現在、wsmancliの実装上の制限事項です。
そのため、GetClass関数は適切な出発点ですが、その出力は、get/put/create/customアクションを呼び出せるように、クラスのどのプロパティをキー プロパティとして使用できるかを判断するのに十分ではありません。では、これを実現するために他にどのような手法を使用できるでしょうか?そこで役立つのがEPRです。
EPR (End Point Reference)は、ResourceURIとSelector Setの2つの情報を持つインスタンスへのポインターです。ResourceURIにはインスタンスの作成元のクラス名があり、Selector Setにはインスタンスを一意に識別できるプロパティが一覧表示されます。特定のクラスのEPRは、次のようなコマンドで列挙できます。
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>
ターゲット システムのすべてのプロセッサーのうち、上記の出力は1つのプロセッサーのみのものです。出力では、resourceURIは「http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor」としてリストされ、SelectorSetには「__cimnamespace」、「SystemCreationClassName」、「SystemName」、「CreationClassName」、および「DeviceID」の値が一覧表示されています。つまり、Linux_Processorクラスのすべてのプロパティ(継承およびローカル定義)のうち、これらのプロパティを使用してインスタンスを一意に識別できます。
したがって、次のようなコマンドから有効な応答が期待できます。
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
上記の要求で他のプロパティが使用されている場合、バックエンドのCIMOMはインスタンスを一意に識別できません。同様に、インスタンスを実行する必要があるカスタム メソッドがいくつかある場合は、クラスのEPRを使用して、メソッドを呼び出すキー プロパティを識別できます。
また、アソシエーションのEPRを列挙することもできます。クラス名が与えられると、それが標準のクラス名なのか、アソシエーション クラスなのかを判断できません。アソシエーションのインスタンスには2つのインスタンスへのポインターがあるため、アソシエーションのEPRには、アソシエーションが参照しているインスタンス/オブジェクトのEPRが含まれます。次に、その例を示します。
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は、
Linux_ComputerSystemクラスと
Linux_Processorクラスの間のアソシエーションであり、プロセッサーがコンピューター システム(GroupComponentセクションとPartComponentセクション)に含まれるという関係を確立しています。
EPRについて理解し、それを使用して個々のインスタンスにアクセスする方法を見つけるのに時間を費やすうちに、他の人に役立つかもしれないと思いました。以下にコメント/提案してください。
免責事項:
上記の記事は、情報提供のみを目的としています。その内容は、言及された技術/用語に基づく個人的な解釈によるものです。この情報は現状有姿で提供されており、誤字脱字や不正確な技術情報が含まれている可能性があります。