スクリプトの実行前に設定された環境変数をユーザー データ スクリプトで読み取る際に問題が発生しています。Vagrant を使用してこれをテストしています。
だから私は私のVagrantfileにこの行を持っています...
config.vm.provision "shell", path: "bin/vagrant/build.sh"
... プロビジョニング スクリプトを指します。スクリプトには、ここで概説されているように、cloud-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
今、私はこのようSOME_PATH
に内部に反響するセリフを持ってい/vagrant/bin/vagrant/user-data.sh
ます...
#!/bin/bash
echo $SOME_PATH
...そして、実行するvagrant up
と、何も出力されません!
内部で環境変数を使用できるようにする方法はありますuser-data.sh
か?