我想知道如何使用Environmental Variables正确访问SaltStack Grains

我一直在遵循documentation,但无法使其正常工作。这是我的代码:

/srv/salt/_grains/env_vars.py

import os

def env_vars():
    return {'T17_SECRET_KEY': os.environ.get('T17_SECRET_KEY','')}


然后我运行salt '*' saltutil.sync_grains

我得到这个回应:

salt:
    - grains.env_vars


但是当我运行salt '*' grains.items时,它显示:

salt:
    ----------
    SSDs:
    T17_SECRET_KEY:
    # other vars ...


因此键在那儿,但值不在那儿。当我从Python命令行运行os.environ.get('T17_SECRET_KEY','')时,该值在那里。

是什么原因造成的?

编辑

我改变了这个:

/srv/salt/_grains/env_vars.py

from salt.modules import environ

def env_vars():
    return {'T17_SECRET_KEY': environ.get('T17_SECRET_KEY','')}


当我从Python命令行执行此函数时,它返回Key:Value,但是在运行salt '*' saltutil.sync_grainssalt '*' grains.items时仍然看不到值,只有键。

我什至运行salt '*' state.highstate重新加载所有内容。

这可能是由其他配置引起的吗?

最佳答案

os.environ访问恰好执行代码的(随机)Salt奴才的处理环境;如果要访问当前盐处理过程的环境,则需要使用以下模块:salt.modules.environ

原因是salt可以在任何计算机上运行代码。每个环境可能会有所不同。因此,除非您可以确保代码在特定的Minion上运行并且该Minion上的环境正确,否则您的代码将无法工作。

模块salt.modules.environ使您可以访问提交命令时salt所构建的虚拟过程环境。

要正确访问salt.modules.environ,请通过添加以下文件使用salt.states.environ

/srv/salt/_grains/env_vars.py

from salt.modules import environ

def env_vars():
    return {'T17_SECRET_KEY': environ.get('T17_SECRET_KEY','')}


/srv/salt/environ/init.sls

T17_SECRET_KEY:
    environ.setenv:
        - name: T17_SECRET_KEY
        - value: <secret_key_value_here>
        - update_minion: True


然后运行此命令以同步新添加的环境变量:

salt '*' state.sls environ

salt '*' saltutil.sync_grains


要验证,可以运行以下代码:

salt '*' grains.get T17_SECRET_KEY

关于python - 使用SaltStack Cereal 访问环境变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29652944/

10-16 09:47