commit | 77d0a879e16b30a9a7643e34eadf7dd21c0421fe | [log] [tgz] |
---|---|---|
author | Lionel Villard <villard@us.ibm.com> | Fri Nov 30 14:49:52 2018 -0500 |
committer | Lionel Villard <villard@us.ibm.com> | Fri Nov 30 15:39:49 2018 -0500 |
tree | a2159e195b1f0429a49b24ef9a90569c22c0f073 | |
parent | 4f6074d6e363220689de1c3d14e73575114a18ca [diff] |
chore: fix travis
This repository provides a Python library for Composer. For convenience, the Composer documentation is repeated below using Python bindings instead of JavaScript.
Composer is a new programming model for composing cloud functions built on Apache OpenWhisk. With Composer, developers can build even more serverless applications including using it for IoT, with workflow orchestration, conversation services, and devops automation, to name a few examples.
This repository includes:
You need python3.6 installed on your system.
$ git clone https://github.com/ibm-functions/composer-python.git $ cd composer-python $ pip3 install -e . $ pycompose -h usage: pycompose composition.py command [flags] $ pydeploy -h usage: pydeploy composition composition.json [flags]
Composer is distributed on PyPi. To install this package, use pip
:
$ pip3 install ibm-functions-composer
Shell embeds the Composer package, so there is no need to install Composer for Python explicitly when using Shell.
A composition is typically defined by means of a Python expression as illustrated in samples/demo.py:
import composer def main(): return composer.when( composer.action('authenticate', { 'action': lambda args: { 'value': args['password'] == 'abc123' } }), composer.action('success', { 'action': lambda args: { 'message': 'success' } }), composer.action('failure', { 'action': lambda args: { 'message': 'failure' } }))
Compositions compose actions using combinator methods. These methods implement the typical control-flow constructs of a sequential imperative programming language. This example composition composes three actions named authenticate
, success
, and failure
using the composer.when
combinator, which implements the usual conditional construct. It take three actions (or compositions) as parameters. It invokes the first one and, depending on the result of this invocation, invokes either the second or third action.
One way to deploy a composition is to use the pycompose
and pydeploy
commands:
pycompose demo.py > demo.json pydeploy demo demo.json -w
ok: created /_/authenticate,/_/success,/_/failure,/_/demo
The pycompose
command compiles the composition code to a portable JSON format. The pydeploy
command deploys the JSON-encoded composition creating an action with the given name. It also deploys the composed actions if definitions are provided for them. The -w
option authorizes the deploy
command to overwrite existing definitions.
The demo
composition may be invoked like any action, for instance using the OpenWhisk CLI:
wsk action invoke demo -p password passw0rd
ok: invoked /_/demo with id 4f91f9ed0d874aaa91f9ed0d87baaa07
The result of this invocation is the result of the last action in the composition, in this case the failure
action since the password in incorrect:
wsk activation result 4f91f9ed0d874aaa91f9ed0d87baaa07
{ "message": "failure" }
This invocation creates a trace, i.e., a series of activation records:
wsk activation list
activations fd89b99a90a1462a89b99a90a1d62a8e demo eaec119273d94087ac119273d90087d0 failure 3624ad829d4044afa4ad829d40e4af60 demo a1f58ade9b1e4c26b58ade9b1e4c2614 authenticate 3624ad829d4044afa4ad829d40e4af60 demo 4f91f9ed0d874aaa91f9ed0d87baaa07 demo
The entry with the earliest start time (4f91f9ed0d874aaa91f9ed0d87baaa07
) summarizes the invocation of the composition while other entries record later activations caused by the composition invocation. There is one entry for each invocation of a composed action (a1f58ade9b1e4c26b58ade9b1e4c2614
and eaec119273d94087ac119273d90087d0
). The remaining entries record the beginning and end of the composition as well as the transitions between the composed actions.
Compositions are implemented by means of OpenWhisk conductor actions. The documentation of conductor actions explains execution traces in greater details.