【问题标题】:Is it possible to use variables in cloud-config是否可以在 cloud-config 中使用变量
【发布时间】:2021-01-19 23:03:41
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    在启动命令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
    

    【讨论】:

      【解决方案2】:

      我见过的最接近可配置变量的是 [Instance Metadata]。(https://cloudinit.readthedocs.io/en/latest/topics/instancedata.html#)

      它说你可以使用:

      • 创建实例时提供的用户数据

      您可以使用在/run/cloud-init/instance-data.json 中创建的数据。

      您可以在 YAML 云配置中使用 Jinja templates 导入此 instance data 以提取此数据:

      ## 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

      【讨论】:

      • cloud-init 填充/run/cloud-init/instance-data.json 文件,以统一各种云提供商提供的数据。 v1 条目是最安全的使用,因为它们是 cloud-init 收集公共数据的地方,并且保证密钥存在。
      【解决方案3】:

      试试 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 脚本的信息here

      【讨论】:

        猜你喜欢
        • 2013-12-10
        • 1970-01-01
        • 2011-06-03
        • 2023-03-26
        • 2016-02-02
        • 1970-01-01
        • 2021-11-18
        • 2013-11-05
        • 2010-10-25
        相关资源
        最近更新 更多