7

当使用cloud init 的#cloud-config 创建配置文件时,我将如何使用变量来填充值?

在我的具体情况下,我想将 EC2 实例作为预配置的 salt minions 自动启动。salt minion 云配置示例

假设我想获取特定的 EC2 实例 ID 并将其设置为 salt minion 的 ID。

我将如何为每个实例动态设置值?

4

3 回答 3

4

在引导命令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
于 2014-11-04T14:14:02.223 回答
2

我见过的最接近可配置变量的是 [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

于 2021-01-19T15:03:41.563 回答
1

试试 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 脚本的更多信息在这里

于 2013-12-16T19:05:51.373 回答