我正在编写一些长时间运行的 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-events和 http://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/