当使用cloud init 的#cloud-config 创建配置文件时,我将如何使用变量来填充值?
在我的具体情况下,我想将 EC2 实例作为预配置的 salt minions 自动启动。salt minion 云配置示例
假设我想获取特定的 EC2 实例 ID 并将其设置为 salt minion 的 ID。
我将如何为每个实例动态设置值?
当使用cloud init 的#cloud-config 创建配置文件时,我将如何使用变量来填充值?
在我的具体情况下,我想将 EC2 实例作为预配置的 salt minions 自动启动。salt minion 云配置示例
假设我想获取特定的 EC2 实例 ID 并将其设置为 salt minion 的 ID。
我将如何为每个实例动态设置值?
在引导命令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
我见过的最接近可配置变量的是 [Instance Metadata]。(https://cloudinit.readthedocs.io/en/latest/topics/instancedata.html#)
它说你可以使用:
- 实例创建时提供的用户数据
您可以使用在 中创建的数据/run/cloud-init/instance-data.json
。
您可以使用YAML cloud-config 中的Jinja 模板导入此实例数据来提取此数据:
## 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 问题表明,如果您将变量放入,/etc/environment
那么您可以使用它们。
例如,我知道有一些变量用于phone_home 模块,例如$MIRROR
$RELEASE
, 。$INSTANCE_ID
试试 ec2metadata 工具(只查询 EC2 元数据)。假设将以下内容放入您的实例用户数据中:
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 脚本的更多信息在这里