我有一个 cloud-init bash 脚本,它从 S3 拉出一个 zip,解压缩它,然后运行其中包含的 Ansible 剧本。现在,我还将环境变量烘焙到/etc/environment
中,并且 Ansible 剧本lookup('env')
用来获取这些值。当以主用户或 root 身份通过 bash 运行时,它工作正常。但是当它通过 cloud-init 触发时,变量不会通过。
在我的 bash 脚本中,第一行是source /etc/environment
,我可以很好地回显它们。只有当 Ansible 剧本执行此操作时lookup
,它才会失败。有趣的是,我可以这样强制变量:
FOO=$FOO BAR=$BAR ansible-playbook -c local ...
那行得通。有谁知道我如何才能避免将变量硬编码到剧本行中,并让它们按预期工作,即从中拉出/etc/environment
?
编辑:这里是云初始化:
#!/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 的用户数据部分。