2015-04-15 4 views
1

Я хотел бы знать, как правильно получить доступ к Environmental Variables с помощью SaltStack Grains.Доступ к переменным окружения с зернами SaltStack

Я следил за 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 ... 

Итак, ключ есть, но это не так. Когда я запускаю os.environ.get('T17_SECRET_KEY','') из командной строки Python, значение есть.

Что может быть причиной этого?

EDIT

Я изменил эту:

/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, чтобы перезагрузить все.

Возможно, это связано с другой конфигурацией?

ответ

2

os.environ обращается к среде процесса (случайной) сольной миньон, которая выполняет ваш код; если вы хотите получить доступ к окружающей среде текущего солевого процесса, вам необходимо использовать этот модуль: salt.modules.environ

Причина в том, что соль может запускать ваш код на любом из компьютеров. Окружающая среда, вероятно, будет отличаться для каждой из них. Поэтому, если вы не можете убедиться, что ваш код работает на определенном миньоне, а среда на этом миньоне верна, ваш код не может работать.

Модуль salt.modules.environ предоставляет вам доступ к виртуальной среде процесса, которая создается солью при отправке команды.

Чтобы правильно получить доступ к 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/соль/окружать/INIT ,СЛС

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 
+0

@Aaron_Digulla вы можете увидеть мое редактирование выше ? Я изменил функцию, но я все еще не могу получить доступ к значению переменной среды. Спасибо. –

+0

Как вы устанавливаете 'T17_SECRET_KEY' и где вы это делаете? Вы видите правильное значение, когда вы выполняете 'echo $ T17_SECRET_KEY'? –

+1

@Aaron_Digulla Я добавил свое рабочее решение к вашему ответу. Благодарим вас за помощь. Я не знал о «salt.modules.environ» и не знал бы этого. Благодарю. –

Смежные вопросы