python - salt 定制 Cereal

标签 python salt-stack

我正在尝试编写自定义 Cereal 。 我把这段代码放在 /etc/salt/grains

#!/usr/bin/env python
def function():
    grains = {}
    grains['test'] = "test"
    return grains

为了测试它,我创建了这个脚本:

import salt.config
import salt.loader
__opts__ = salt.config.minion_config('/etc/salt/minion')
__grains__ = salt.loader.grains(__opts__)
test = __grains__['test']
print test

我遇到了这个错误:

dirs = __grains__['test']
KeyError: 'test'

这有什么问题?

最佳答案

/etc/salt/grains 是 salt 存储由 salt targetid grains.setval 和 friend 设置的 grains 的地方。它是一个平面的静态 yaml 文件。

通过 python 自定义 grains 进入/srv/salt/_grains,然后使用 salt\* saltutil.sync_grains 同步到 minions。这是您应该放置 Python 脚本的地方。

这是一个类似于您的代码的示例,其中包含日志记录和验证:

$ cat /srv/salt/_grains/spam.py 
#!/usr/bin/env python
import logging
log = logging.getLogger(__name__)

def function():
    log.trace('Setting grains["spam"] to "eggs"')
    grains = {}
    grains['spam'] = "eggs"
    return grains

$ sudo salt lead saltutil.sync_grains
lead:
    - grains.spam

$ sudo salt-call grains.item spam -l trace 2>&1 \
  | egrep '^local|spam'
[TRACE   ] Added spam.function to grain
[TRACE   ] Setting grains["spam"] to "eggs"
local:
  spam: eggs

$ cat /tmp/spam_taster.py 
#!/usr/bin/env python
import salt.config
import salt.loader
__opts__ = salt.config.minion_config('/etc/salt/minion')
__grains__ = salt.loader.grains(__opts__)
spam = __grains__['spam']
print spam

$ python /tmp/spam_taster.py 
eggs

关于python - salt 定制 Cereal ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27376313/

相关文章:

python - iteritems 上的 Pillar jinja 错误

python - 特定路由的 Flask 中间件

python - 如何获取时间 17 :00:00 today or yesterday?

python 碰撞检测?

python - arcpy 获取要素数据集中要素类的数据库路径

powershell - Saltstack等待文件出现

python - 解释 GridSearchCV 中的岭回归

python - 使用 python 和 saltstack 错误

python - Saltstack master 找不到执行模块,说不可用

linux - 在 Thunar 中远程创建自定义操作