mitogen
mitogen copied to clipboard
Cannot call a service on the node it was declared
No Ansible, pure mitogen. Also affects 0.2.x.
If I declare a simple service on the master node, I can call it in slave nodes but not on the master node :
import mitogen.utils
import mitogen.master
import mitogen.service
class EchoService(mitogen.service.Service):
@mitogen.service.expose(policy=mitogen.service.AllowAny())
@mitogen.service.arg_spec(spec={
'message': str
})
def echo(self, message):
return message[::-1]
def test_echo(service_context):
return service_context.call_service(service_name=EchoService, method_name="echo", message="hello")
def main():
mitogen.utils.log_to_file(level="DEBUG")
broker = mitogen.master.Broker()
try:
router = mitogen.master.Router(broker)
pool = mitogen.service.Pool(router, services=[
EchoService(router),
])
# print(router.ssh(hostname="localhost", username="root").call(test_echo, service_context=router.myself())) # works
print(router.myself().call(test_echo, service_context=router.myself())) # don't work
# test_echo(service_context=router.myself()) # don't work either, but not sure it's supposed to
finally:
broker.shutdown()
broker.join()
if __name__ == "__main__":
main()
Traceback (most recent call last):
File "/opt/data/tmp/mtest/test.py", line 33, in <module>
main()
File "/opt/data/tmp/mtest/test.py", line 25, in main
print(router.myself().call(test_echo, service_context=router.myself())) # don't work
File "/opt/data/tmp/mtest/lib/python3.9/site-packages/mitogen/parent.py", line 2021, in call
return self.default_call_chain.call(fn, *args, **kwargs)
File "/opt/data/tmp/mtest/lib/python3.9/site-packages/mitogen/parent.py", line 1978, in call
return receiver.get().unpickle(throw_dead=False)
File "/opt/data/tmp/mtest/lib/python3.9/site-packages/mitogen/core.py", line 1181, in get
msg._throw_dead()
File "/opt/data/tmp/mtest/lib/python3.9/site-packages/mitogen/core.py", line 921, in _throw_dead
raise ChannelError(self.data.decode('utf-8', 'replace'))
mitogen.core.ChannelError: invalid handle