我想知道如何使用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_grains
和salt '*' 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/