一种在 IBM OpenWhisk 中配置和调用操作的简单方法(2)
- UID
- 1066743
|
一种在 IBM OpenWhisk 中配置和调用操作的简单方法(2)
测试操作
创建操作后,发出 wsk action invoke 命令来测试它:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| wsk -v action invoke /whisk.system/samples/echo -p message hello --blocking --result
{'apihost': 'openwhisk.ng.bluemix.net', 'namespace': 'user@example.com_dev', 'clibuild': '2016-
05-24T09:54:44-05:00', 'apiversion': 'v1'}
========
REQUEST:
POST
https://openwhisk.ng.bluemix.net/api/v1/namespaces/whisk.system/actions/samples/echo?
blocking=true&result=true
Headers sent:
{
"Authorization": "Basic
S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3jEs7Ii",
"Content-Type": "application/json"
}
Body sent:
{"message": "hello"}
--------
RESPONSE:
Got response with code 200
Body received:
{
"message": "hello"
}
========
{
"message": "hello"
}
|
openWhiskLib.py 简介现在您已学会手动发出所有命令,可尝试使用新 Python 脚本简化命令的发出。
迄今为止,已开发和测试了以下函数:
- createAction(filename, action)
- deleteAction(action)
- invokeAction(action)
- invokeEcho(message)
- listActions()
- listNamespaces()
已在 GitHub 上公开。
要在您的机器上使用 openWhiskLib,首先定义 3 个环境变量:
OPENWHISK_APIHOST从您的 .wskprops 文件获取此值OPENWHISK_NAMESPACE从您的 .wskprops 文件获取此值OPENWHISK_TOKEN通过发出任何详细的 wsk 命令来获取此值,比如:wsk -v action invoke /whisk.system/samples/echo -p message hello --blocking --result
|
例如,在您的 Linux 笔记本电脑上,可以设置我所设置的值(为了保护隐私,我的个人数据已模糊化):
1
2
3
4
5
| export OPENWHISK_APIHOST="openwhisk.ng.bluemix.net"
export OPENWHISK_NAMESPACE="username@example.com_dev"
export
OPENWHISK_TOKEN="S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3j
Es7Ii"
|
为了方便,您可以在 bash 脚本中定义这些值。可以在 中复制和编辑此示例:bin/setenv.sh
5
使用 openWhiskLib.py 创建操作
要创建操作,首先要在您的机器上创建一个文件,其中包含您希望上传和执行的 JavaScript 代码段。例如,您可以使用与我上面列出的示例类似的代码:goodday.js:
1
2
3
| function main() {
return {payload: 'good day'};
}
|
然后从 Python 解释器调用 openWhiskLib 函数 createAction()。例如:
定义环境变量(使用一个点):
. setenv.sh
调用 Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from openwhisklib import *
>>> createAction( 'goodday.js', 'goodday')
Issuing put request:
url=https://openwhisk.ng.bluemix.net/api/v1/namespaces/user@example.com_dev/actions/goodday
payload: {'exec': {'kind': 'nodejs', 'code': "function main() {\n return {payload: 'good day'};\n}\n"}}
headers={'content-type': 'application/json', 'Authorization': 'Basic
S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3jEs7Ii'}
Response status_code=200
{
"name": "goodday",
"publish": false,
"annotations": [],
"version": "0.0.1",
"exec": {
"kind": "nodejs",
"code": "function main() {\n return {payload: 'good day'};\n}\n"
},
"parameters": [],
limits": {
"timeout": 60000,
"memory": 256
},
"namespace": "user@example.com_dev"
}
<Response [200]>
>>>
|
6
使用 openWhiskLib.py 调用操作
最后,使用 openWhiskLib.py 从 Bluemix 上的 OpenWhisk 调用该代码段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| >>>
>>> invokeAction('goodday')
Issuing request:
url=https://openwhisk.ng.bluemix.net/api/v1/namespaces/user@example.com_dev/actions/goodday?
blocking=true&result=false payload={} headers={'content-type': 'application/json', 'Authorization':
'Basic S3sjGo6dKeKSIIRENS135xOsT3jEs7IiS3sjGo6dKeKSIIRENS135xOsT3jEs7Ii'}
Response status_code=200
{
"name": "goodday",
"subject": "user@example.com",
"activationId": "f81398a389734d018f4c92fbf59e2dbe",
"publish": false,
"annotations": [],
"version": "0.0.1",
"response": {
"result": {
"payload": "good day"
},
"success": true,
"status": "success"
},
"end": 1466083636776,
"logs": [],
"start": 1466083636724,
"namespace": "user@example.com"
}
<Response [200]>
>>>
>>>
|
测试案例和示例代码 中的简单测试案例 (tests/openwhisklib.tests.py) 演示了 openWhiskLib.py 中的每个函数,显示了输入和输出。可以使用他们和您的凭证来确认 OpenWhisk 能够工作正常。 |
|
|
|
|
|