# Указываем, что требуется провайдер oblakoteka из собственного реестра terraform { required_providers { oblakoteka = { source = "tf.oblakoteka.ru/oblakoteka/oblakoteka" } } } # Конфигурация провайдера oblakoteka: авторизация через ключ provider "oblakoteka" { key_file = "oblakoteka_key.json" } # Заказ внешнего IP-адреса #1 в указанном регионе и подсети resource "oblakoteka_kvm_extip" "ip1" { region = var.region_oblakoteka_ru_msk # subnet = "37.230.153.0/24" in_test = true } # Заказ внешнего IP-адреса #2 в той же подсети resource "oblakoteka_kvm_extip" "ip2" { region = var.region_oblakoteka_ru_msk # subnet = "37.230.153.0/24" in_test = true } # Создание виртуальной сети vnet1 с NAT через внешний IP ip1 resource "oblakoteka_kvm_vnet" "vnet1" { region = var.region_oblakoteka_ru_msk name = "tf_vnet1" subnet = { subnet_cidr = "192.168.10.0/24" # внутренняя подсеть dns1 = "8.8.8.8" dns2 = "1.1.1.1" } outbound_nat_ip_address = { id = oblakoteka_kvm_extip.ip1.id # NAT через ip1 } } # Создание второй виртуальной сети vnet2 без NAT resource "oblakoteka_kvm_vnet" "vnet2" { region = var.region_oblakoteka_ru_msk name = "tf_vnet2" subnet = { subnet_cidr = "192.168.20.0/24" } } # Создание виртуальной машины vm1 с подключением к внешнему IP и двум vnet resource "oblakoteka_kvm_instance" "vm1" { region = var.region_oblakoteka_ru_msk cod = var.cod_reconn_slava_1 # код COD (контейнер ОВМ) name = "tf_vm1" description = "test vm from tf" vm_type = var.vm_type_universal_lin # тип ВМ (универсальный Linux) os_template = var.os_debian_12_minimal # шаблон ОС (Debian 12) os_admin_pass = "Qwer1234" # пароль администратора ОС running = true # ВМ запускается сразу после создания in_test = true vcpu = 2 # количество vCPU vram = 2 # объем RAM (ГБ) # Диски ВМ disks = { "disk0" = { name = "disk0" type = var.disk_type_super # тип диска: super size = 25 description = "System" bootable = true # загрузочный диск }, "disk1" = { name = "disk1" type = var.disk_type_standard size = 35 description = "Data1" bootable = false }, "disk2" = { name = "disk2" type = var.disk_type_archive size = 45 description = "Data2" bootable = false }, } # Сетевые подключения connections = { "net0" = { extip_id = oblakoteka_kvm_extip.ip2.id # привязка внешнего IP ip2 }, "net1" = { vnet_id = oblakoteka_kvm_vnet.vnet1.id # подключение к vnet1 }, "net2" = { vnet_id = oblakoteka_kvm_vnet.vnet2.id # подключение к vnet2 } } } # Определение переменных (регион, типы ВМ, дисков, ОС и т.д.) # Ниже приведены значения по умолчанию, используемые в ресурсах # Регион, в котором создаются все ресурсы variable "region_oblakoteka_ru_msk" { default = "fc872fd4-fb56-486c-be35-813e8bfc820d" } # ID кода доступа к площадке (например, региону или проекту) variable "cod_reconn_slava_1" { default = 2 } # Типы виртуальных машин (Linux): # базовая конфигурация для минимальных нагрузок variable "vm_type_basic_lin" { default = "7190353d-891a-4175-b435-c590ff9ac835" } # универсальная конфигурация для большинства сценариев variable "vm_type_universal_lin" { default = "b43005aa-a5b5-46e1-8a18-160ab8093cab" } # производительная конфигурация для ресурсоёмких задач variable "vm_type_productive_lin" { default = "4de0e237-36cb-45a4-864f-deb947ed7246" } # Типы виртуальных машин (Windows): variable "vm_type_basic_win" { default = "86f153b6-3d95-4687-9a7e-69bdc37fc005" } variable "vm_type_universal_win" { default = "ffc90a3c-08ec-44f3-8dfe-630cf584acdb" } variable "vm_type_productive_win" { default = "dc2bf451-f021-4a57-8616-0e12b60855d7" } # Тип виртуальной машины для образов MikroTik CHR variable "vm_type_mikrotik" { default = "2faea487-3954-4a80-9879-48ad31532e0a" } # Типы дисков: # Высокопроизводительный сетевой диск variable "disk_type_super" { default = "61d80fad-efe4-487d-9b08-3a56ce1166a1" } # Высокопроизводительный локальный диск variable "disk_type_super_local" { default = "f8a94762-ddf6-4e5a-8e24-b76c3cae3d8d" } # Универсальный сетевой диск variable "disk_type_standard" { default = "877ac4c7-1680-4c2b-a018-4659d796c0a9" } # Универсальный локальный диск variable "disk_type_standard_local" { default = "de72eb6e-c257-4cd4-bb8e-2effd3a67887" } # Архивный сетевой диск (для хранения редко используемых данных) variable "disk_type_archive" { default = "cfb474b4-ba9c-4434-ac35-7be543ac2d3f" } # Архивный локальный диск variable "disk_type_archive_local" { default = "345ad33c-02fb-477b-9192-36721e2ad227" } # Образы ОС (Linux): # Debian 12 с минимальной установкой variable "os_debian_12_minimal" { default = "073a519c-f009-4b54-bf65-5025a3a34900" } # Ubuntu 24.04 LTS с минимальной установкой variable "os_ubuntu_2404_lts_minimal" { default = "801548d3-700f-42cf-bb39-aaedcdc2afba" } # Кастомный Linux-образ (пользовательский) variable "os_linux_custom" { default = "362a9e0b-6676-437a-8174-8d76bdbb1f44" } # Образы ОС (Windows с GUI): variable "os_windows_2022_rus_gui" { default = "d0c240bb-c868-44c2-8d62-8963fa1277dc" } variable "os_windows_2022_en_gui" { default = "1908cf91-7b98-4be5-815d-6884cc4fc2e0" } variable "os_windows_2019_rus_gui" { default = "6cb36fc4-8774-46cc-988e-cc90448a61d1" } variable "os_windows_2019_en_gui" { default = "402e344c-5ea1-44ac-970a-0a1b98b38371" } variable "os_windows_2016_en_gui" { default = "362b4f64-b0ff-48bd-9d4a-4debd375f85f" } # Кастомные образы Windows (разные интерфейсы подключения дисков) variable "os_windows_2022_custom_scsi" { default = "9262a248-577f-49ce-bf67-dfee7ee1cc60" } variable "os_windows_2022_custom_sata" { default = "b3cd5d9b-a8fd-4710-bf74-e1704def6382" } variable "os_windows_2019_custom_scsi" { default = "e9c4987d-6800-4067-9399-b1dd38f884df" } variable "os_windows_2019_custom_sata" { default = "c0733e7f-6abc-4f82-9032-58f0b7142283" } # Образы MikroTik Cloud Hosted Router variable "os_mikrotik_chr_7" { default = "2293adfa-cf1a-4841-bea8-288e09fae050" } variable "os_mikrotik_chr_6" { default = "4bfc2696-f609-4db3-99bd-419f9575d8ca" } # Прочие кастомные образы variable "os_custom_other_scsi" { default = "9f5d5abf-45f7-411b-bf14-2628c15b0d50" } variable "os_custom_other_sata" { default = "fd83b7a7-0f2d-4c27-b898-9a271d5d1d30" } # Закомментированные outputs (можно раскомментировать при необходимости) # output "whoami_out" { # value = data.oblakoteka_whoami.whoami # } # output "ip1_out" { # value = oblakoteka_kvm_extip.ip1 # } # output "vnet1_out" { # value = oblakoteka_kvm_vnet.vnet1 # } # Вывод информации о созданной ВМ output "vm1_out" { value = oblakoteka_kvm_instance.vm1 }