1

我有一個cloud-init bash腳本,它從S3拉取一個zip文件,解壓縮它,然後運行一個包含在其中的Ansible操作手冊。現在,我還有環境變量烘焙到/etc/environment,Ansible playbook使用lookup('env')來獲取這些值。當通過bash運行時,它可以正常工作,既可以作爲主用戶,也可以作爲根用戶運行但是當它通過cloud-init啓動時,變量不會通過。如何將環境變量導入由cloud-init運行的Ansible腳本?

在我的bash腳本中,第一行是source /etc/environment,我可以很好地迴應它們。只有當Ansible playbook執行lookup時,它纔會失敗。有趣的是,我可以強制變量像這樣:

FOO=$FOO BAR=$BAR ansible-playbook -c local ...

和工程。有沒有人有任何想法我可以解決如何將變量硬編碼到劇本中,並讓它們按預期工作,即從/etc/environment拉出?

編輯:這裏的雲INIT:

#!/bin/bash 
source /etc/environment 
doit() { 
    aws s3 cp s3://my/scripts/dev-s3-push.tar.gz /tmp/my.tar.gz 
    mkdir -p /app/deploy 
    tar -C /app/deploy -zxvf /tmp/my.tar.gz 
    cd /app/deploy 
    FOO=$FOO BAR=$BAR ansible-playbook -i "localhost," -c local run.yml 
} 
doit 

這是加入到AWS中的用戶數據部分。

+0

你可以分享你的雲啓動腳本嗎? – ydaetskcoR

+0

@ydaetskcoR,我在上面添加了它。謝謝! – greggilbert

+0

如果將'source'放入'doit'中,會發生什麼? (我認爲這是一個'出口'問題。) –

回答

1

好的,所以我想通了。 lookup()在下面使用os.getenv,我發現其他一些與os.getenv有關的問題沒有正確返回。

問題是,在我的/etc/environment,我把它作爲FOO=bar,它應該是export FOO=bar。將所有值更改爲可以使其工作。我在雲初始化函數中仍然有source行,但我認爲現在已經解決了。

相關問題