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"
  }
}
Помогла ли вам эта информация?
Не можете найти ответ на свой вопрос?
Напишите запрос в службу поддержки
Написать сейчас