Переменные в шаблоне виртуальной машины
Instance Groups позволяет создать группу однотипных виртуальных машин из шаблона. Чтобы такие ВМ имели разные характеристики, используйте механизм подстановок системных и пользовательских переменных в шаблоне. Например, с помощью переменных и тегов вы можете создать группу ВМ с фиксированными IP-адресами.
Системная переменная — значение, которое Instance Groups вычисляет во время создания ВМ и подставляет его в шаблон для дальнейшего использования.
Пользовательская переменная — значение, которое Instance Groups берет из списка. Он заранее сформирован пользователем, переменные в нем описаны в формате ключ:значение
.
Поля, в которых поддерживаются переменные
Шаблон ВМ описывается в YAML-файле с помощью ключа instance_template
. Вы можете указать системные и пользовательские переменные вместо значений следующих полей шаблона:
instance_template.fqdn
— FQDN хоста.instance_template.hostname
— имя хоста.instance_template.metadata
— метаданные ВМ. Переменные можно использовать только в значениях ключей поляmetadata
.instance_template.name
— имя ВМ.instance_template.labels
— метки ВМ. Переменные можно использовать только в значениях ключей поляlabels
.instance_template.boot_disk_spec.disk_id
— идентификатор загрузочного диска.instance_template.boot_disk_spec.disk_spec.description
— описание загрузочного диска.instance_template.boot_disk_spec.disk_spec.image_id
— идентификатор образа загрузочного диска.instance_template.boot_disk_spec.disk_spec.snapshot_id
— идентификатор снимка загрузочного диска.instance_template.boot_disk_spec.disk_spec.type_id
— тип загрузочного диска.instance_template.network_interface_specs.primary_v4_address_spec.one_to_one_nat_spec.address
— конфигурация внешнего IP-адреса версии IPv4.instance_template.network_interface_specs.primary_v6_address_spec.one_to_one_nat_spec.address
— конфигурация внешнего IP-адреса версии IPv6.instance_template.placement_policy.placement_group_id
— идентификатор группы размещения.instance_template.secondary_disk_specs.disk_id
— идентификатор дополнительного диска.instance_template.secondary_disk_specs.disk_spec.description
— описание дополнительного диска.instance_template.secondary_disk_specs.disk_spec.image_id
— идентификатор образа дополнительного диска.instance_template.secondary_disk_specs.disk_spec.snapshot_id
— идентификатор снимка дополнительного диска.instance_template.secondary_disk_specs.disk_spec.type_id
— тип дополнительного диска.
Этапы подстановки переменных
Instance Groups заменит системные и пользовательские переменные на значения в два этапа:
- Замена системных переменных на вычисленные значения.
- Замена пользовательских переменных на значения из списка.
Преобразование может быть составным. В этом случае значение, полученное на первом этапе, является переменной для второго этапа.
Пример прохождения этапов подстановки описан ниже.
Первый этап подстановки значений
Instance Groups заменит на вычисленные значения только фиксированный список системных переменных:
Системная переменная | Описание |
---|---|
{instance_group.id} |
Идентификатор группы ВМ. |
{instance_group.labels.label_key} |
Значение метки группы ВМ с ключом label_key . |
{instance.index} |
Уникальный номер ВМ в группе. |
{instance.index_in_zone} |
Номер ВМ в зоне. Уникален в рамках зоны для конкретной группыВМ. |
{instance.labels.another_label_key} |
Значение метки ВМ с ключом another_label_key . |
{instance.short_id} |
Идентификатор ВМ, уникальный в рамках группы. Состоит из четырех букв. |
{instance.tag} |
Тег ВМ в группе внутри зоны доступности. Подробнее см. Политика распределения. |
{instance.zone_id} |
Идентификатор зоны. |
Например, при создании группы ВМ Instance Groups присвоит группе идентификатор и подставит его вместо
{instance_group.id}
каждой ВМ.
Второй этап подстановки значений
Для того чтобы на этом этапе Instance Groups подставил значения, заранее сформируйте список пользовательских переменных в формате ключ:значение
.
На данном этапе Instance Groups:
- Сравнит переменные с ключами из пользовательского списка.
- Проставит им значения, указанные в ключах.
Преобразования переменных
Системные и пользовательские переменные указываются в качестве значений полей шаблона в фигурных скобках {}
. Instance Groups преобразует их по указанным ниже правилам.
Значение поля в шаблоне | Значение поляпосле преобразования | Описание преобразования |
---|---|---|
{заданный_ключ} |
значение |
Значение будет подставлено из заранее подготовленного списка. |
{неизвестный_ключ} |
{неизвестный_ключ} |
Если указан ключ, который не поддерживается механизмом подстановок, Instance Groups не заменит его. |
{{заданный_ключ}} |
{заданный_ключ} |
На первом этапе внутренний уровень скобок будет раскрыт. |
{{неизвестный_ключ}} |
{{неизвестный_ключ}} |
Ключ, который не поддерживается механизмом подстановок, не изменится. |
Пример прохождения этапов подстановки
-
В шаблоне ВМ указаны:
- Список пользовательских переменных в формате
ключ:значение
в блокеvariables
. - Системные и пользовательские переменные в допустимых полях:
- в поле
instance_template.name
указаны пользовательская переменная{short_zone_var_{instance.zone_id}}
и системная —{instance.index}
; - в поле
instance_template.hostname
указана системная переменная{instance.index}
.
- в поле
... variables: - key: short_zone_var_ru-central1-a value: rc1a - key: short_zone_var_ru-central1-b value: rc1b - key: short_zone_var_ru-central1-d value: rc1d instance_template: name: production-{short_zone_var_{instance.zone_id}}-{instance.index} hostname: production-{instance.index} platform_id: standard-v3 ...
- Список пользовательских переменных в формате
-
На первом этапе Instance Groups заменит системные переменные на вычисленные значения.
... variables: - key: short_zone_var_ru-central1-a value: rc1a - key: short_zone_var_ru-central1-b value: rc1b - key: short_zone_var_ru-central1-d value: rc1d instance_template: name: production-{short_zone_var_ru-central1-a}-1 hostname: production-1 platform_id: standard-v3 ...
Где:
- В поле
instance_template.name
:- переменная
{short_zone_var_{instance.zone_id}}
будет преобразована в переменную{short_zone_var_ru-central1-a}
; - системная переменная
{instance.index}
будет преобразована в индекс1
.
- переменная
- В поле
instance_template.hostname
системная переменная{instance.index}
будет преобразована в индекс1
.
- В поле
-
На втором этапе Instance Groups преобразует полученные переменные в значения из списка в блоке
variables
:... variables: - key: short_zone_var_ru-central1-a value: rc1a - key: short_zone_var_ru-central1-b value: rc1b - key: short_zone_var_ru-central1-d value: rc1d instance_template: name: production-rc1a-1 hostname: production-1 platform_id: standard-v3 ...
В поле
instance_template.name
: переменная{short_zone_var_ru-central1-a}
будет преобразована в значениеrc1a
.