如何在 python 脚本中使用 Saltstack 的运行器接口?

How to use Saltstack's runner interfaces in python scripts?

我正在尝试从 python 脚本中使用 salt-运行 接口,例如

#!/usr/bin/env python3

import salt.runners.jobs
x = salt.runners.jobs.list_job("20220118143114946703")
print(x)

所以我想做的是获取有关特定作业 ID 的信息。 但是这样做会导致错误:

Traceback (most recent call last):
  File "./foo.py", line 7, in <module>
    x = salt.runners.jobs.list_job("20220118143114946703")
  File "/usr/lib/python3/dist-packages/salt/runners/jobs.py", line 196, in list_job
    mminion = salt.minion.MasterMinion(__opts__)
NameError: name '__opts__' is not defined

我查看了 /usr/lib/python3/dist-packages/salt/runners/jobs.py,以及其他一些似乎与 salt-run 相关的库,但我无法确定 __opts__ 应该在哪里from/how 可以是 provided/loaded...

有没有人有让脚本正常工作的提示?

实际上我最终想要实现的是在 saltstack 反应堆 中查询此作业信息 ,它对作业 returns 做出反应...我实际上在那里遇到了同样的错误......但是如果在“编写反应堆”的情况下可以以 different/better 的方式查询所需的信息,我也很乐意听到它。 :)

-> 我试图获取的具体信息是开始工作的“用户”:

salt-run jobs.list_job 20220118143114946703
...
User:
    sudo_hfi
...
{% set jid = data['jid'] %}
{% set user = salt['saltutil.runner']('jobs.list_job',arg=[jid])['User'] %}

似乎在从返回的 jid 中获取用户的反应堆中工作得很好。这将使您的其他脚本更容易,因为您可以在 jinja 中获取信息并将其传递给您的自定义脚本,而不是试图直接在 api 中翻找。无论哪种方式,这很可能很可能在此之前很久就被分流到编排。反应堆是事件系统中的阻塞动作。

至于直接问题。见 https://docs.saltproject.io/en/latest/ref/clients/index.html#salt-s-opts-dictionary