using ws eventing - Openwsman/openwsman GitHub Wiki

Using WS-Eventing

Introduction

This HOWTO was to create a demo for MDC, see these slides for more information.

Configure indication provider setting in CIMOM

First, download the latest sfcbd source code from SBLIM project repository. The latest sfcbd has some bugs fixed which enables WS-Eventing features in OpenWSMAN to run smoothly. Compile it with indication enabled and install it in your system. It is assumed that you have an indication provider – libprocessIndication.so, a corresponding registry file – processIndication.reg, and a MOF file (if it is necessary). The content of registry file is like the following:

[CIM_ProcessIndication]
provider: CPUUsage
location: processIndication
type: indication
namespace: root/cimv2

Steps to register a new indication provider in sfcbd are:

  • Copy provider image to one of provider directories. For example, /usr/local/lib/cmpi.
  • Register provider to sfcbd
    • Run sfcbstage -n root/cimv2 -r processIndication.reg. There is no MOF file here for CIM_ProcessIndication is a standard class included in CIM MOFs.
    • Run sfcbreps -f. This command rebuilds class repository
    • Run sfcbd

Configure indication source namespace setting in OpenWSMAN

If the indication namespace is different from CIM namespace defined in openwsman.conf or what you specify in wsmancli through the option --namespace, add indication source namespace configuration in OpenWSMAN configuration file.

For example, if default_cim_namespace = root/interop, then we should add another option indication_source_namespace = root/cimv2 in cim section of openwsman.conf in this case.

Run wseventsink utility as an event sink

Run wseventsink as an event sink. Utility wseventsink accepts incoming events and prints them to stdout. Default service path is /eventsink and port is 80.

Run wsmancli to subscribe

Push delivery mode, 2 seconds heartbeat and 600 seconds expiration

Run command:

wsman subscribe http://schemas.dmtf.org/wbem/wscim/1/* \
-x "SELECT * FROM CIM_ProcessIndication" \
-D "http://schemas.microsoft.com/wbem/wsman/1/WQL" \
-Z http://127.0.0.1:80/eventsink  \
--namespace=root/cimv2 \
-r 600 \
-H 2 \
-h localhost -u wsman -p secret \
-G push \
–R

We will see incoming events from wseventsink. If there is no real event from indication provider, heartbeat events will be sent every 2 seconds.

If this command fails for any reason, please see Debugging WS-Eventing for help.

PushWithAck delivery mode

Run command:

wsman subscribe http://schemas.dmtf.org/wbem/wscim/1/* \
-x "SELECT * FROM CIM_ProcessIndication" \
-D "http://schemas.microsoft.com/wbem/wsman/1/WQL" \
-Z http://127.0.0.1:80/eventsink \
--namespace=root/cimv2 \
-r 600 \
-H 2 \
-h localhost -u wsman -p secret \
-G pushwithack \
–R

We will see incoming real events and heartbeats from wseventsink. This delivery mode demands acknowledgement from event sink. If wseventsink is closed, this subscription will be terminated by openwsman when it cannot receive acknowledgment.

Batched delivery mode

Run command:

wsman subscribe http://schemas.dmtf.org/wbem/wscim/1/* \
-x "SELECT * FROM CIM_ProcessIndication" \
-D "http://schemas.microsoft.com/wbem/wsman/1/WQL" \
–Z http://127.0.0.1:80/eventsink \
--namespace=root/cimv2 \
-r 600 \
-H 2 \
-h localhost -u wsman -p secret \
-G events \
–R

This delivery mode provides a way to deliver multiple events in a single SOAP event message. It also needs acknowledgement from event sink. The subscription will be terminated if Openwsman cannot receive acknowledgment of an event.

Pull delivery mode

wsman subscribe http://schemas.dmtf.org/wbem/wscim/1/* \
-x "SELECT * FROM CIM_ProcessIndication" \
-D "http://schemas.microsoft.com/wbem/wsman/1/WQL" \
-Z http://127.0.0.1:80/eventsink \
--namespace=root/cimv2 \
-r 600 \
-h localhost -u wsman -p secret \
-G pull \
–R

This delivery mode borrows the wsen:Pull message to retrieve events from the logical queue. If the returned subscription response is like the following:

