WSMAN er den valgte administrasjons-API-en for Dell iDRAC, og omfattende arbeid er i gang for å gjøre ekstern systemadministrasjon så omfattende og enkel som mulig. Jeg har nylig brukt litt tid på å forstå WSMAN-protokollen for å implementere et plugin, og etter den første WSMAN-oppregningen blir WSMAN-protokollen litt hårete. Det er ingen enkel dokumentasjon / eksempler på hvordan du påkaller få / sette / opprette / slette / egendefinerte handlinger med de riktige nøkkelegenskapene. Den primære kilden for denne informasjonen er DMTFs WSMAN-spesifikasjon og WSMAN-CIM-bindingsspesifikasjon som er smertefullt lange å følge. Igjen er det meste av innholdet i denne artikkelen fra DMTF-spesifikasjonsdokumentene. Dette er et forsøk på å gjøre denne informasjonen lett å fordøye med noen eksempler (på Linux).
Jeg har allerede lagt ut en whitepaper om hvordan du kommer i gang med SFCB og openwsman på
https://linux.dell.com/files/whitepapers/WBEM_based_management_in_Linux.pdf. Hvis du er ny på WSMAN / SFCB, vil pdf være et bedre utgangspunkt enn denne artikkelen. Som i hvitboken ovenfor vil vi først og fremst ta for oss implementeringer av openwsman og SFCB CIMOM i denne artikkelen.
Nå, gitt en WSMAN-server, er det en måte å liste opp alle komponentene som kan administreres av wsman API? De fleste WSMAN-serverne snakker med en CIMOM på baksiden og avslører administrasjonsfunksjonene til CIMOMene. Det betyr at administrasjonsfunksjonene til en WSMAN-server avhenger av CIM-leverandørene som er registrert på CIMOM på backend. CIMOM har en iboende funksjon med navnet
EnumerateClassNames definert som kan kalles for å liste alle klassene som er registrert på CIMOM.
CIMOMs iboende
EnumerateClassNames-funksjon kan kalles som følger med 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>...................
Utgangen vil se ut som ovenfor, noe som indikerer at i navnerommet root / cimv2 er Linux_Processor en av klassene som er registrert. Det finnes en rekke CIM-klasser som arves når nye klasser registreres i root/cimv2-navnerommet, og kommandoen ovenfor vil også liste opp alle disse klassenavnene. Som en generell regel kan du ignorere alle klassene med
CIM_ prefiks. Alle klassene med
Linux_ prefiks er klassene som er registrert av leverandører installert på et Linux-system. Når du arbeider med Dells idrac, er du for det meste interessert i kurs med
DCIM_ prefiks.
Nå som du har en liste over alle klassenavnene, kan du bruke
getClass iboende funksjon for å trekke ut definisjonen av
Linux_Processor-klassen som følger:
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
Kommandoen ovenfor viser alle egenskapene som er definert i
Linux_Processor lokalt. Det betyr at noen av egenskapene som arves fra andre
CIM_* -klasser, ikke er oppført med gjeldende implementering. Vanligvis fra en klasses definisjon kan du finne ut hvilke metoder som er definert i klassen, hvilke parametere som må sendes til disse metodene og hvilke egenskaper klassen er nøkkelegenskaper osv. Men siden kommandoen ovenfor bare returnerer de lokale egenskapene, kan ikke nøkkelegenskapene i klassen identifiseres. Igjen, dette er for øyeblikket en implementeringsbegrensning i wsmancli.
Så selv om GetClass-funksjonen er et godt utgangspunkt, er resultatet av det ikke tilstrekkelig nok til å bestemme hvilke egenskaper klassen kan brukes som nøkkelegenskaper slik at get/put/create/custom-handling kan påkalles. Så, hvilke andre teknikker kan brukes til å oppnå dette? Det er her EPR kan hjelpe.
EPR (sluttpunktreferanse) er en peker til en forekomst med to informasjonsdeler: ResourceURI og et velgersett. ResourceURI har klassenavnet forekomsten er opprettet fra, og velgersettet viser egenskapene en forekomst kan identifiseres unikt med. EPR av en bestemt klasse kan nummereres med en kommando som ligner på:
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>
Av alle prosessorene i målsystemet er utgangen ovenfor bare av én prosessor. I utdataene resourceURI er oppført som http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_Processor og SelectorSet viser verdiene __cimnamespace, SystemCreationClassName, SystemName , CreationClassName og DeviceID. Dette betyr at for alle egenskapene i Linux_Processor-klassen (arvet og lokalt definert) kan disse egenskapene brukes til å identifisere en forekomst unikt.
Så du kan forvente et gyldig svar fra en kommando som:
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
Hvis andre egenskaper brukes i forespørselen ovenfor, vil ikke CIMOM i back-end kunne identifisere en forekomst unikt. På samme måte, hvis det er noen egendefinerte metoder som må kjøres en forekomst, kan EPR for klassen brukes til å identifisere nøkkelegenskapene du kan påkalle en metode med.
Du kan også liste opp EPR for en forening. Gitt et klassenavn kan man ikke finne ut om det er et standard klassenavn eller en foreningsklasse. Siden en forekomst av en forening har pekere til to forekomster, vil en EPR av en forening ha EPR av forekomstene / objektene foreningen refererer til. Følgende er et eksempel på det samme:
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 er en tilknytning mellom
Linux_ComputerSystem - og
Linux_Processor-klassene som etablerer forholdet mellom prosessorene i datasystemer, og dermed delene GroupComponent og PartComponent.
Jeg måtte bruke litt tid på å finne ut EPR og hvordan de kan brukes til å få tilgang til individuelle forekomster, tenkte det kunne komme til nytte for andre. Føl deg fri til å forlate meg dine kommentarer / forslag nedenfor.
Ansvarsfraskrivelse:
Ovennevnte artikkel er kun til informasjonsformål. Innholdet er fra min tolkning av teknologiene / terminologiene som er nevnt. Denne informasjonen leveres som den er og kan inneholde noen typografiske feil og/eller tekniske unøyaktigheter.