1

スクリプトの実行前に設定された環境変数をユーザー データ スクリプトで読み取る際に問題が発生しています。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か?

4

1 に答える 1

3

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

現在行っていることに加えて、次のいずれかを実行できます。

  1. スクリプト内の変数を直接エクスポートして、SOME_PATH実行時に使用できるようにしますuser-data.sh

  2. source /etc/environment(変数を追加した後)ファイルに加えられた変更は直接有効になります。

于 2016-05-17T07:36:31.733 に答える