2015-04-15 43 views
1

我想知道如何使用SaltStack Grains正確訪問Environmental Variables使用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 ... 

所以關鍵在那裏,但價值不是。當我從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我看不到Value,只有Key。

我甚至跑過salt '*' state.highstate重新載入所有內容。

這是否可能是由其他配置造成的?

回答

2

os.environ訪問恰好執行您的代碼的(隨機)Salt小兵的進程環境;如果你想訪問當前鹽過程的環境,你需要使用這個模塊來代替:salt.modules.environ

這樣做的原因是salt可以在任何一臺計算機上運行你的代碼。他們每個人的環境可能會有所不同。所以,除非你能確保你的代碼運行在某個特定的角色上,並且該角色的環境是正確的,否則你的代碼無法工作。

模塊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 /鹽/ 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 
+0

@Aaron_Digulla你可以在上面看到我的編輯?我改變了功能,但仍然無法訪問環境變量的值。謝謝。 –

+0

你如何設置'T17_SECRET_KEY',你在哪裏做?當你執行'echo $ T17_SECRET_KEY'時,你看到了正確的值嗎? –

+1

@Aaron_Digulla我將我的工作解決方案添加到您的答案中。感謝您對此的幫助。我不知道'salt.modules.environ',並不知道使用它。謝謝。 –