gidyn
gidyn

Reputation: 43

Execute an OpenWhisk Action from within a Python Action on Bluemix

I've written a Python action on Bluemix OpenWhisk, and I need to call another action (actually a binding to a public package) from within this action. A sequence won't do it, because I need to call it a varying number of times with different parameters depending on the input.

How to invoke openwhisk action within openwhisk platform on bluemix? mentions how to do it from JavaScript, but the OpenWhisk package doesn't seem to be available for Python.

Upvotes: 1

Views: 752

Answers (1)

James Thomas
James Thomas

Reputation: 4339

Actions can be invoked using a HTTP request to the platform API. The Python runtime in OpenWhisk includes the requests library for making HTTP calls.

Here's an example of an action that calls another (child) in the same namespace.

import os 
import requests

APIHOST = os.environ.get('__OW_API_HOST')
NAMESPACE = os.environ.get('__OW_NAMESPACE')
USER_PASS = os.environ.get('__OW_API_KEY').split(':')

def main(params):
    action = 'child'
    url = APIHOST + '/api/v1/namespaces/' + NAMESPACE + '/actions/' + action
    response = requests.post(url, data=params, params={'blocking': 'true'}, auth=(USER_PASS[0], USER_PASS[1]))
    print(response.json())

    return {"text": "invoked!"}

Swagger documentation for full API is available here.

There is an open issue to create a Python client library to make this easier.

Upvotes: 2

Related Questions