Эти шаблоны можно использовать для создания ресурсов с помощью 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"
}
}