我遇到的问题是让我的用户数据脚本读取在执行脚本之前设置的环境变量。我正在使用Vagrant进行测试。
所以我在Vagrantfile中有这一行......
config.vm.provision "shell", path: "bin/vagrant/build.sh"
...指向配置脚本。该脚本包含加载cloud-init所需的所有内容,如here所述。
在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
内提供环境变量?
答案 0 :(得分:0)
该变量已添加到/etc/environment
,因此当您进入框中时,您应该能够看到该值,但是当脚本尚未可用时,您需要为此创建一个新会话
除了您目前正在做的事情之外,您还可以执行以下操作之一:
直接导出脚本中的变量SOME_PATH
,以便在执行user-data.sh
source /etc/environment
(添加变量后),以便文件中所做的更改将直接生效。