Contents |
BOSS is a workflow orchestrator, a system that can be configured to automate your workflow requirements; it interacts with the OBS and with people and systems around it to apply your workflow steps. For more BOSS related general information, see Infrastructure/BOSS.
BOSS Participant is the actual actor in BOSS architecture. Participant wraps other systems and services related to software development, quality assurance and integration, allowing BOSS to interact with different parties in automated way.
BOSS Participant action explained in three simple steps:
BOSS participant is written in Python language (other bindings will be available later). Following code snippets are from Notifier Participant (see chapter Example Code).
The participant's name should give an indication of the function it does, usually in the form noun_verb.py
You need to install two libraries:
* AIR: An RPC library used by BOSS * route-amqp-pyclient : The Python client library for Ruoute::AMQP
These libraries are open source and the code is published on gitorious :
* http://meego.gitorious.org/meego-infrastructure-tools/air * http://meego.gitorious.org/meego-infrastructure-tools/ruote-amqp-pyclient
They are also packaged for OpenSuse ( and Debian soon ) on OBS https://build.opensuse.org/project/show?project=Maemo%3AMeeGo-Infra
Once you have these libraries installed, you need to import them in your participant like this :
from RuoteAMQP.workitem import Workitem from RuoteAMQP.participant import Participant
The parent class Participant defined in participant.py of the route-amqp-pyclient package takes care of most of the details needed to create a participant. You just need to subclass it and define a "consume" member function.
The received workitem is stored as an attribute, it contains the information that was passed from previous steps in the workflow. Usually you would read the workitem, do some processing, and then store results in the workitem.
That's all there is to it, the parent class will take care of putting the workitem back on the amqp queue.
class NotifierParticipant(Participant):
def consume(self):
"""
look at self.workitem
do some work
write some results to self.workitem
"""
To register your participant you need to have : a queue name, amqp host, and probably usrename and password for amqp authentication.
if __name__ == "__main__":
print "Notifier participant running"
p = NotifierParticipant(ruote_queue="notifier", amqp_vhost="ruote-test")
p.register("notifier", {'queue':'notifier'})
p.run()
See following participants for example implementation: [notifier_participant.py] [build_ks_participant.py]