使用cloud init's#cloud-config创建配置文件时,如何使用变量来填充值?
在我的具体情况下,我想将EC2实例作为预先配置的盐爪子自动启动。 Example of salt minion cloud config
假设我想获取特定的EC2实例id并将其设置为salt minion的id。
我如何动态地为每个实例设置值?
答案 0 :(得分:2)
bootcmd
中的可以包含环境变量$INSTANCE_ID
,您可以保存它以供以后使用。见http://cloudinit.readthedocs.org/en/latest/topics/examples.html#run-commands-on-first-boot
我举例如下
#cloud-config
bootcmd:
- echo $INSTANCE_ID > /hello.txt
答案 1 :(得分:1)
我见过的最接近可配置变量的是 [Instance Metadata].(https://cloudinit.readthedocs.io/en/latest/topics/instancedata.html#)
它说你可以使用:
<块引用>您可以使用在 /run/cloud-init/instance-data.json
中创建的数据。
您可以在 YAML 云配置中使用 instance data 导入此 Jinja templates 以提取此数据:
<块引用>## template: jinja
#cloud-config
runcmd:
- echo 'EC2 public hostname allocated to instance: {{
ds.meta_data.public_hostname }}' > /tmp/instance_metadata
- echo 'EC2 availability zone: {{ v1.availability_zone }}' >>
/tmp/instance_metadata
- curl -X POST -d '{"hostname": "{{ds.meta_data.public_hostname }}",
"availability-zone": "{{ v1.availability_zone }}"}'
https://example.com
但我不确定您是如何创建 /run/cloud-init/instance-data.json
文件的。
此 CoreOS issue 表明如果您将变量放入 /etc/environment
中,那么您可以使用它们。
例如,我知道在 phone_home 模块中使用了一些变量,例如 $MIRROR
$RELEASE
、$INSTANCE_ID
。
答案 2 :(得分:0)
尝试使用ec2metadata工具(只查询EC2元数据)。假设在您的实例userdata中添加以下内容:
wget http://s3.amazonaws.com/ec2metadata/ec2-metadata
chmod u+x ec2-metadata
# The following gives you the instance id and you can pass it to your salt minion config
ec2-metadata -i
有关ec2-metadata脚本here
的更多信息