Terraform шаблоны для создания сервера в VMware Cloud Director

Эти шаблоны можно использовать для создания ресурсов с помощью Terraform. В официальной  документации Terraform можно найти более подробную информацию.

Инструкция по установке Terraform и его базовым операциям доступна по ссылке.

Создание сервера с диском и новой серой маршрутизируемой подсетью из образа

### Main config ### terraform { required_version = ">= 0.13" required_providers { vcd = { source = "vmware/vcd" } } } ### Providers definition ### provider "vcd" { user = "vcd_user" password = "vcd_pass" org = "org_name" vdc = "vdc_name" url = "https://vcloud.pscloud.io/api" } ### Data sources of catalog ### data "vcd_catalog" "catalog" { org = "org_name" name = "catalog_name" } data "vcd_catalog_media" "image" { org = "org_name" catalog_id = data.vcd_catalog.catalog.id name = "exist_image_name" } ### Create named disk ### resource "vcd_independent_disk" "disk" { vdc = "vdc_name" name = "volume_test" size_in_mb = "10000" storage_profile = "storage_policies_name } ### Create routed newtwork ### resource "vcd_network_routed" "net" { org = "org_name" vdc = "vdc_name" name = "new_subnet_name" edge_gateway = "edge_gateway_name" gateway = "192.168.1.1" static_ip_pool { start_address = "192.168.1.2" end_address = "192.168.1.100" } } ### Create vm from image ### resource "vcd_vm" "test_vm" { name = "test_vm" computer_name = "test-vm" os_type = "centos7_64Guest" hardware_version = "vmx-14" boot_image_id = data.vcd_catalog_media.image.id cpus = 1 memory = 1024 disk { name = vcd_independent_disk.disk.name bus_number = 1 unit_number = 0 }
guest_properties = {

    "hostname"      = "test-vm"
    "password"      = "your_password_here"
    "user-data"    = base64encode("cloud-config.yaml")
}

network { name = vcd_network_routed.net.name type = "none" ip_allocation_mode = "MANUAL" ip = "192.168.1.10" } }

Блок "Providers definition"  

Описывает конфигурацию подключения к VMware Cloud Director. Необходимо указать:

  • user - имя пользователя для входа в панель управления VCD;
  • password - пароль от пользователя выше;
  • org - название организации в панели VCD (например, 416513); 
  • vdc - название дата центра в панели VCD (например, 416513_example.kz);
  • url - URL-адрес панели VCD c api.

Блок "Data sources of catalog"

Содержит информацию для подключения к существующему каталогу с темплейтами или образами. В качестве org указываем название организации, а name и есть название самого каталога в VCD. Название образа необходимо указывать полностью, например, CentOS-7-x86_64-Minimal-2009.iso


Блок "Create named disk"

Описывает создание диска, который в дальнейшем будет подключен к серверу (диск можно будет расширять, в отличии от диска, созданного при помощи fast provisiong). В качестве storage_profile нужно указать необходимую дисковую политику, например kz-ala-1-san-nvme-h1.


Блок "Create vm from image"

Описывает создание сервера. В качестве os_type нужно обязательно указать одно из значений, соответствующее вашей операционной системе.

В guest_properties можно указать дополнительные параметры, например, имя хоста или пароль от пользователя (centos, debian, ubuntu в соответствии с дистрибутивом). В user_data указывается ряд команд, которые необходимо выполнить внутри виртуальной машины. Важно! Параметры из guest_properties будут применены только в тех случаях, когда используется облачный образ или образ, на котором уже установлены cloud-init и VMware Tools

Создание сервера (fast provisiong) с существующей подсетью из темплейта 

### Main config ### terraform { required_version = ">= 0.13" required_providers { vcd = { source = "vmware/vcd" } } } ### Providers definition ### provider "vcd" { user = "vcd_user" password = "vcd_pass" org = "org_name" vdc = "vdc_name" url = "https://vcloud.pscloud.io/api" } ### Data sources of catalog ### data "vcd_catalog" "catalog" { org = "org_name" name = "catalog_name" } data "vcd_catalog_vapp_template" "vapp" { org = "org_name" catalog_id = data.vcd_catalog.catalog.id name = "exist_template_name" } ### Create vm from template ### resource "vcd_vm" "test" { name = "test_vm" vapp_template_id = data.vcd_catalog_vapp_template.vapp.id cpus = 1 memory = 1024 network { name = "exist_subnet_name" type = "org" ip_allocation_mode = "MANUAL" ip = "192.168.0.10" } }

Создание vApp с сервером (fast provisiong) и новой изолированной подсетью из темплейта

