Это вторая статья по провайдеру  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. Значение по умолчанию 0 указывает на то, что следует использовать следующий доступный идентификатор в последовательности.

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

Желаемое состояние ВМ, варианты running или stopped.

oncreate

bool

true

Следует ли запускать виртуальную машину после ее создания (устарело, вместо этого используйте vm_state)

tablet

bool

true

Включение/Выключение USB-планшетного устройство. Данное устройство необходимо для обеспечения абсолютного позиционирования мыши при помощи VNC

boot

str

Порядок загрузки ВМ. На пример: order=scsi0;ide2;net0. Устаревший синтаксис legacy= больше не поддерживается. Больше информации о параметрах boot смотрите в Документации Proxmox

bootdisk

str

Включение загрузки с указанного диска. В большинстве случаев не требуется изменять этот параметр.

agent

int

0

Установите значение в 1 для включения QEMU Guest Agent. Обратите внимание, что вы должны запустить демон qemu-guest-agent в гостевой системе, чтобы это возымело какой-либо эффект.

iso

str

Имя ISO-образа для монтирования на виртуальную машину в формате: [storage pool]:iso/[имя iso-файла].Применяется только в том случае, если параметр "клонировать" clone не задан. Необходимо установить либо clone, либо iso. Обратите внимание, что iso является взаимоисключающим с режимами clone и pxe.

pxe

bool

false

Если значение установлено в true, включает режим загрузки ВМ по сети PXE .  Так же требуется что бы сетевой интерфейс был включен в порядок загрузки boot  (например boot = "order=scsi0;net0").  Примечание, режим pxe является взаимоисключающим с режимами iso и clone.

clone

str

Базовый шаблон или ВМ с которой будет создаваться новая ВМ. Примечание, режим  clone является взаимоисключающим с режимами  pxe и iso.

full_clone

bool

true

Если у параметра установлено значение true то будет выполнено полное клонирование, или false для создания связанных клонов. Смотрите документацию. Применяется только в том случае, если установлено значение параметра clone.

hastate

str

Устанавливает состояние HA для заданного ресурса. Доступны следующие значения параметра "started", "stopped", "enabled", "disabled", или "ignored". Смотрите документацию HA

hagroup

str

Идентификатор группы HA, к которой принадлежит ресурс(требуется установленный параметр hastate). Смотрите документацию 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

Количество виртуальных процессоров, выделяемых к виртуальной машине при ее запуске. Если 0, то Proxmox автоматически устанавливает значение равное произведению сокетов и ядер sockets * cores.

cpu

str

"host"

Тип процессора для эмуляции в гостевой системе. Подробнее смотрите в документации.

numa

bool

false

Определяет включение Non-Uniform Memory Access в гостевой машине.

hotplug

str

"network,disk,usb"

Разделяемый запятыми, список устройств для которых разрешена "Горячая" замена/подключение. Доступные параметры: network, disk, cpu, memory, usb.

scsihw

str

lsi

Параметр определяющий тип эмулируемого контроллера. Варианты: lsi, lsi53c810, megasas, pvscsi, virtio-scsi-pci, virtio-scsi-single.

pool

str

Пул ресурсов, в который будет добавлена виртуальная машина

tags

str

Метка ВМ. Это мето-информация

force_create

bool

false

Если значение "false" и виртуальная машина с таким же именем существует на том же узле, terraform попытается перенастроить эту виртуальную машину с этими настройками. Установите значение true, чтобы всегда создавать новую виртуальную машину. Обратите внимание, что имя виртуальной машины по-прежнему должно быть уникальным, в противном случае будет выдана ошибка.

os_type

str

Какой метод подготовки использовать в зависимости от типа операционной системы. Варианты: ubuntu, centos, cloud-init.

force_recreate_on_change_of

str

Если значение этой строки изменится, виртуальная машина будет создана заново. Полезно для того, чтобы разрешить воссоздание этого ресурса при изменении произвольных атрибутов. Например это полезно при использовании конфигурации cloud init (поскольку атрибут cicustomуказывает на файл, а не на содержимое).

os_network_config

str

Применяемо только когда параметр define_connection_info задан в true. Сетевая конфигурация, которая будет скопирована в виртуальную машину при предварительной подготовке гостей "ubuntu" или "centos". Указанная конфигурация добавляется в "/etc/network/interfaces" для Ubuntu или "/etc/sysconfig/network-scripts/ifcfg-eth0" для CentOS. Заставляет воссоздавать изменения.

ssh_forward_ip

str

Применяемо только когда параметр define_connection_info задан в true.  IP-адрес (и необязательный порт, разделенный двоеточием), который будет использоваться для подключения к хосту для предварительной подготовки. При использовании cloud-init это поле можно оставить пустым.

