使用 SaltStack Grains 访问环境变量

Access Environmental Variables with SaltStack Grains

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

我一直在关注 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 命令行执行此函数时,它 returns Key:Value,但当 运行 宁 salt '*' saltutil.sync_grainssalt '*' grains.items 我看不到值,只能看到键。

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

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

os.environ 访问恰好执行代码的 (运行dom) Salt minion 的进程环境;如果要访问当前salt进程的环境,需要改用这个模块:salt.modules.environ

这样做的原因是 salt 可以 运行 您的代码在任何一台计算机上。他们每个人的环境可能会有所不同。因此,除非您可以确保您的代码在某个 minion 上 运行ning 并且该 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