<s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wse="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:wsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration">
 <s:header>
  <wsa:to>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:to>
  <wsa:action>http://schemas.xmlsoap.org/ws/2004/08/eventing/SubscribeResponse</wsa:action>
  <wsa:relatesto>uuid:1f557836-3ec7-1ec7-8002-6ae2ccb7d000</wsa:relatesto>
  <wsa:messageid>uuid:1f756cda-3ec7-1ec7-955e-6ae2ccb7d000</wsa:messageid>
 </s:header>
 <s:body>
  <wse:subscriberesponse>
   <wse:subscriptionmanager>
    <wsa:address>http://localhost:8889/wsman</wsa:address>
    <wsa:referenceparameters>
     <wse:identifier>uuid: 26dca9cb-3ec7-1ec7-8002-6ae2ccb7d000</wse:identifier>
    </wsa:referenceparameters>
   </wse:subscriptionmanager>
   <wse:expires>PT600.000000S</wse:expires>
   <wsen:enumerationcontext>uuid: 26dca9cb-3ec7-1ec7-8002-6ae2ccb7d000</wsen:enumerationcontext>
  </wse:subscriberesponse>
 </s:body>
</s:envelope>

Then, corresponding command to pull events is shown below:

wsman pull "http://schemas.dmtf.org/wbem/wscim/1/*" \
-U uuid:26dca9cb-3ec7-1ec7-8002-6ae2ccb7d000 \
-h localhost -u wsmantest -p wsmantest

If there is an event in the queue, the response will be like the following:

<s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:n1="http://schema.omc-project.org/wbem/wscim/1/cim-schema/2/CIM_ProcessIndication">
 <s:header>
  <wsa:action>http://schema.omc-project.org/wbem/wscim/1/cim-schema/2/CIM_ProcessIndication</wsa:action>
  <wsa:messageid>uuid:2782e580-3ec7-1ec7-8004-6ae2ccb7d000</wsa:messageid>
  <wsa:relatesto>uuid:2782ce67-3ec7-1ec7-8002-6ae2ccb7d000</wsa:relatesto>
 </s:header>
 <s:body>
  <wsen:pullresponse>
   <wsen:enumerationcontext>uuid:26dca9cb-3ec7-1ec7-8002-6ae2ccb7d000</wsen:enumerationcontext>
   <n1:cim_processindication>
    <n1:indicationidentifier>
     ChangeOfUsers
    </n1:indicationidentifier>
    <n1:indicationtime></n1:indicationtime>
    <n1:classname></n1:classname>
   </n1:cim_processindication>
  </wsen:pullresponse>
 </s:body>
</s:envelope>

If there is no event in the queue, the response will be like:

<s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 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.dmtf.org/wbem/wsman/1/wsman/fault</wsa:action>
  <wsa:relatesto>uuid:3002e928-3ec7-1ec7-8002-6ae2ccb7d000</wsa:relatesto>
  <wsa:messageid>uuid:3002ffb9-3ec7-1ec7-8005-6ae2ccb7d000</wsa:messageid>
 </s:header>
 <s:body>
  <s:fault>
   <s:code>
    <s:value>s:Receiver</s:value>
    <s:subcode>
     <s:value>wsman:TimedOut</s:value>
    </s:subcode>
   </s:code>
   <s:reason>
    <s:text xml:lang="en">The operation has timed out.</s:text>
   </s:reason>
  </s:fault>
 </s:body>
</s:envelope>

Renew a Subscription

If the returned subscription Identifier is uuid: 26dca9cb-3ec7-1ec7-8002-6ae2ccb7d000, renew this subscription to 200 seconds.

wsman renew -i uuid:26dca9cb-3ec7-1ec7-8002-6ae2ccb7d000 \
-r 200 \
-h localhost -u wsman -p secret

Unsubscribe a subscription

If the returned subscription Identifier is uuid: 26dca9cb-3ec7-1ec7-8002-6ae2ccb7d000, renew this subscription to 200 seconds.

wsman unsubscribe -i uuid:569f6af6-3ec7-1ec7-8002-6ae2ccb7d000 \
-h localhost -u wsman -p secret

Demonstrate that a subscription is terminated if there is no acknowledgment from event sink.

If the delivery mode of a subscription is pushwithack or events, no acknowledgement from event sink will cause it to be terminated

  • Terminate wseventsink
  • Subscribe a subscription with events delivery mode and 2 seconds heartbeat
  • In 2 seconds, if we try to renew it or unsubscribe it, we will get failure response.
⚠️ **GitHub.com Fallback** ⚠️