Можно ли использовать переменные в cloud-config

При использовании cloud init #cloud-config для создания файлов конфигурации, как мне использовать переменные для заполнить значения?

В моем конкретном случае я хотел бы автоматически запускать экземпляры EC2 как предварительно настроенные солевые миньоны. Пример конфигурации облака соляных миньонов< /а>

Скажем, я хотел бы получить идентификатор конкретного экземпляра EC2 и установить его в качестве идентификатора солевого миньона.

Как мне это сделать, динамически устанавливая значение для каждого экземпляра?


person charliemurder    schedule 14.05.2013    source источник


Ответы (3)


в команде загрузки 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
person Larry Cai    schedule 04.11.2014

Наиболее близкими к настраиваемым переменным, которые я видел, являются [Метаданные экземпляра].(https://cloudinit.readthedocs.io/en/latest/topics/instancedata.html#)

В нем говорится, что вы можете использовать:

  • пользовательские данные, предоставленные при создании экземпляра

Вы можете использовать данные, созданные в /run/cloud-init/instance-data.json.

Вы можете импортировать эти данные экземпляра, используя шаблоны Jinja в облачной конфигурации YAML, чтобы получить следующие данные:

## 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, вы сможете их использовать.

Например, я знаю, что используется несколько переменных, таких как $MIRROR $RELEASE, $INSTANCE_ID для модуля phone_home.

person icc97    schedule 19.01.2021

Попробуйте инструмент 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 здесь

person Rico    schedule 16.12.2013