Данный раздел предназначен для тех, кто хорошо знаком с инструментом 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/wiki-terraform-provider-dynamix/src/branch/main/1.3.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 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. 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" 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 } } ```