我有一個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中的用戶數據部分。
你可以分享你的雲啓動腳本嗎? – ydaetskcoR
@ydaetskcoR,我在上面添加了它。謝謝! – greggilbert
如果將'source'放入'doit'中,會發生什麼? (我認爲這是一個'出口'問題。) –