### Main config ### terraform { required_version = ">= 0.13" required_providers { vcd = { source = "vmware/vcd" } } } ### Providers definition ### provider "vcd" { user = "vcd_user" password = "vcd_pass" org = "org_name" vdc = "vdc_name" url = "https://vcloud.pscloud.io/api" } ### Data sources of catalog ### data "vcd_catalog" "catalog" { org = "org_name" name = "catalog_name" } data "vcd_catalog_vapp_template" "vapp" { org = "org_name" catalog_id = data.vcd_catalog.catalog.id name = "exist_template_name" } ### Create vApp ### resource "vcd_vapp" "test" { name = "test" } ### Create vApp subnet ### resource "vcd_vapp_network" "vapp-net" { name = "test_net" vapp_name = vcd_vapp.test.name gateway = "192.168.1.1" prefix_length = "24" static_ip_pool { start_address = "192.168.1.2" end_address = "192.168.1.100" } } ### Create vm from template ### resource "vcd_vapp_vm" "test" { vapp_name = vcd_vapp.test.name name = "test_vm" vapp_template_id = data.vcd_catalog_vapp_template.vapp.id cpus = 1 memory = 1024 network { name = vcd_vapp_network.vapp-net.name type = "vapp" ip_allocation_mode = "MANUAL" ip = "192.168.1.10" } }

Создание vApp с сервером с диском и новой изолированной подсетью из образа

### Main config ### terraform { required_version = ">= 0.13" required_providers { vcd = { source = "vmware/vcd" } } } ### Providers definition ### provider "vcd" { user = "vcd_user" password = "vcd_pass" org = "org_name" vdc = "vdc_name" url = "https://vcloud.pscloud.io/api" } ### Data sources of catalog ### data "vcd_catalog" "catalog" { org = "org_name" name = "catalog_name" } data "vcd_catalog_media" "image" { org = "org_name" catalog_id = data.vcd_catalog.catalog.id name = "exist_image_name" } ### Create named disk ### resource "vcd_independent_disk" "disk" { vdc = "vdc_name" name = "volume_test" size_in_mb = "10000" storage_profile = "storage_policies_name } ### Create vApp ### resource "vcd_vapp" "test" { name = "test" } ### Create vApp subnet ### resource "vcd_vapp_network" "vapp-net" { name = "test_net" vapp_name = vcd_vapp.test.name gateway = "192.168.1.1" prefix_length = "24" static_ip_pool { start_address = "192.168.1.2" end_address = "192.168.1.100" } } ### Create vm from image ### resource "vcd_vapp_vm" "test" { vapp_name = vcd_vapp.test.name name = "test_vm" computer_name = "test" os_type = "centos7_64Guest" hardware_version = "vmx-14" boot_image_id = data.vcd_catalog_media.image.id cpus = 1 memory = 1024 disk { name = vcd_independent_disk.disk.name bus_number = 1 unit_number = 0 } network { name = vcd_vapp_network.vapp-net.name type = "vapp" ip_allocation_mode = "MANUAL" ip = "192.168.1.10" } }

Создание vApp c сервером с диском и новой маршрутизируемой подсетью из образа

### Main config ### terraform { required_version = ">= 0.13" required_providers { vcd = { source = "vmware/vcd" } } } ### Providers definition ### provider "vcd" { user = "vcd_user" password = "vcd_pass" org = "org_name" vdc = "vdc_name" url = "https://vcloud.pscloud.io/api" } ### Data sources of catalog ### data "vcd_catalog" "catalog" { org = "org_name" name = "catalog_name" } data "vcd_catalog_media" "image" { org = "org_name" catalog_id = data.vcd_catalog.catalog.id name = "exist_image_name" } ### Create named disk ### resource "vcd_independent_disk" "disk" { vdc = "vdc_name" name = "volume_test" size_in_mb = "10000" storage_profile = "storage_policies_name } ### Create routed newtwork ### resource "vcd_network_routed" "net" { org = "org_name" vdc = "vdc_name" name = "new_subnet_name" edge_gateway = "edge_gateway_name" gateway = "192.168.1.1" static_ip_pool { start_address = "192.168.1.2" end_address = "192.168.1.100" } } ### Create vApp ### resource "vcd_vapp" "test" { depends_on = [vcd_network_routed.net] name = "test" power_on = "true" } ### Add routed network to vApp ### resource "vcd_vapp_org_network" "routed-network" { depends_on = [vcd_vapp.test] vdc = "vdc_name" vapp_name = vcd_vapp.test.name org_network_name = vcd_network_routed.net.name ### Create vm from image ### resource "vcd_vapp_vm" "test" { vapp_name = vcd_vapp.test.name name = "test_vm" computer_name = "test" os_type = "centos7_64Guest" hardware_version = "vmx-14" boot_image_id = data.vcd_catalog_media.image.id cpus = 1 memory = 1024 disk { name = vcd_independent_disk.disk.name bus_number = 1 unit_number = 0 } network { name = vcd_network_routed.net.name type = "org" ip_allocation_mode = "MANUAL" ip = "192.168.1.10" } }
question
Не нашли подходящего ответа?
Напишите запрос в службу поддержки
Написать сейчас