ssh_user

str

Применяемо только когда параметр define_connection_info задан в true. Пользователь, с помощью которого можно подключиться к гостевой системе для предварительной подготовки. Заставляет воссоздавать изменения.

ssh_private_key

str

Применяемо только когда параметр define_connection_info задан в true. Закрытый ключ, который будет использоваться при подключении к гостевой системе для предварительной подготовки. Регистрозависимый.

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. Необходимо определить параметр cicustom.

searchdomain

str

Устанавливает суффикс домена поиска DNS по умолчанию.

nameserver

str

Устанавливает DNS-сервер по умолчанию для гостевой ОС.

sshkeys

str

Список открытых ключей SSH, разделенных новой строкой, для добавления в файл авторизованных ключей для пользователя cloud-init.

ipconfig0

str

Первый IP-адрес, который нужно назначить гостевой ОС. Формат: [gw=<GatewayIPv4>] [,gw6=<GatewayIPv6>] [,ip=<IPv4Format/CIDR>] [,ip6=<IPv6Format/CIDR>].

ipconfig1 to ipconfig15  

str

Второй IP-адрес, который нужно назначить гостевой ОС. Тот же формат, что и ipconfig0.

automatic_reboot

bool

true

Разрешение автоматической перезагрузки виртуальный машины, когда этого требуют изменения параметров. Если этот параметр отключен, провайдер выдаст предупреждение о необходимости перезагрузки виртуальной машины.

Блок VGA

Блок "vga" используется для настройки устройства отображения. Он может быть указан несколько раз, однако

будет использоваться только первый экземпляр блока.

Для получения более подробной информации смотрите документацию.

Аргумент

Тип

Значение по умолчанию

Описание

type

str

std

Тип устройства видео вывода . Варианты: cirrus, none, qxl, qxl2, qxl3, qxl4, serial0, serial1, serial2, serial3, std, virtio, vmware.

memory

int

Устанавливает объем памяти VGA (в мегабайтах). Не влияет на тип последовательного дисплея.

Блок настройки сети

Блок network используется для настройки сетевых устройств. Это может быть указано несколько раз. Порядок, в котором указаны блоки, определяет идентификатор для каждого сетевого устройства. т.е. первый блок "network" станет net0, второй - net1 и т.д...

Для получения более подробной информации смотрите документацию.

Аргумент

Тип

Значение по умолчанию

Описание

model

str

Required Модель сетевой карты. Модель virtio предоставляет наилучшую производительность при наименьших затратах CPU. Если гостевая ОС не поддерживает данный тип устройств. Обычно лучше использовать следующее устройство e1000. Варианты: e1000, e1000-82540em, e1000-82544gc, e1000-82545em, i82551, i82557b, i82559er, ne2k_isa, ne2k_pci, pcnet, rtl8139, virtio, vmxnet3.

macaddr

str

Переопределяет случайным образом MAC адрес для ВМ. Требуется, чтобы MAC-адрес был одноадресным.

bridge

str

nat

Мост, к которому необходимо подключить сетевое устройство. Стандартный мост именуется как vmbr0.

tag

int

-1

Тег VLAN, применяемый к пакетам на этом устройстве. -1 отключает использование тэгов VLAN

firewall

bool

false

Указывает включать ли Firewall на этом сетевом  устройством

rate

int

0

Устанавливает ограничение трафика в Mb/s для сетевого устройства. Установить 0 для отключения ограничений.

queues

int

1

Параметр определяющий количество пакетов в очереди. Поддерживается только с моделями virtio.

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** Тип добавляемого дискового устройства. Варианты: ide, sata, scsi, virtio.

storage

str

**Required** Имя пула хранения, в котором будет храниться диск.

size

str

**Required** Размер созданного диска, формат должны соответствовать регулярному выражению \d+[GK], где G, M и K

format

str

"raw"

Формат данных файла резервной копии диска.

cache

str

"none"

Режим кэширования диска. Варианты: directsync, none, unsafe, writeback, writethrough  

backup

bool

true

Определят следует ли включать резервное копирование для устройство хранения

iothread

int

0

Следует ли использовать потоки ввода-вывода для этого диска. Работает только с устройствами типа virtio, или scsi при эмулируемым типе контроллера virtio-scsi-single (scsihw аргументы верхнего блока ).

replicate

int

0

Следует ли использовать диск для заданий репликации.

ssd

int

0

Числовой параметр для включения эмуляции SSD

discard

str

Определяет, следует ли передавать запросы на удаление/обрезку в базовое хранилище. Эффективно только в том случае, если базовое хранилище поддерживает *тонкую подготовку* (Only effective when the underlying storage supports thin provisioning.). Есть и другие предостережения, Для получения более подробной информации смотрите документацию.

