Данный раздел предназначен для тех, кто хорошо знаком с инструментом Terraform, а также имеет представление об основных понятиях и способах авторизации в облачной платформе DYNAMIX. Ниже приведён подробно откомментированный пример, показывающий, как создать виртуальный сервер (aka _compute_ на базе системы виртуализации KVM x86) в облачной платформе DYNAMIX с помощью соответствующего Terraform провайдера. Сервер будет создан в новой ресурсной группе, к нему будет подключён один предварительно созданный диск, у сервера будет прямое сетевое подключение во внешнюю сеть. Идентификатор образа операционной системы, на базе которого должен быть создан виртуальный сервер, считывается из облачной платформы с помощью _data source_ функции `dynamix_image`. Далее мы с помощью _resource_ функции `dynamix_resgroup` создаём новую ресурсную группу, в которую будет помещён этот виртуальный сервер. В качестве альтернативы, для получения информации об уже имеющейся ресурсной группе можно использовать _data source_ функцию с таким же названием. Затем с помощью _resource_ функции `dynamix_disk` создаётся диск, который будет подключён к виртуальному серверу в качестве дополнительного. Помимо этого дополнительного диска у сервера будет также и загрузочный диск, на который в процессе создания сервера клонируется выбранный образ операционной системы. Виртуальный сервер - в данном примере на базе системы виртуализации KVM x86 - создаётся посредством _resource_ функции `dynamix_kvmvm`. Только авторизованные в контроллере облачной платформы пользователи могут управлять облачными ресурсами. Подробнее о способах авторизации см. [Обзор облачной платформы DYNAMIX](https://repository.basistech.ru/BASIS/terraform-provider-dynamix/src/branch/main/wiki/1.1.0/03.-Обзор-облачной-платформы-DYNAMIX.md). ```terraform # 1. Initialize DYNAMIX plugin and connection to DYNAMIX cloud controller # NOTE: in this example credentials are expected to come from # DYNAMIX_APP_ID and DYNAMIX_APP_SECRET environmental variables - set them # in the shell before calling terraform. # Alternatively you may define plugin parameters app_id and app_secret in # the TF file, however, this may not be secure if you plan to share this TF # file with others. provider "dynamix" { authenticator = "decs3o" controller_url = "<>" # specify correct DYNAMIX controller URL, e.g. "https://ds1.digitalenergy.online" oauth2_url = "<>" # specify corresponding DYNAMIX OAUTH2 URL, e.g. "https://sso.digitalenergy.online" app_id = "<>" # application secret to access DYNAMIX cloud API in 'decs3o' and 'bvs' authentication mode, e.g. "ewqfrvea7s890avw804389qwguf234h0otfi3w4eiu" app_secret = "<>" # application ID to access DYNAMIX cloud API in 'decs3o' and 'bvs' authentication mode, e.g. "ewqfrvea7s890avw804389qwguf234h0otfi3w4eiu" # allow_unverified_ssl = true } # 2. Load account to use - new VM will belong to this account data "dynamix_account" "my_account" { account_id = # Specify account ID } # 3. Load OS image to use for VM deployment data "dynamix_image" "os_image" { image_id = # Specify OS image id, e.g. 1234. You can get accessible image id from data source "dynamix_image_list" } # 4. Create new Resource Group in the selected account, new VM will be created in this RG resource "dynamix_resgroup" "my_rg" { name = "NewRgByTF" account_id = data.dynamix_account.my_account.account_id gid = # Grid (platform) ID # if you want to set resource quota on this Resource Group, uncomment # the following code fragment # quota { # cpu = 8 # CPU limit # ram = 8912 # RAM limit in MB # disk = 96 # disk volume limit in GB #} } # 5. Create extra disk, which will be attached to the new VM. # This step is optional - if you do not want extra disks on your VM, skip it # and comment out extra_disks parameter when creating VM below. resource "dynamix_disk" "extra_disk" { disk_name = "extra-disk-for-vm" account_id = data.dynamix_account.my_account.account_id gid = # Grid (platform) ID size_max = 5 # disk size in GB type = "D" # disk type, always use "D" for extra disks sep_id = data.dynamix_image.os_image.sep_id # use the same SEP ID as the OS image pool = "<>" # consult your DYNAMIX platform admin for configured storage pool names } # 6. Create virtual machine (a compute of type KVM VM x86 in this example) # Now that we have all necessary components at hand, we may create a virtual machine. # This VM will be based on the previsouly obtained OS image, located in the specified # Resource Group, directly connected to an external network, have a boot disk of # specified size and one extra disk attached. resource "dynamix_kvmvm" "my_new_vm" { name = "tf-managed-vm" driver = "KVM_X86" # Compute virtualization driver rg_id = dynamix_resgroup.my_rg.id cpu = 1 # CPU count ram = 1024 # RAM size in MB, must be even number, ideally a power of 2 boot_disk_size = 10 # Boot disk size in GB image_id = data.dynamix_image.os_image.image_id description = "Test KVM VM Compute managed by Terraform" extra_disks = [ dynamix_disk.extra_disk.id ] network { net_type = "EXTNET" net_id = <> # specify external network ID to use, consult your DYNAMIX platform admin for correct IDs # ip_address = "<>" # you may optionally request a specific IP address } } ```