从 Bluemix 上的 Python 操作中执行 OpenWhisk 操作
Execute an OpenWhisk Action from within a Python Action on Bluemix
我已经在 Bluemix OpenWhisk 上编写了一个 Python 操作,我需要从该操作中调用另一个操作(实际上是对 public 包的绑定)。序列不会这样做,因为我需要根据输入使用不同的参数调用它不同的次数。
从 JavaScript 提到了如何做到这一点,但 OpenWhisk 包似乎不适用于 Python。
可以使用对 platform API. The Python runtime in OpenWhisk includes the requests 库的 HTTP 请求来调用操作以进行 HTTP 调用。
这是调用同一名称空间中的另一个 (child
) 的操作示例。
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!"}
完整 API 的 Swagger 文档可用 here。
有一个 open issue 可以创建一个 Python 客户端库来使这更容易。
我已经在 Bluemix OpenWhisk 上编写了一个 Python 操作,我需要从该操作中调用另一个操作(实际上是对 public 包的绑定)。序列不会这样做,因为我需要根据输入使用不同的参数调用它不同的次数。
可以使用对 platform API. The Python runtime in OpenWhisk includes the requests 库的 HTTP 请求来调用操作以进行 HTTP 调用。
这是调用同一名称空间中的另一个 (child
) 的操作示例。
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!"}
完整 API 的 Swagger 文档可用 here。
有一个 open issue 可以创建一个 Python 客户端库来使这更容易。