0

我正在使用 Mcollective 2.2.x,并根据教程编写了一个代理。

名为'hello'的代理有一个名为'speak'的动作,在'speak'动作中,它通过XML-RPC调用python方法,代码如下:

Mcollective 的 Ruby 代理 <--

require "xmlrpc/client"

module MCollective
  module Agent
    class Hello<RPC::Agent
      # Basic system inventory, same as the basic discovery agent
      action "speak" do

        server = XMLRPC::Client.new('localhost', nil, 8888)
        s = server.call('testls', request[:msg])

        reply[:resultmsg] = s

      end

    end

  end
end

-->

Python XML-RPC 代码:

<--

from SimpleXMLRPCServer import SimpleXMLRPCServer

def testls(msg):
    print(msg)
    return msg

server = SimpleXMLRPCServer(('localhost',8888))
server.register_function(testls)
try:
    server.serve_forever()
finally:
    server.server_close()

-->


这是我的问题,在 mcollective 运行的情况下,我使用以下命令调用 hello 代理:

mco rpc hello speak msg='hello' -v 

然后,Mcollective 进程因错误“堆栈级别太深”而崩溃,错误位置是“$mcollective_path/lib/mcollective/agents.rb”第 132 行,代码为“yield(replies) #这是一切崩溃的地方”

但是如果我第一次运行这个命令:

mco rpc hello speak msg='hello' -v --nr"(没有处理结果,只有一次)

然后 mco rpc hello speak msg='hello' -v`

现在一切正常,永远不会发生错误

我不知道为什么会这样,这让我发疯

如果有人可以提供帮助,将不胜感激!

4

0 回答 0