我正在尝试从添加到实例元数据的脚本中设置环境变量。我使用以下命令从文件中添加了元数据:
gcloud 计算实例 add-metadata server-1 --metadata-from-file file=~/meta.sh
脚本是
#!/bin/sh
export SERVER="ide"
当我重新启动服务器时似乎什么也没做
--metadata-from-file 标志从指定文件中读取指定元数据键的值。在您的示例中,您将 ~/meta.sh 的内容分配为元数据数据键“文件”的值。
为了对“文件”做一些事情,您需要从实例(server-1)中读取它的值并对其进行操作。在实例生命周期的特定时间,计算引擎会使用一些特殊的元数据键。例如,“启动脚本”是在启动期间读取和执行的密钥。我想你打算使用这把钥匙。所以,试试这个:
gcloud compute instances add-metadata "server-1" --metadata-from-file startup-script=~/meta.sh
有关元数据使用的更多详细信息,请运行:
gcloud compute instances add-metadata --help
或去这里:
6岁的问题,但供自己和他人将来参考:
在启动脚本中设置环境变量似乎不起作用,但您可以将它们写入您的.bashrc
- 在我的示例中,我将它们设置为:
gcloud compute instances add-metadata etl-pipelines --metadata startup-script='#! /bin/bash
echo "
export USER='${USER}'
export PASSWORD='${PASSWORD}'
" >> /home/USERNAME/.bashrc
更好的方法当然是检查该字符串是否已经插入到 VM 中,但这对我来说无关紧要,因为无论如何我都会很快杀死 VM。
或者,在这个 SO answer中,描述了如何让用户curl
直接从元数据中获取环境变量,但我还没有进一步研究它。