我在SaltStack中编写了一个自定义运行器来对saltmaster执行一些操作.然而,我无法调用跑道内的柱子.

例如,秘密存储在柱顶中参照盐分管理器id的柱子中.

prd:
    'my_saltmaster':
        - match: pcre
        - salt_secrets

这就是我试过的

import salt.runner
import logging

log = logging.getLogger(__name__)

runner = salt.runner.Runner(__opts__)
secret = runner.cmd(fun='salt.cmd', arg=['pillars.get', 'my_secret'])
log.info(f"my_secret = {secret}")

输出

my_secret =

我已经判断了官方源代码,但没有找到任何足智多谋的东西.如果你能对此有所了解,那就太好了.

推荐答案

如果您想要调用模块函数salt.cmd,您还应该传递所需的kwarg with_pillar以支持渲染柱,如官方doc中所述

您可能还希望将参数更正为pillar,而不是pillars

secret = runner.cmd(fun='salt.cmd', arg=['pillar.get', 'my_secret'],  kwargs={"with_pillar": True})

然而,我不喜欢这种方法,原因有两个:

  1. 它假设您的saltmaster的id与您在top.sls中目标的minion id匹配,这是非常不可能的,因为主的id的后缀是_master和运行它的主机的hostname(默认情况下).

  2. 非常笨重,而且很贵.为什么?因为它不仅首先调用Runner客户端,然后该客户端调用Runner salt模块,然后Runner salt模块最终调用pillar模块!

更好的方法是直接导入和使用pillar模块,如下所示,这样可以省go 大量昂贵的操作:

import salt.pillar
import salt.runner
import logging

log = logging.getLogger(__name__)

runner = salt.runner.Runner(__opts__)

master_id = "my_saltmaster"
grains = None # specify any grain if required to render your top.sls

# Load required pillars
# deepcopy because we don't want to modify the actual __opts__
opts = copy.deepcopy(__opts__)
opts['pillar'] = salt.pillar.get_pillar(
    opts,
    grains,
    master_id,
    saltenv=opts['saltenv'],
    pillarenv=opts.get('pillarenv')).compile_pillar()

# extract required secret key from the pillar
my_secret = opts['pillar'].get('my_secret', None)
log.info(f"my_secret = {my_secret}")

阅读有关pillar模块代码here的更多信息:)

Python相关问答推荐

numba jitClass,记录类型为字符串

Pandas 有条件轮班操作

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

在Python Attrs包中,如何在field_Transformer函数中添加字段?

如何列举Pandigital Prime Set

优化器的运行顺序影响PyTorch中的预测

实现自定义QWidgets作为QTimeEdit的弹出窗口

如何保持服务器发送的事件连接活动?

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

* 动态地 * 修饰Python中的递归函数

Polars将相同的自定义函数应用于组中的多个列,

如何找出Pandas 图中的连续空值(NaN)?

我对这个简单的异步者的例子有什么错误的理解吗?

如何在Gekko中处理跨矢量优化

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

python的文件. truncate()意外地没有截断'

有没有一种方法可以在朗肯代理中集成向量嵌入

如何将列表从a迭代到z-以抓取数据并将其转换为DataFrame?

如何在PYTHON中向单元测试S Side_Effect发送额外参数?