WSMAN, Dell iDRAC için seçilen yönetim API'sidir ve uzaktan sistem yönetimini mümkün olduğunca kapsamlı ve kolay hale getirmek için geniş kapsamlı çalışmalar yürütülmektedir. Yakın zamanda bir süre WSMAN protokolünü anlamaya çalıştım ve ilk wsman numaralandırma işleminden sonra WSMAN protokolü biraz karmaşıklaşıyor. Doğru ana özelliklerle get/put/create/delete/custom İşlemlerinin nasıl çağrılacağı konusunda kolay bir belge/örnek yok. Bu bilginin birincil kaynağı, takip etmek için fazla uzun olan DMTF'nin WSMAN teknik özelliği ve WSMAN-CIM bağlantısı teknik özelliğidir. Yine bu makale içeriğinin çoğunluğu DMTF teknik özellik belgelerinden gelmektedir. Burada bu bilgileri (Linux üzerinde) bazı örneklerle kolay anlaşılır bir hale getirmeye çalışıyorum.
SFCB ve openwsman kullanmaya başlama hakkında paylaştığım teknik rapora şuradan ulaşabilirsiniz:
https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdf. WSMAN/SFCB konusunda yeniyseniz söz konusu pdf dosyası bu makaleden daha iyi bir başlangıç noktası olacaktır. Yukarıdaki teknik raporda olduğu gibi, bu makalede de öncelikle openwsman ve SFCB CIMOM uygulamalarıyla ilgileneceğiz.
Bir WSMAN sunucusu için wsman API'siyle yönetilebilecek tüm bileşenleri listelemenin bir yolu var mıdır? WSMAN sunucularının çoğu arka uçta bir CIMOM ile iletişim kurar ve CIMOM'ların yönetim işlevlerini açığa çıkarır. Bunun anlamı, bir WSMAN sunucusunun yönetim özelliklerinin arka uçta CIMOM'a kayıtlı CIM sağlayıcılarına bağlı olduğudur. CIMOM'da, CIMOM'a kayıtlı tüm sınıfları listelemek için çağrılabilecek,
EnumerateClassNames adında yerleşik bir işlev vardır.
CIMOM'un yerleşik
EnumerateClassNames işlevi, wsmancli ile şu şekilde çağrılabilir:
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>...................
Çıktı yukarıdaki gibi görünür ve root/cimv2 ad alanında Linux_Processor öğesinin kayıtlı sınıflardan biri olduğunu gösterir. root/cimv2 ad alanına yeni sınıflar kaydedildiğinde devralınan bir dizi CIM sınıfı olur ve yukarıdaki komut tüm bu sınıf adlarını da listeler. Genel bir kural olarak, ön eki
CIM_ olan tüm sınıfları yok sayabilirsiniz.
Linux_ ön ekine sahip tüm sınıflar, bir Linux sistemine yüklenen sağlayıcılar tarafından kaydedilen sınıflardır. Dell idrac ile çalışırken çoğunlukla ön eki
DCIM_ olan sınıflarla ilgilenirsiniz.
Artık elinizde tüm sınıf adlarının listesi olduğuna göre,
getClass yerleşik işlevini kullanarak
Linux_Processor sınıfının tanımını aşağıdaki gibi ayıklayabilirsiniz:
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
Yukarıdaki komut,
Linux_Processor içerisinde yerel olarak tanımlanan tüm özellikleri listeler. Diğer
CIM_* sınıflarından devralınan diğer hiçbir özelliğin mevcut uygulamayla listelenmediğini ifade eder. Genellikle bir Sınıfın tanımından sınıfta hangi yöntemlerin kullanıldığını, bu yöntemlere hangi parametrelerin iletilmesi gerektiğini ve sınıfın hangi özelliklerinin önemli özellikler olduğunu vb. anlayabilirsiniz. Ancak yukarıdaki komut yalnızca Yerel özellikleri döndürdüğünden, sınıftaki ana özellikler tespit edilemez. Şu anda bu da wsmancli'deki bir uygulama sınırlamasıdır.
Dolayısıyla, GetClass işlevi iyi bir başlangıç noktası olsa da; çıktısı, get/put/create/custom eyleminin çağrılabilmesi için sınıfın hangi özelliklerinin ana özellikler olarak kullanılabileceğini belirlemede yeterli değildir. Bu durumda, bunu gerçekleştirmek için diğer hangi teknikler kullanılabilir? EPR'ler bu noktada yardımcı olabilir.
EPR (Uç Nokta Referansı); ResourceURI ve Seçici Kümesi olmak üzere iki parça bilgi içeren bir örnek işaretçisidir. ResourceURI, örneğin kendisinden oluşturulduğu sınıf adını içerir ve Seçici Kümesi, bir örneğin benzersiz bir şekilde tanımlanması için kullanılan özellikleri listeler. Belirli bir sınıftaki EPR'ler şuna benzer bir komutla numaralandırılabilir:
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>
Hedef sistemdeki tüm işlemciler arasından, yukarıdaki çıktı yalnızca bir işlemciye aittir. Çıktıda resourceURI http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor olarak listelenir ve SelectorSet; __cimnamespace, SystemCreationClassName, SystemName, CreationClassName ve DeviceID öğelerini listeler. Bunun anlamı, Linux_Processor sınıfındaki tüm özellikler (devralınan ve yerel olarak tanımlanan) arasından bu özelliklerin bir örneği benzersiz bir şekilde tanımlamak için kullanılabileceğidir.
Dolayısıyla, şunun gibi bir komuttan geçerli bir yanıt bekleyebilirsiniz:
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
Yukarıdaki istekte başka özellikler kullanılırsa arka uçtaki CIMOM bir örneği benzersiz bir şekilde tanımlayamaz. Benzer şekilde, örnek olarak çalıştırılması gereken özel yöntemler olursa bir yöntemi çağırmak için kullanılabilecek ana özellikleri belirlemek için sınıfın EPR'si kullanılabilir.
Bir ilişkilendirmenin EPR'lerini de numaralandırabilirsiniz. Bir sınıf adı verildiğinde, bunun standart bir Sınıf adı mı, ilişkilendirme sınıfı mı olduğu anlaşılamaz. Bir ilişkilendirme örneğinin iki örneğe iki işaretçisi olduğundan, bir ilişkilendirme EPR'sinde, ilişkilendirmenin başvurduğu örneklerin/nesnelerin EPR'leri olur. Bunun bir örneği aşağıda verilmiştir:
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 ve
Linux_Processor sınıfları arasında, İşlemcilerin Bilgisayar Sistemlerinde ve dolayısıyla GroupComponent ve PartComponent bölümlerinde yer aldığı ilişkisini kuran bir ilişkilendirmedir.
Diğerlerinde de işe yarayabileceğini düşünerek bir süre EPR'leri ve bunların ayrı ayrı örneklere erişmek için nasıl kullanılabileceğini anlamaya çalıştım. Yorumlarınızı/önerilerinizi aşağıya bırakabilirsiniz.
Sorumluluk reddi:
Yukarıdaki makale yalnızca bilgilendirme amaçlıdır. İçeriği, söz konusu teknolojilerin/terminolojilerin tarafımca yorumlanmasına dayalıdır. Bu bilgiler olduğu gibi verilmiştir ve yazım hataları ve/veya teknik hatalar içerebilir.