繁体   English   中英

如何将环境变量放入cloud-init运行的Ansible脚本中?

[英]How to get environment variables into Ansible script run by cloud-init?

我有一个cloud-init bash脚本,该脚本从S3中提取一个zip,将其解压缩,然后运行其中包含的Ansible剧本。 现在,我还将环境变量放入/etc/environment ,并且Ansible剧本使用lookup('env')来获取这些值。 当通过bash作为主要用户或root用户运行时,它运行良好。 但是,当它通过cloud-init触发时,变量不会通过传递。

在我的bash脚本中,第一行是source /etc/environment ,我可以将它们回显出来。 只有Ansible剧本进行lookup ,它才会失败。 有趣的是,我可以这样强制变量:

FOO=$FOO BAR=$BAR ansible-playbook -c local ...

那行得通。 有谁知道我如何才能将变量硬编码到剧本行中,并使它们按预期工作,即从/etc/environment提取?

编辑:这是cloud-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的“用户数据”部分中。

好的,我知道了。 lookup()在下面使用了os.getenv ,我发现了其他一些与os.getenv相关的问题, os.getenv问题无法正常返回。

问题是在我的/etc/environment ,我将其作为FOO=bar ,应该将其export FOO=bar 将所有值更改为该值即可正常工作。 我仍然在cloud-init函数中包含source行,但是我认为现在已经解决了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM