2016-05-17 12 views
0

私のユーザーデータスクリプトがスクリプトの実行前に設定されている環境変数を読み込むのに問題があります。私はバゲントを使ってこれをテストしています。プロビジョニング・スクリプトを指すユーザーデータスクリプト内の環境変数

だから私は私のVagrantfileにこのラインを持っている...

config.vm.provision "shell", path: "bin/vagrant/build.sh" 

...。スクリプトには、hereのように、クラウド-initをロードするために必要なものがすべて含まれています。おそらく世界的に環境変数を利用できるように

build.shインサイド

、私はラインを持っている...

echo "SOME_PATH=/some/path" >> /etc/environment 

...。

完全なファイル、あなたが興味を持っている場合:今

echo "SOME_PATH=/some/path" >> /etc/environment 

# Check to see if we have done this already. 
if [ -f /.vagrant_build_done ]; then 
    echo "Found, not running." 
    exit 
fi 

# Make the box think it hasn't init-ed yet. 
rm -rf /var/lib/cloud/instance/* 
rm -rf /var/lib/cloud/seed/nocloud-net/user-data 

# Seed our own init scripts 
cat << 'END_OF_FILE_CONTENTS' > /var/lib/cloud/seed/nocloud-net/user-data 
Content-Type: multipart/mixed; boundary="===============apiserversStackMultipartMessage==" 
MIME-Version: 1.0 

# Beginning of our user-data script. 
--===============apiserversStackMultipartMessage== 

#include 
/vagrant/bin/vagrant/user-data.sh 

--===============apiserversStackMultipartMessage==-- 
END_OF_FILE_CONTENTS 
# End of our user-data script. 

# Re-run cloud-init. 
cloud-init init 
cloud-init modules --mode init 
cloud-init modules --mode config 
cloud-init modules --mode final 

# Do not let this run again. 
touch /.vagrant_build_done 

、私は...このような/vagrant/bin/vagrant/user-data.sh内部SOME_PATHをエコーラインを持っている

#!/bin/bash 

echo $SOME_PATH 

...と私が実行したときvagrant up、何も印刷されません!

user-data.shの中で環境変数を使用できるようにする方法はありますか?

答えて

0

変数が/etc/environmentに追加されていますので、sshを入力すると値が表示されるはずですが、まだスクリプトが使用できないときに値を確認できるはずです。このために新しいセッションを作成する必要があります。

あなたが現在やっていることの上に、次のいずれかを実行することができます

:あなたはuser-data.sh

  • source /etc/environmentを実行したとき

    1. 直接その利用できるようにスクリプト内の変数SOME_PATHをエクスポート(変数を追加した後)、ファイルの変更が直接有効になります。