[Перевод] Модуль Terraform для Proxmox
Всем привет, я не блогер и не люблю писать посты и блоги, пока.
Решил найти решение для Terraform и Proxmox. После не долгих поисков нашёл провайдер под названием terraform-provider-proxmox. Так как на русском документации не было ни где решил перевести документацию о ресурсах на русский язык как мог. Думаю что кому ни будь будет полезно и избавит от дополнительного труда.
Описание LXC Resource
Этот «ресурс terraform» позволяет создавать контейнеры Proxmox LXC и управлять ими.
Примеры использования
Базовый пример
resource "proxmox_lxc" "basic" {
target_node = "pve"
hostname = "lxc-basic"
ostemplate = "local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz"
password = "BasicLXCContainer"
unprivileged = true
// Terraform will crash without rootfs defined
rootfs {
storage = "local-zfs"
size = "8G"
}
network {
name = "eth0"
bridge = "vmbr0"
ip = "dhcp"
}
}
Пример с несколькими точками монтирования
→ Указав параметр `local-lvm:12` для атрибута `mountpoint.storage` в первом блоке `mountpoint` ниже, автоматически создаст том для контейнера. Больше ниформации о монторовании томов смотрите на [Storage Backed Mount Points](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_storage_backed_mount_points).
resource "proxmox_lxc" "multiple_mountpoints" {
target_node = "pve"
hostname = "lxc-multiple-mountpoints"
ostemplate = "local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz"
unprivileged = true
ostype = "ubuntu"
ssh_public_keys = <<-EOT
ssh-rsa user@example.com
ssh-ed25519 user@example.com
EOT
// Terraform will crash without rootfs defined
rootfs {
storage = "local-zfs"
size = "8G"
}
// Storage Backed Mount Point
mountpoint {
key = "0"
slot = 0
storage = "local-lvm"
mp = "/mnt/container/storage-backed-mount-point"
size = "12G"
}
// Bind Mount Point
mountpoint {
key = "1"
slot = 1
storage = "/srv/host/bind-mount-point"
// Без определения 'volume' Proxmox попытается создать том
// со значением 'storage' + : + 'size' (без завершающей буквы G) - например.
// "/srv/host/bind-mount-point:256".
// Такое поведение, похоже, вызвано ошибкой в провайдере.
volume = "/srv/host/bind-mount-point"
mp = "/mnt/container/bind-mount-point"
size = "256G"
}
// Device Mount Point
mountpoint {
key = "2"
slot = 2
storage = "/dev/sdg"
volume = "/dev/sdg"
mp = "/mnt/container/device-mount-point"
size = "32G"
}
network {
name = "eth0"
bridge = "vmbr0"
ip = "dhcp"
ip6 = "dhcp"
}
}
LXC с расширенными функциями
resource "proxmox_lxc" "advanced_features" {
target_node = "pve"
hostname = "lxc-advanced-features"
ostemplate = "local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz"
unprivileged = true
ssh_public_keys = <<-EOT
ssh-rsa user@example.com
ssh-ed25519 user@example.com
EOT
features {
fuse = true
nesting = true
mount = "nfs;cifs"
}
// Terraform will crash without rootfs defined
rootfs {
storage = "local-zfs"
size = "8G"
}
// NFS share mounted on host
mountpoint {
slot = "0"
storage = "/mnt/host/nfs"
mp = "/mnt/container/nfs"
size = "250G"
}
network {
name = "eth0"
bridge = "vmbr0"
ip = "10.0.0.2/24"
ip6 = "auto"
}
}
Пример простого клонирования
resource "proxmox_lxc" "basic" {
target_node = "pve"
hostname = "lxc-clone"
#id of lxc container to clone
clone = "8001"
}
Описание аргументов
Обязательные (Required)
При использовании должны быть использованы следующие аргументы:
Произвольные (Optional)
→ Хотя следующие аргументы необязательны, у некоторых есть дочерние аргументы, которые требуются при использовании родительского аргумента (например, аргумент `name` в атрибуте `network`). Такие дочерние атрибуты помечены как »(required)».
Следующие аргументы могут использоваться выборочно при использованиии данного ресурса:
`ostemplate` — [Обозначение образа](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_volumes) указывающее на шаблон ОС или файл резервной копии
`arch` — Устанавливает тип архитектуры ОС в контейнере. По умолчанию это `«amd64»`.
`bwlimit` — Число для переопределения ограничения пропускной способностиI/O указывается в KiB/s.
`clone` — Идентификатор клонируемого контейнера
`clone_storage` — Целевое хранилище для полного клонирования.
`cmode` — Настраивает режим консоли. `«tty»` Пытается установить соединение с одним из доступных TTY устройств. `«console»` Пытается подключиться `/dev/console`. `«shell»` просто вызывает оболочку внутри контейнера (без входа в систему). По умолчанию `«tty»`.
`console` — Определяет подключать ли консольное устройство к контейнеру. По умолчанию `true`.
`cores` — Определяет колличество ядер выделеных контейнеру. Контейнер может использовать все доступные ядра по умолчанию.
`cpulimit` Значение ограничения на использования CPU. По умолчанию не ограничено `0` .
`cpuunits` — Значение веса (приоритета) при использовании CPU для контейнера. По умолчанию `1024`.
`description` — Описание контейнера отображаемое в WEB-интерфейсе
`force` — Определяет заменится ли при создании существующий контейнер с такими же параметрами идентификаци
`full` — Установите значение параметра в `true` для создания не связанного клона с копированием всех дисков. При создании нормального клона этот параметр обязательно должен быть определён. По умолчанию создаётся связанный с шаблоном клон (диски у контейнеров становятся общими).
`force` — Определяет заменится ли при создании существующий контейнер с такими же параметрами идентификаци
`hastate` — Запрашивает состояние HA (высокой доступности) для ресурса. Доступно одно из следующих состояний: «started», «stopped», «enabled», «disabled» или «ignored»
`started` — система будет пытаться запустить ресурс на одном из узлов, в случае если запуск не удался или узел не отвечает, то система будет пробовать запускать на другом доступном узеле
stopped
— система будет сохранять ресурс в выключенном состоянии, но по прежнему будет перемещать его в слючае выхода из строя узла,`enabled` — псевдоним для *`started`*,
`disabled` — Система пытается перевести ресурс выключенное состояние, но не переносит его в случае выхода из строя узла виртуализации,
`ignored` — Ресурс выводится из под управления системы ___HA___ и система более не затрагивает данный ресурс. Все вызовы __API__ затрагивающие этот ресурс выполняются меную систему ___HA___.
Более подробная информация в Документации по «HA»
`hagroup` — Идентификатор группы HA (требуется что бы параметр `hastate` был определён!). Смотрите [Документацию по HA](https://pve.proxmox.com/pve-docs/chapter-ha-manager.html#ha_manager_resource_config) для получения подробной информации.
`hookscript` — Строка, содержащая [идентификатор тома для скрипта](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_hookscripts_2), который будет выполняться на различных этапах в течение всего срока службы контейнера. Сценарий должен быть исполняемым файлом.
`hostname` — Определяет имя узла _«HOSTNAME»_ контейнера.
`ignore_unpack_errors` — Логическое значение, определяющее, игнорируются ли ошибки извлечения шаблона при создании контейнера.
`lock` — Строка для блокировки или разблокировки виртуальной машины.
`memory` — Число, определяющее объем оперативной памяти, назначаемый контейнеру (в МБ).
`mountpoint` — Объект, определяющий том, который будет использоваться в качестве точки монтирования контейнера. Может быть задан несколько раз.
`mp` (required) — Путь к точке монтирования, видимый изнутри контейнера. Путь не должен содержать символических ссылок по соображениям безопасности.
`size` (required) — Размер (на пример `»1T»`, `»1G»`, `»1024M»`, `»1048576K»`). Обратите внимание, что это значение доступно только для чтения.(возможно имеется в виду что тома доступны только для чтения.)
`slot` (required) -Строка, содержащая число, идентифицирующее точку монтирования (т.е. `n` в [`mp[n]`](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#pct_mount_points)).
`key` (required) — Число, идентифицирующее точку монтирования (т.е. `n` в [`mp[n]`](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#pct_mount_points)).
`storage` (required) — Строка содержащая том (volume), каталог (directory), или устройство (device) которое должно быть подключено в контейнер (по пути определяемому `mp`). Например `local-lvm`, `local-zfs`, `local` и т.д.
`acl` — Логическое значение для включения поддержки ACL. По умолчанию — `false`.
`backup` — Параметр включающий резервное копирование для смонтированного устройства. По умолчанию — `false`.
`quota` -Логическое значение для включения пользовательских квот внутри контейнера.
По умолчанию — `false`.
`replicate` — Параметр определяет будет ли реплицироваться устройсво. По умолчанию — `false`.
`shared` — Параметр определяющий доступность устройства на всех узлах. Default is `false`.
`nameserver` — IP адрес сервера имён для использования в контейнере.Если не указаны ни `nameserver`, ни `searchdomain`, то по умолчанию будут использоваться значения хоста Proxmox.
`network` — Объект, определяющий сетевой интерфейс для контейнера. Может быть задан несколько раз.
`name` (required) — Имя сетевого интерфейса, видимое изнутри контейнера (например, `«eth0»`).
`bridge` — Сетевой мост, к которому подключается сетевой интерфейс (например, `«vmbr0»`).
`firewall` — Параметр включающий Firewall на интерфейсе контейнера.
`gw` — IPv4 адрес шлюза сети.
`gw6` — IPv6 адрес шлюза сети.
`hwaddr` — Строка устанавливающая MAC-адрес сетевого интерфейса с неустановленным индивидуальным/групповым битом. Определяется автоматически, если не задано.
`ip` — IPv4-адрес сетевого интерфейса. Может быть статическим задаётся в формате `«CIDR»`, автоматически `«dhcp»`, или в ручную в ОС контейнера `«manual»`.
`ip6` — IPv4-адрес сетевого интерфейса. Может быть статическим задаётся в формате `«CIDR»`, автоматически `«dhcp»`, `«auto»`, или в ручную в ОС контейнера `«manual»`.
`mtu` — Строковый параметр для установка MTU для сетевого интерфейса.
`rate` — Числовой параметр для установки ограничения трафика (Mbps).
`tag` — Числовой параметр устанавливает значение тега `VLAN` для сетевого интерфейса. По умолчанию устанавливается в `0`.
`onboot` — Логический параметр определяющий будет ли контейнер запускаться при загрузке гипервизора. По умолчанию `false`.
`ostype` — Тип операционной системы, используемый LXC для установки и конфигурирования контейнера. Если не задано, определяется автоматически.
`password` — Строковый параметр для установки пароля пользователя *root*.
`pool` — Имя пула ресурса Proxmox в который необходимо включить контейнер.
`protection` — Логический параметр установки флага `protection` для контейнера. Запрещает удаление/обновление контейнера и его дисков. Значение по умолчанию `false`.
`restore` — Лигический параметр помечающий операции создания/обновления как задачи восствновления.
`searchdomain` — Строковый параметр для установки поискового домена. Если не указаны ни `name server`, ни `search domain`, по умолчанию будут использоваться значения хоста Proxmox.
`ssh_public_keys` -Многострочный параметр предназначеный для установки публичной части SSH ключа. Для установки используется [синтаксис heredoc](https://www.terraform.io/docs/configuration/expressions/strings.html#heredoc-strings).
`start` — Логический параметр определяющий будет ли запущен контейнер после создания. По умолчанию `false`.
`startup` — [Поведение контейнера при запуске и выключении.](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#pct_startup_and_shutdown).
`swap` — Числовой параметр задающей объем памяти подкачки, доступной контейнеру. По умолчанию `512`.
`tags` — Метка контейнера. Это всего лишь информация.
`template` — Логический параметр, определяющий, является ли этот контейнер шаблоном.
`tty` — Числовой параметр определяющий количество доступных TTY для контейнера. По умолчанию `2`.
`unique` — Логический параметр определяющий будет ли присвоен уникальный случайный адрес ethernet.
`unprivileged` — Логический параметр предписывающий запускаться ли контейнеру от имени непривилегированного пользователя. По умолчанию `false`.
`vmid` — Числовой параметр определяющий идентификатор контейнера VMID. Если значение установлено в `0`, то будет использоваться следующий свободный VMID. По умолчанию `0`.
Никакие дополнительные атрибуты этим ресурсом не эксплуатируются.
LXC я использовал и с проблемами не сталкивался всё работало отлично. Свой опыт и какие то инструкции описывать не буду, так как там и описывать нечего особенно.
Описание по VM в следующей «статье».