是否可以在cloud-config中使用变量

时间:2013-05-14 10:24:59

标签: amazon-ec2 boto cloud-init salt-stack

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

在我的具体情况下,我想将EC2实例作为预先配置的盐爪子自动启动。 Example of salt minion cloud config

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

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

3 个答案:

答案 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

的更多信息