尝试遵循指示,我使用此命令在流浪者图像中创建了一个动作(例如,在vagrant ssh之后):
wsk action create ProcessFuzzyMatch /vagrant/ildMicroServices-1.0.jar --main com.xxx.micro.services.ProcessFuzzyMatch
我可以看到它已创建:
wsk action list
actions
/guest/ProcessFuzzyMatch private java
然而,客人并未列为套餐:
wsk package list /whisk.system
packages
/whisk.system/weather shared
/whisk.system/combinators shared
/whisk.system/websocket shared
/whisk.system/watson-translator shared
/whisk.system/samples shared
/whisk.system/watson-speechToText shared
/whisk.system/watson-textToSpeech shared
/whisk.system/slack shared
/whisk.system/github shared
/whisk.system/utils shared
并尝试通过curl调用操作失败并出现身份验证错误,但这似乎与请求标头无关。相反,我猜它与我注册的动作的私有java性质有关。我相信这是因为我无法使用wsk命令显示我已注册的操作的摘要信息:
wsk package get --summary /whisk.system/guest/ProcessFuzzyMatch
error: Unable to get package 'guest/ProcessFuzzyMatch': The requested resource could not be found. (code 364)
首先创建一个包是正确的顺序,然后在注册我的动作时使用该包吗?
感谢您提供任何建议。
答案 0 :(得分:2)
由于您有本地版本,guest
是您的默认命名空间名称。该套餐为default
(又名_
),因为您没有指定一个。您可以使用以下命令查找命名空间的名称:
wsk namespace list
它被标记为私有,因为它是你的,并没有发布到世界各地。
您可以使用以下方式调用您的操作:
wsk action invoke ProcessFuzzyMatch -r
如果你想把你的行动放在名为“" demo"”的名称空间中,你可以使用:
wsk package create demo
wsk action create demo/ProcessFuzzyMatch /vagrant/ildMicroServices-1.0.jar --main com.xxx.micro.services.ProcessFuzzyMatch
您现在可以使用以下方式调用您的操作:
wsk action invoke demo/ProcessFuzzyMatch -r
最后在单独的终端窗口中运行wsk activation poll
有助于查看调用操作时发生的情况。
答案 1 :(得分:1)
您是否尝试在网址中使用/guest/default/ProcessFuzzyMatch
而不是/guest/ProcessFuzzyMatch
The fully qualified name of the action must include its package name, which is "default" if the action is not in a named package.
如果是authentication errors
,您需要使用-H
curl -k -H "Authorization: Basic <encoded value>" https://<host>/api/v1/namespaces/guest/default/ProcessFuzzyMatch
您还可以尝试使用wsk
CLI调用操作,看看它是否被调用。
wsk -i action invoke ProcessFuzzyMatch --result=true
答案 2 :(得分:1)
您没有为您的操作创建包。您创建的默认包中的操作不会显示在包列表中。
此外,您还会在whisk.system
命名空间中创建操作时列出guest
命名空间。
因此,如果您想将操作放在whisk.system
包中,则需要使用该API密钥并首先创建包。
wsk package create mypkg -u <whisk.system key>
wsk action create mypkg/ProcessFuzzyMatch ... -u <whisk.system key>
否则,您可以使用访客密钥获取操作
wsk action get ProcessFuzzyMatch --summary
或同样
wsk action get /guest/ProcessFuzzyMatch --summary
请注意,如果操作没有任何注释,则当前不会生成摘要(请参阅https://github.com/apache/incubator-openwhisk/issues/2270)。
答案 3 :(得分:0)
这个答案是因为关注了所有其他帖子的建议并尝试了不同的方法。花了一段时间,因为我不得不移植所有基于文件的函数来调用Cloudant而且由于要加载的工件的大小以及Java中的附件API的问题,我不得不使用一种解决方法(因为数据字段返回空)。
我尝试使用--web = true来避免安全问题,这让我非常接近。但是,当我收到200响应代码的回复时,有效负载为空(Content-Length:0)。所以,我在-v中使用了wsk调用动作,我能够看到在流浪者虚拟机中如何在本地进行调用,然后能够从虚拟机外部使用它。
基本上,这些是我遵循的步骤: wsk包创建ild 创建我自己的包,它成为/ guest的子包,如命令所示:
wsk package list
/guest/ild
然后我使用gradle基于jar构建创建了我的动作(因此它包含除了gson.JsonObject之外的所有依赖类,因为它已经在运行时环境中)。
wsk action create /guest/ild/ProcessFuzzyMatch /vagrant/ildMicroServices-1.0.jar --main com.xxx.ild.micro.services.ProcessFuzzyMatch --web true
因为我的服务需要一个包含text和workspaceID的JsonObject,所以我在vagrant VM中运行了以下命令:
wsk action invoke -v -br ild/ProcessFuzzyMatch -p "text" "borken window" -p "workspaceID" "bc3d43ab-1529-41c8-8571-b7155e53e3ff"
这显示了正确的反应。通过检查请求标头,我可以看到该动作是如何被引用的,因此我可以创建一个shell脚本,指向VM外部的主机192.168.33.13。
工作shell脚本如下所示:
#! /bin/bash
curl -s -v -k https://192.168.33.13/api/v1/namespaces/guest/actions/ild/ProcessFuzzyMatch?blocking=true \
-H "Authorization: Basic MjNiYzQ2YjEtNzFmNi00ZWQ1LThjNTQtODE2YWE0ZjhjNTAyOjEyM3pPM3haQ0xyTU42djJCS0sxZFhZRnBYbFBrY2NPRnFtMTJDZEFzTWdSVTRWck5aOWx5R1ZDR3VNREdJd1A=" \
-X POST -H "Content-Type: application/json" \
-d '{"text":"borken window","workspaceID":"bc3d43ab-1529-41c8-8571-b7155e53e3ff"}'
假设POST,则不需要-X POST。授权是从我在localhost(在VM中)上运行的版本的头文件中看到的复制而来的,但它是〜/ openwhisk / ansible / files / auth.guest内容的Base64编码(在VM通过&#34; vagrant ssh&#34;命令)。这也可以像使用-u参数一样传递给curl。
理论上,由于在注册操作时使用了--web = true,因此不需要进行身份验证,但我发现从外部调用VM时需要进行身份验证。没有标题,它会返回此错误:
{
"error": "The resource requires authentication, which was not supplied with the request",
"code": 2259
* Connection #0 to host 192.168.33.13 left intact
}
我认为让外部调用工作的关键是在包/操作名称之前提供正确的URI并确保传递了blocking = true参数:
https://192.168.33.13/api/v1/namespaces/guest/actions/
我将对所有其他回复进行投票,因为它们都帮助我弄清楚需要什么。