aio

str

Используемый тип AIO. Варианты: io_uring, native, threads.

mbps

int

0

Максимальная скорость передачи данных в Mb/s 0 снимает ограничения.

mbps_rd

int

0

Максимальная скорость чтения в Mb/s. 0 снимает ограничения.

mbps_rd_max

int

0

Максимальная скорость чтения в Mb/s. 0 снимает ограничения.

mbps_wr

int

0

Максимальная скорость записи в  Mb/s. 0 снимает ограничения.

mbps_wr_max

int

0

Максимальный регулируемый пул записи в  Mb/s. 0снимает ограничения.

iops

int

0

Максимальная скорость чтения/записи в IOPs. 0 снимает ограничения.

iops_max

int

0

Максимальный нерегулируемый пул ввода-вывода для чтения/записи Op/s. 0 снимает ограничения.

iops_max_length

int

0

Максимальная продолжительность пакетов ввода-вывода в секундах. 0 снимает ограничения.

iops_rd

int

0

Максимальная скорость чтения в IOP/s. 0 снимает ограничения.

iops_rd_max

int

0

Максимальное количество операций ввода-вывода для чтения в незарегистрированном пуле Op/s. 0 снимает ограничения.

iops_rd_max_length

int

0

Максимальная продолжительность считываемых пакетов ввода-вывода в секундах. 0 снимает ограничения.

iops_wr

int

0

Максимальное количество IOPS при записи . 0 снимает ограничения.

iops_wr_max

int

0

Максимальное количество операций ввода-вывода с незарегистрированной записью в операциях в секунду. 0 снимает ограничения.

iops_wr_max_length

int

0

Максимальная продолжительность пакетов ввода-вывода для записи в секундах. 0 снимает ограничения.

serial

str

Установка серийного номера накопителя, закодированный по URL-адресу, длиной до 20 байт.

wwn

str

Всемирное название диска, закодированное в виде шестнадцатеричной строки длиной 16 байт с префиксом 0x.

file

str

Часть имени файла пути к резервному тому диска. Вам не нужно указывать это, вместо этого используйте параметр storage.

media

str

"disk"

Тип носителя на диске. Варианты: cd-rom, disk.

volume

str

Полный путь к резервному тому диска, включая имя пула хранения. Вам не нужно указывать это, вместо этого используйте параметр storage.

slot

int

*(не уверен, для чего это нужно, кажется, устарело, не используйте)* (not sure what this is for, seems to be deprecated, do not use).

storage_type

str

Тип пула, которым поддерживается storage. Вам не нужно указывать это, вместо этого используйте параметр storage.

Блок для определения последовательных устройств.

Опишите последовательное устройство для использования внутри виртуальной машины (можно указать максимум 4) и либо пройдите через последовательное

устройство хоста (например, /dev/ttyS0), либо создайте сокет unix на стороне хоста. Порядок, в котором объявляются "последовательные" блоки, не имеет значения.

ПРЕДУПРЕЖДЕНИЕ: Используйте с осторожностью, так как в документации указано, что это устройство является экспериментальным, и пользователи сообщали о проблемах с ним.

Для получения более подробной информации смотрите [документацию к последовательным портам].

Аргумент

Тип

Значение по умолчанию

Описание

id

int

**Required** Идентификатор последовательного устройства. Должно быть уникальным и находиться в диапазоне 0-3

type

str

**Required** Тип создаваемого последовательного устройства. Варианты: socket,или путь к последовательному устройству, например /dev/ttyS0.

Блок описания 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

Атрибут, доступный только для чтения. Применяется только в том случае, если параметр define_connection_info установлен в true. Имя хоста или IP-адрес, который будет использоваться для подключения к виртуальной машине для предварительной подготовки. TЭто можно переопределить, определив ssh_forward_ip, но если вы используете cloud-init и ipconfig0=dhcp, используется IP, указанный qemu-guest-agent, в противном случае используется IP, определенный в ipconfig0.

ssh_port

str

Атрибут, доступный только для чтения. Применяется только в том случае, если параметр define_connection_info установлен в true. Порт для подключения к виртуальной машине по SSH для предварительной подготовки. Если используется cloud-init и порт не указан в ssh_forward_ip, то используется 22. Если не использовать cloud-init, порт в target_node будет перенаправлен на порт 22 в гостевой системе, и этому атрибуту будет присвоено значение перенаправленного порта.

default_ipv4_address

str

Атрибут, доступный только для чтения.  Применяется только в том случае, если параметр agent установлен в 1 и Proxmox действительно может считывать ip-адрес виртуальной машины.

Устаревшие аргументы

Следующие аргументы устарели и больше не должны использоваться.

  • 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'ом

Комментарии (0)