我有一个cloud-init bash脚本,它从S3拉取一个zip文件,解压缩它,然后运行一个包含在其中的Ansible操作手册。现在,我还有环境变量烘焙到/etc/environment
,Ansible playbook使用lookup('env')
来获取这些值。当通过bash运行时,它可以正常工作,既可以作为主用户,也可以作为根用户运行但是当它通过cloud-init启动时,变量不会通过。如何将环境变量导入由cloud-init运行的Ansible脚本?
在我的bash脚本中,第一行是source /etc/environment
,我可以很好地回应它们。只有当Ansible playbook执行lookup
时,它才会失败。有趣的是,我可以强制变量像这样:
FOO=$FOO BAR=$BAR ansible-playbook -c local ...
和工程。有没有人有任何想法我可以解决如何将变量硬编码到剧本中,并让它们按预期工作,即从/etc/environment
拉出?
编辑:这里的云INIT:
#!/bin/bash
source /etc/environment
doit() {
aws s3 cp s3://my/scripts/dev-s3-push.tar.gz /tmp/my.tar.gz
mkdir -p /app/deploy
tar -C /app/deploy -zxvf /tmp/my.tar.gz
cd /app/deploy
FOO=$FOO BAR=$BAR ansible-playbook -i "localhost," -c local run.yml
}
doit
这是加入到AWS中的用户数据部分。
你可以分享你的云启动脚本吗? – ydaetskcoR
@ydaetskcoR,我在上面添加了它。谢谢! – greggilbert
如果将'source'放入'doit'中,会发生什么? (我认为这是一个'出口'问题。) –