python - salt 执行模块中的产量以在执行期间返回状态

标签 python yield salt-stack

我正在编写一些长时间运行的 salt 执行模块,并希望监视这些模块的执行状态。例如,我使用该模块复制一个巨大的文件,大小为 TB,这可能需要几个小时。是否可以使用“yield”关键字返回进度,然后通过 salt-api 或 salt-run 查询该进度?这是一个例子:

from time import sleep
def longrunningmodule():
   yield 'Progress: 0%'
   sleep(100)
   yield 'Progress: 50%'
   sleep(100)
   yield 'Progress: 100%'

在此处运行 salt 模块:

$ salt 'node1' mytest.longrunningmodule --async
Executed command with job ID: 20141015143132465443

我可以使用此作业 ID 定期查询作业以检查进度吗?

最佳答案

我找到了一种间接的方法来做到这一点。虽然yield不会将结果回发给salt master,但salt事件总线可用于发布消息,而消息又可以通过salt-api访问。此处描述了 salt 事件系统http://docs.saltstack.com/en/latest/topics/event/index.html 。更具体地说,这里提到了从 minion 到 master 触发事件:

http://docs.saltstack.com/en/latest/topics/event/index.html#firing-eventshttp://docs.saltstack.com/en/latest/topics/event/index.html#firing-events-from-code

目前第二种方法有问题并且不起作用。这在https://github.com/saltstack/salt/issues/8849中有描述。 。关于同一问题的评论之一描述了另一种方法:https://github.com/saltstack/salt/issues/8849#issuecomment-35973524

关于python - salt 执行模块中的产量以在执行期间返回状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26385494/

相关文章:

python - 退出多处理脚本

Python列表理解和 'not in'

ruby-on-rails - 为什么 yield 不将结果传递给 block (Rails)?

salt-stack - 我如何在连接时提供 salt minion

Vagrant部署Salt master

python - 列表Python中的重复元素

python - seaborn 在 sublime 中的问题

javascript - 在 node.js 中使用生成器函数 next() 作为回调

ruby-on-rails - Ruby on Rails 将引用传递给 yield(模板)

Mysql 为任何主机授予 root 权限