Это вторая статья по провайдеру terraform-provider-proxmox. Здесь первая статья. В общем не буду ходить вокруг да около. Читайте документацию.
P.S. В прошлой статье я не заметил что некоторые элементы MD не поддерживаются Habr-ом. Найду время и исправлю.
Описание ресурса VM Qemu
Этот ресурс позволяет управлять виртуальными Proxmox VM Qemu машинами.
Create a Qemu VM resource
Вы можете запускать виртуальные машину либо с помощью ISO образа, либо с загрузкой через PXE, либо клонировать существующую виртуальную машину или шаблон ВМ.
Оптимальный вариант использования это использовать базовый шаблон.
При создании ресурса VM Qemu, вы описываете блок ресурса proxmox_vm_qemu
.
Для режимов клонирования или загрузки с ISO образа обязательными параметрами являются только имя name
и узел на котором необходимо развернуть VM target node
Для режима загрузки по сети PXE
, в директиве boot
в очереди загрузки должно содержаться значение Network (имя интерфейса).
Обычно для виртуальных машин загружаемых по сети, qemu агент НЕ должен быть включен. Для загрузки посредством PXE требуется инфраструктура поддерживающая запросы на загрузку по сети для данной технологии.
resource "proxmox_vm_qemu" "resource-name" {
name = "VM-name"
target_node = "Node to create the VM on"
iso = "ISO file name"
### or for a Clone VM operation
# clone = "template to clone"
### or for a PXE boot VM operation
# pxe = true
# boot = "scsi0;net0"
# agent = 0
}
Provision through Cloud-Init
Виртуальные машины Cloud-init должны быть клонированы из готового шаблона cloud-init.
При создании ресурса, с использованием Cloud-init, возможно несколько вариантов конфигурации.
Вы можете использовать параметр cicustom
для создания ресурса на основе файла конфигурации Cloud-init.
Либо использовать переменные Proxmox ciuser
, cipassword
, ipconfig0
, ipconfig1
, ipconfig2
, ipconfig3
, ipconfig4
, ipconfig5
,
ipconfig6
, ipconfig7
, ipconfig8
, ipconfig9
, ipconfig10
, ipconfig11
, ipconfig12
, ipconfig13
, ipconfig14
, ipconfig15
, searchdomain
, nameserver
and sshkeys
.
Для более подробной информации читайте Инструкцию по Cloud-init.
Подготовка к запуску по сети с помощью PXE
Установка значения параметра pxe
в true
предпишет ВМ загружаться по сети через PXE.
В дополнение к включению режима PXE следует указать несколько других параметров, чтобы обеспечить успешную загрузку виртуальной машины
Минимальная конфигурация для описания ВМ с PXE загрузкой по сети может выглядеть следующим образом:
resource "proxmox_vm_qemu" "pxe-minimal-example" {
name = "pxe-minimal-example"
agent = 0
boot = "order=scsi0;net0"
pxe = true
target_node = "test"
network {
bridge = "vmbr0"
firewall = false
link_down = false
model = "e1000"
}
}
Основными параметрами, влияющими на корректную работу режима сетевой загрузки PXE, являются:
boot
: Должен быть указан допустимый порядок загрузки с указанием сетевого интерфейса(напримерorder=scsi0;net0
)к виртуальной машине необходимо добавить действительный сетевой адаптер, подключенный к сети с загрузочным сервером PXE
Обычно, для корректной работы отключают работу с агентом (
agent = 0
), включать работу агента можно только в случае если в загружаемом по сети образе уже имеется агент.
Описание аргументов
Примечание: За исключением случаев, явно указанных в описании, предполагается, что все аргументы являются необязательными.
Блок верхнего уровня
Следующие аргументы поддерживаются в блоке верхнего уровня описания ресурсов.
Аргумент |
Тип |
Значение по умолчанию |
Описание |
name |
str |
Required Имя ВМ в Proxmox. |
|
target_node |
str |
Required Имя узла Proxmox, на котором будет размещена виртуальная машина. |
|
vmid |
int |
0 |
Идентификатор виртуальной машины в Proxmox. Значение по умолчанию |
desc |
str |
Описание виртуальной машины. Отображается в поле "Примечания" в графическом интерфейсе Proxmox. |
|
define_connection_info |
bool |
true |
Следует ли разрешить terraform определять параметры подключения (SSH) для предустановщиков, смотрите в блоке конфигурации ниже. |
bios |
str |
seabios |
В используемом BIOS есть опции "seabios" или "ovmf" для UEFI. |
onboot |
bool |
false |
Следует ли запускать виртуальную машину после запуска узла PVE |
startup |
string |
||
vm_state |
string |
running |
Желаемое состояние ВМ, варианты |
oncreate |
bool |
true |
Следует ли запускать виртуальную машину после ее создания (устарело, вместо этого используйте |
tablet |
bool |
true |
Включение/Выключение USB-планшетного устройство. Данное устройство необходимо для обеспечения абсолютного позиционирования мыши при помощи VNC |
boot |
str |
Порядок загрузки ВМ. На пример: |
|
bootdisk |
str |
Включение загрузки с указанного диска. В большинстве случаев не требуется изменять этот параметр. |
|
agent |
int |
0 |
Установите значение в |
iso |
str |
Имя ISO-образа для монтирования на виртуальную машину в формате: [storage pool]:iso/[имя iso-файла].Применяется только в том случае, если параметр "клонировать" |
|
pxe |
bool |
false |
Если значение установлено в |
clone |
str |
Базовый шаблон или ВМ с которой будет создаваться новая ВМ. Примечание, режим |
|
full_clone |
bool |
true |
Если у параметра установлено значение |
hastate |
str |
Устанавливает состояние HA для заданного ресурса. Доступны следующие значения параметра "started", "stopped", "enabled", "disabled", или "ignored". Смотрите документацию HA |
|
hagroup |
str |
Идентификатор группы HA, к которой принадлежит ресурс(требуется установленный параметр |
|
qemu_os |
str |
"l26" |
Тип операционной системы в гостевой системе. Установите правильно, чтобы разрешить Proxmox включать оптимизацию для соответствующей гостевой ОС. При клонирование параметр принимает значение из исходного шаблона и игнорирует любые изменения параметра конфигурации ресурса.| |
memory |
int |
512 |
Объем памяти, выделяемый виртуальной машине, в мегабайтах. |
balloon |
int |
0 |
Минимальный объем памяти, выделяемый виртуальной машине в мегабайтах, если требуется автоматическое выделение памяти. Proxmox позволит встроенному устройству на гостевом компьютере управлять динамическим распределением. Смотрите Документацию. |
sockets |
int |
1 |
Количество сокетов CPU, выделяемых виртуальной машине. |
cores |
int |
1 |
Количество ядер CPU на каждый из сокетов CPU выделяемых ВМ. |
vcpus |
int |
0 |
Количество виртуальных процессоров, выделяемых к виртуальной машине при ее запуске. Если |
cpu |
str |
"host" |
Тип процессора для эмуляции в гостевой системе. Подробнее смотрите в документации. |
numa |
bool |
false |
Определяет включение Non-Uniform Memory Access в гостевой машине. |
hotplug |
str |
"network,disk,usb" |
Разделяемый запятыми, список устройств для которых разрешена "Горячая" замена/подключение. Доступные параметры: |
scsihw |
str |
lsi |
Параметр определяющий тип эмулируемого контроллера. Варианты: |
pool |
str |
Пул ресурсов, в который будет добавлена виртуальная машина |
|
tags |
str |
Метка ВМ. Это мето-информация |
|
force_create |
bool |
false |
Если значение "false" и виртуальная машина с таким же именем существует на том же узле, terraform попытается перенастроить эту виртуальную машину с этими настройками. Установите значение true, чтобы всегда создавать новую виртуальную машину. Обратите внимание, что имя виртуальной машины по-прежнему должно быть уникальным, в противном случае будет выдана ошибка. |
os_type |
str |
Какой метод подготовки использовать в зависимости от типа операционной системы. Варианты: |
|
force_recreate_on_change_of |
str |
Если значение этой строки изменится, виртуальная машина будет создана заново. Полезно для того, чтобы разрешить воссоздание этого ресурса при изменении произвольных атрибутов. Например это полезно при использовании конфигурации cloud init (поскольку атрибут |
|
os_network_config |
str |
Применяемо только когда параметр |
|
ssh_forward_ip |
str |
Применяемо только когда параметр |
|
ssh_user |
str |
Применяемо только когда параметр |
|
ssh_private_key |
str |
Применяемо только когда параметр |
|
ci_wait |
int |
30 |
Сколько времени в секундах нужно ждать перед подготовкой (How to long in seconds to wait for before provisioning). |
ciuser |
str |
Переопределите пользователя cloud-init по умолчанию для подготовки. |
|
cipassword |
str |
Переопределите пароль пользователя cloud-init по умолчанию. Регистрозависимый. |
|
cicustom |
str |
Вместо параметров ciuser, cipasword и т.д... вы можете указать путь к пользовательскому конфигурационному файлу cloud-init. Он предоставляет большую гибкость при настройке cloud-init. |
|
cloudinit_cdrom_storage |
str |
Укажите место хранения для диска cloud-init. Необходимо определить параметр |
|
searchdomain |
str |
Устанавливает суффикс домена поиска DNS по умолчанию. |
|
nameserver |
str |
Устанавливает DNS-сервер по умолчанию для гостевой ОС. |
|
sshkeys |
str |
Список открытых ключей SSH, разделенных новой строкой, для добавления в файл авторизованных ключей для пользователя cloud-init. |
|
ipconfig0 |
str |
Первый IP-адрес, который нужно назначить гостевой ОС. Формат: |
|
|
str |
Второй IP-адрес, который нужно назначить гостевой ОС. Тот же формат, что и |
|
automatic_reboot |
bool |
true |
Разрешение автоматической перезагрузки виртуальный машины, когда этого требуют изменения параметров. Если этот параметр отключен, провайдер выдаст предупреждение о необходимости перезагрузки виртуальной машины. |
Блок VGA
Блок "vga" используется для настройки устройства отображения. Он может быть указан несколько раз, однако
будет использоваться только первый экземпляр блока.
Для получения более подробной информации смотрите документацию.
Аргумент |
Тип |
Значение по умолчанию |
Описание |
type |
str |
std |
Тип устройства видео вывода . Варианты: |
memory |
int |
Устанавливает объем памяти VGA (в мегабайтах). Не влияет на тип последовательного дисплея. |
Блок настройки сети
Блок network
используется для настройки сетевых устройств. Это может быть указано несколько раз. Порядок, в котором указаны блоки, определяет идентификатор для каждого сетевого устройства. т.е. первый блок "network" станет net0
, второй - net1
и т.д...
Для получения более подробной информации смотрите документацию.
Аргумент |
Тип |
Значение по умолчанию |
Описание |
model |
str |
Required Модель сетевой карты. Модель virtio предоставляет наилучшую производительность при наименьших затратах CPU. Если гостевая ОС не поддерживает данный тип устройств. Обычно лучше использовать следующее устройство e1000. Варианты: |
|
macaddr |
str |
Переопределяет случайным образом MAC адрес для ВМ. Требуется, чтобы MAC-адрес был одноадресным. |
|
bridge |
str |
nat |
Мост, к которому необходимо подключить сетевое устройство. Стандартный мост именуется как |
tag |
int |
-1 |
Тег VLAN, применяемый к пакетам на этом устройстве. |
firewall |
bool |
false |
Указывает включать ли Firewall на этом сетевом устройством |
rate |
int |
0 |
Устанавливает ограничение трафика в Mb/s для сетевого устройства. Установить |
queues |
int |
1 |
Параметр определяющий количество пакетов в очереди. Поддерживается только с моделями |
link_down |
bool |
false |
Определяет должен ли быть интерфейс погашен. |
Блок описания дисков
Блок disk
используется для настройки дисковых устройств. Данный блок может быть описан несколько раз. Порядок, в котором указаны
блоки, и тип дискового устройства определяют идентификатор для каждого дискового устройства. Возьмем, к примеру, следующее:
resource "proxmox_vm_qemu" "resource-name" {
//<arguments omitted for brevity...>
disk {
// This disk will become scsi0
type = "scsi"
//<arguments omitted for brevity...>
}
disk {
// This disk will become ide0
type = "ide"
//<arguments omitted for brevity...>
}
disk {
// This disk will become scsi1
type = "scsi"
//<arguments omitted for brevity...>
}
disk {
// This disk will become sata0
type = "sata"
//<arguments omitted for brevity...>
}
}
Для получения более подробной информации смотрите документацию.
Аргумент |
Тип |
Значение по умолчанию |
Описание |
type |
str |
**Required** Тип добавляемого дискового устройства. Варианты: |
|
storage |
str |
**Required** Имя пула хранения, в котором будет храниться диск. |
|
size |
str |
**Required** Размер созданного диска, формат должны соответствовать регулярному выражению |
|
format |
str |
"raw" |
Формат данных файла резервной копии диска. |
cache |
str |
"none" |
Режим кэширования диска. Варианты: |
backup |
bool |
true |
Определят следует ли включать резервное копирование для устройство хранения |
iothread |
int |
0 |
Следует ли использовать потоки ввода-вывода для этого диска. Работает только с устройствами типа |
replicate |
int |
0 |
Следует ли использовать диск для заданий репликации. |
ssd |
int |
0 |
Числовой параметр для включения эмуляции SSD |
discard |
str |
Определяет, следует ли передавать запросы на удаление/обрезку в базовое хранилище. Эффективно только в том случае, если базовое хранилище поддерживает *тонкую подготовку* (Only effective when the underlying storage supports thin provisioning.). Есть и другие предостережения, Для получения более подробной информации смотрите документацию. |
|
aio |
str |
Используемый тип AIO. Варианты: |
|
mbps |
int |
0 |
Максимальная скорость передачи данных в Mb/s |
mbps_rd |
int |
0 |
Максимальная скорость чтения в Mb/s. |
mbps_rd_max |
int |
0 |
Максимальная скорость чтения в Mb/s. |
mbps_wr |
int |
0 |
Максимальная скорость записи в Mb/s. |
mbps_wr_max |
int |
0 |
Максимальный регулируемый пул записи в Mb/s. |
iops |
int |
0 |
Максимальная скорость чтения/записи в IOPs. |
iops_max |
int |
0 |
Максимальный нерегулируемый пул ввода-вывода для чтения/записи Op/s. |
iops_max_length |
int |
0 |
Максимальная продолжительность пакетов ввода-вывода в секундах. |
iops_rd |
int |
0 |
Максимальная скорость чтения в IOP/s. |
iops_rd_max |
int |
0 |
Максимальное количество операций ввода-вывода для чтения в незарегистрированном пуле Op/s. |
iops_rd_max_length |
int |
0 |
Максимальная продолжительность считываемых пакетов ввода-вывода в секундах. |
iops_wr |
int |
0 |
Максимальное количество IOPS при записи . |
iops_wr_max |
int |
0 |
Максимальное количество операций ввода-вывода с незарегистрированной записью в операциях в секунду. |
iops_wr_max_length |
int |
0 |
Максимальная продолжительность пакетов ввода-вывода для записи в секундах. |
serial |
str |
Установка серийного номера накопителя, закодированный по URL-адресу, длиной до 20 байт. |
|
wwn |
str |
Всемирное название диска, закодированное в виде шестнадцатеричной строки длиной 16 байт с префиксом 0x. |
|
file |
str |
Часть имени файла пути к резервному тому диска. Вам не нужно указывать это, вместо этого используйте параметр |
|
media |
str |
"disk" |
Тип носителя на диске. Варианты: |
volume |
str |
Полный путь к резервному тому диска, включая имя пула хранения. Вам не нужно указывать это, вместо этого используйте параметр |
|
slot |
int |
*(не уверен, для чего это нужно, кажется, устарело, не используйте)* (not sure what this is for, seems to be deprecated, do not use). |
|
storage_type |
str |
Тип пула, которым поддерживается |
Блок для определения последовательных устройств.
Опишите последовательное устройство для использования внутри виртуальной машины (можно указать максимум 4) и либо пройдите через последовательное
устройство хоста (например, /dev/ttyS0), либо создайте сокет unix на стороне хоста. Порядок, в котором объявляются "последовательные" блоки, не имеет значения.
ПРЕДУПРЕЖДЕНИЕ: Используйте с осторожностью, так как в документации указано, что это устройство является экспериментальным, и пользователи сообщали о проблемах с ним.
Для получения более подробной информации смотрите [документацию к последовательным портам].
Аргумент |
Тип |
Значение по умолчанию |
Описание |
id |
int |
**Required** Идентификатор последовательного устройства. Должно быть уникальным и находиться в диапазоне |
|
type |
str |
**Required** Тип создаваемого последовательного устройства. Варианты: |
Блок описания USB устройств
Блок usb
используется для настройки USB-устройств. Данный блок может быть указан несколько раз. Порядок, в котором указаны
блоки, определяет идентификатор для каждого сетевого устройства. т.е. первый блок usb
станет usb0
,
второй - usb1
и т.д...
Для получения более подробной информации смотрите docs about USB passthrough.
Аргумент |
Тип |
Значение по умолчанию |
Описание |
host |
str |
Required Узел устройства USB. Это можно сделать либо через идентификатор поставщика и продукта, либо через шину хоста и порт. |
|
usb3 |
bool |
false |
Указывает, является ли данный параметр хоста устройством или портом USB3. |
Блок описания SMBIOS
Блок smbios
устанавливает параметры SMBIOS типа 1 для виртуальной машины.
Аргумент |
Тип |
Описание |
family |
string |
Семейство SMBIOS. | |
manufacturer |
string |
Производитель SMBIOS. |
serial |
string |
Серийный номер SMBIOS. |
product |
string |
Продукт SMBIOS. |
sku |
string |
SKU SMBIOS |
uuid |
string |
UUID SMBIOS . |
version |
string |
Версия SMBIOS. |
Описание атрибутов
В дополнение к приведенным выше аргументам, из этого ресурса так же можно ссылаться на следующие атрибуты .
Аргумент |
Тип |
Описание |
ssh_host |
str |
Атрибут, доступный только для чтения. Применяется только в том случае, если параметр |
ssh_port |
str |
Атрибут, доступный только для чтения. Применяется только в том случае, если параметр |
default_ipv4_address |
str |
Атрибут, доступный только для чтения. Применяется только в том случае, если параметр |
Устаревшие аргументы
Следующие аргументы устарели и больше не должны использоваться.
disk_gb
- (Optional; use disk.size instead)storage
- (Optional; use disk.storage instead)storage_type
- (Optional; use disk.type instead)nic
- (Optional; use network instead)bridge
- (Optional; use network.bridge instead)vlan
- (Optional; use network.tag instead)mac
- (Optional; use network.macaddr instead)clone_wait
- (do not use, api should manage timeouts)additional_wait
- (do not use, api should manage timeouts)preprovision
- (do not use, provider do not fully support preprovisioning anymore)
Импорт
A VM Qemu Resource can be imported using its node, type and VM ID i.e.:
Ресурс Qemu виртуальной машины может быть импортирован с использованием его узла, типа и идентификатора виртуальной машины, т.е.:
terraform import [options] [node]/[type]/[vmId]
Hidden text
Жаль конечно что вставка сырого markdown не поддерживается Habr'ом