CZ 
09.03.2026 Františka VÍTEJTE V MÉM SVĚTĚ

An English translation is available for this article. Pro tento článek je dostupný anglický překlad.
Terraform and VMware Cloud Director Provider for Beginners

Terraform a VMware Cloud Director Provider pro začátečníky

| Petr Bouška - Samuraj |
Terraform je nástroj typu Infrastructure as Code (IaC), který umožňuje definovat, nasazovat a spravovat infrastrukturu deklarativním způsobem pomocí konfiguračních souborů. Můžeme pomocí něj vytvářet například vApp, VM a sítě. Popíšeme si základy použití Terraform, specificky se budeme věnovat práci s cloudovou infrastrukturou VMware Cloud Director (VCD). Využijeme oficiální Terraform Provider for VMware Cloud Director.
zobrazeno: 1 139x (692 CZ, 447 EN) | Komentáře [0]

Pozn.: Tuto oblast jsem studoval pouze několik dní z oficiální dokumentace a dalších materiálů na internetu. Popis obsahuje základní informace. Existuje řada obecných otázek, které jsou důležité při produkčním použití. Jako optimální dělení konfiguračních souborů, využití proměnných, jmenná konvence apod. Nějaké odpovědi jsou uvedeny v oficiální dokumentaci, ale není to úplně konzistentní a nesedí s různými příklady. Znamená to další studování a testování.

HashiCorp Terraform

Terraform je softwarový nástroj vytvořený společností HashiCorp. Umožňuje využít infrastrukturu jako kód (Infrastructure as Code) k poskytování (provision) a správě (manage) infrastruktury organizace. Můžeme automatizovat životní cyklus cloudu, privátního datacentra i SaaS infrastruktury.

Terraform umožňuje bezpečně a efektivně budovat, měnit a verzovat infrastrukturu. Pro deklarativní popis se využívá jazyk HashiCorp Configuration Language (HCL), alternativně také syntaxe kompatibilní s JSON. Můžeme vytvářet prostředky (třeba vApp, sítě, VM, FW) a opakovat nasazení v různých prostředích s konzistentní konfigurací. Terraform porovná popis s aktuálním stavem a provede pouze nezbytné změny. Můžeme integrovat do CI/CD pipeline (DevOps procesů).

Terraform State

Pomocí Terraform můžeme definovat nové prostředky (objekty), které se po aplikaci vytvoří v infrastruktuře. Terraform ukládá stav (State) spravované infrastruktury a konfigurace do souboru terraform.tfstate. Používá se k mapování zdrojů deklarovaných v konfiguraci na skutečné objekty v cílové infrastruktuře. Obsahuje informace o identitách a atributech vytvořených prostředků. Pomocí stavu určuje Terraform rozdíly mezi aktuálním a žádaným stavem, které je potřeba aplikovat.

Terraform State file terraform.tfstate

Terraform očekává, že je jediný, kdo vytváří (nebo ničí) objekty a ukládá jejich identitu do stavu. Takže existuje jednoznačné (jeden na jednoho) mapování mezi nakonfigurovanými instancemi zdrojů a vzdálenými objekty. Pokud to tak není, tak máme k dispozici příkazy pro obnovu stavu, import externě vytvořených objektů, zapomenutí objektů nebo základní úpravu stavu. To jsou pokročilejší operace, kterým se tento článek nevěnuje.

Stavový soubor je tedy důležitý a neměli bychom o něj přijít (pokud s Terraformem pracuje více lidí, tak bychom jej měli sdílet). Když objekt existuje ve stavovém souboru, ale nenachází se v konfiguraci, tak při aplikaci dojde k jeho odstranění. Pokud vytvoříme konfiguraci objektu (blok resource), který již existuje v infrastruktuře, ale informace o něm nemáme ve stavu, tak při aplikaci dojde k chybě.

Error: error creating vApp Demo-vApp: error executing task request: error instantiating a new vApp:: API Error: 400: [ ]
 The VMware Cloud Director entity Demo-vApp already exists.

Pozn.: Pokud v konfiguraci definujeme pouze nový objekt, který chceme v infrastruktuře vytvořit, tak Terraform pracuje pouze s ním a existující objekty infrastruktury ignoruje. Jinak řečeno pracuje se pouze s objekty popsanými v konfiguračních souborech.

Oficiální dokumentace

Instalace (na Windows)

Terraform CLI

Terraform můžeme provozovat na různém operačním systému jako Windows, macOS nebo Linux (či využít Windows Subsystem for Linux). Z oficiální stránky Install Terraform stáhneme poslední verzi (v době psaní článku 1.14.4). Na Windows jde o jeden EXE soubor, který uložíme někde na disku a ideálně přidáme jeho cestu do systémové proměnné prostředí PATH.

Ověřit verzi můžeme v příkazové řádce:

C:\>terraform -version
Terraform v1.14.4
on windows_amd64

Microsoft Visual Studio Code (VS Code)

Jako editor pro Terraform (HCL) soubory se velmi často využívá Visual Studio Code. Existuje pro něj oficiální HashiCorp Terraform rozšíření. Zvýrazňuje syntaxi, má automatické doplňování, validaci atd. Instalaci stáhneme z oficiálních stránek Visual Studio Code.

Po instalaci a spuštění nainstalujeme rozšíření (v levém panelu klikneme na ikonu Extensions (Ctrl+Shift+X)):

  • HashiCorp Terraform
  • HashiCorp HCL

VMware Cloud Director Provider

Terraform využívá binární pluginy nazývané poskytovatelé (Providers) k interakci s cloudovými službami, SaaS a dalšími API. Terraform konfigurace musí deklarovat, které poskytovatele vyžaduje, aby je Terraform mohl nainstalovat a používat. HashiCorp udržuje Terraform Registry, odkud můžeme získat veřejné poskytovatele a moduly.

Existuje oficiální VMware Cloud Director Provider vmware/vcd. Aktuální verze 3.14 podporuje Cloud Director (VCD) verze 10.4, 10.5 a 10.6. Dokumentace VMware Cloud Director Provider 3.14. Umožňuje definovat Cloud Director infrastrukturu jako kód v konfiguračních souborech Terraform. Můžeme definovat prostředky, které se automatizovaně zřizují (provisioning) nebo odstraňují (deprovisioning).

Náš Terraform projekt pro VMware Cloud Director (VCD)

Terraform používá konfigurační soubory v HCL jazyce, což jsou textové soubory s příponou .tf. Když provádíme operace pomocí Terraform CLI, tak se načtou všechny konfigurační soubory z aktuálního adresáře a vyřeší se závislosti v naší konfiguraci. To umožňuje organizovat konfiguraci do více souborů, což je doporučeno. Pojmenování souborů a rozdělení obsahu záleží na nás. Určité příklady jsou v Terraform dokumentaci a tutoriálech.

Na disku vytvoříme složku pro náš VCD projekt (v příkladu jde o d:\VCD-terraform). Zde budeme vytvářet jednotlivé konfigurační soubory. Ve VS Code otevřeme vytvořenou složku pomocí File - Open Folder.

V našem příkladu budeme vytvářet soubory

  • terraform.tf - konfigurace Terrafomu a VMware Cloud Director Provider
  • variables.tf - definice názvů proměnných
  • terraform.tfvars - přiřazení hodnot proměnným
  • output.tf - výpis informací o existujících objektech infrastruktury
  • main.tf - konfigurace prostředků, vytváření infrastrukturních objektů ve VCD
Visual Studio Code - Terraform project - terraform.tf file

Konfigurace Terraformu a VCD poskytovatele

Vytvoříme soubor terraform.tf, do kterého vložíme konfiguraci samotného Terrafomu (blok terraform), včetně určení, jaké poskytovatele nainstalovat. Přidáme konfiguraci VMware Cloud Director poskytovatele (blok provider), kterou bychom mohli umístit i do jiného souboru.

# Version and providers requirement
terraform {
  required_version = ">= 1.5.0"

  required_providers {
    vcd = {
      source  = "vmware/vcd"
      version = "~> 3.14"
    }
  }
}

# Configure the VMware Cloud Director Provider
provider "vcd" {
  user                 = var.vcd_user
  password             = var.vcd_pass
  auth_type            = "integrated"
  org                  = var.vcd_org
  vdc                  = var.vcd_vdc
  url                  = var.vcd_url
  max_retry_timeout    = var.vcd_max_retry_timeout
  allow_unverified_ssl = var.vcd_allow_unverified_ssl
  logging              = var.vcd_log
  logging_file         = var.vcd_log_file
}

Definice proměnných

V řadě případů (opakovaný údaj, znovupoužitelnost) se doporučuje do konfiguračních souborů nevkládat přímo hodnoty, ale využít proměnné. Ty musíme nejprve definovat a pak zadat jejich hodnotu. Proměnné jsme použili již v konfiguraci VCD poskytovatele. Pro definici si vytvoříme soubor variables.tf.  V definici proměnné můžeme určit řadu parametrů, jako typ, validaci, popis, ale vše je volitelné.

Můžeme použít pouze prázdnou definici variable <LABEL> { }. Proměnné v konfiguraci odkazujeme pomocí var.<NAME>.

# Logging
variable "vcd_log" {
  description = "Enable Logging"
  type = bool
}
variable "vcd_log_file" {
  description = "Logging File"
  type = string
}

# VMware Cloud Director variables
variable "vcd_user" {
  description = "VCD username"
  type = string
}
variable "vcd_pass" {
  description = "VCD username password"
  type = string
  sensitive = true
}
variable "vcd_org" {
  description = "VMware Cloud Director Organization"
  type = string
}
variable "vcd_vdc" {
  description = "Virtual Data Center"
  type = string
}
variable "vcd_url" {
  description = "VCD API URL"
  type = string
}
variable "vcd_max_retry_timeout" {
  type = number
}
variable "vcd_allow_unverified_ssl" {
  description = "Allow unverified SSL"
  type = bool
}
variable "vcd_catalog_name" { 
  description = "VCD Catalog"
  type = string
}
variable "vcd_template_name" {
  description = "Catalog Template"
  type = string
}

Přiřazení hodnot proměnným

Přiřazení hodnot proměnným můžeme provést několika způsoby. Například pomocí parametru při volání Terraform CLI, využít proměnné prostředí nebo soubor s definicí proměnných. Zde použijeme soubor terraform.tfvars.

# Logging
vcd_log = "false"
vcd_log_file = "vcd-debug.log"

# VMware Cloud Director Connection Variables
vcd_org = "Firma"
vcd_vdc = "Firma vDC"
vcd_url = "https://server.domain.com/api"
vcd_user = "test2"
vcd_pass = "XXX"
vcd_max_retry_timeout = "240"
vcd_allow_unverified_ssl = false

# Catalog
vcd_catalog_name = "Firma_catalog"
vcd_template_name = "template-Alma"

Připojení do VMware Cloud Director

Přihlašovací údaje

Pro připojení do VMware Cloud Director jsou potřeba credentials (přihlašovací údaje) s dostatečným oprávněním (rolí). To je samozřejmě velmi citlivá věc. Zde si ukazujeme nejjednodušší metodu speciálně vytvořený uživatel a zadání jména a hesla. Můžeme také využít Bearer nebo API token či SAML. Pokud údaje zadáme do souboru, tak tento soubor musíme chránit a neukládat jej do Gitu.

Alternativně můžeme proměnné (třeba heslo) zadávat při spuštění:

terraform apply -var vcd_pass = "XXX"

Parametry připojení

V tomto článku se připojujeme do určité organizace (tenantu) a určitého VDC. Nejsme Sys Admin spravující více organizací. Při konfiguraci prostředků můžeme určit Org a VDC. To dělat nebudeme, takže se použijí tyto nastavené hodnoty u poskytovatele.

V parametrech pro připojení k VMware Cloud Director musíme zadat správné údaje našeho prostředí. Na jaké adrese (URL) běží Cloud Director API pro připojení Terraformu. Název naší organizace a Virtual Data Center, ve kterém se budou API operace provádět. Název organizace nalezneme pod Administration - Settings - General - Organization name (ne Organization full name).  Název vDC nalezneme pod Data Centers - naše vDC - Settings - General - Name.

názvu organizace se rozlišují velká a malá písmena. Pokud nezadáme název správně, tak dostaneme chybu, že nebyla organizace nalezena.

Error: org FIrma not found: [ENF] entity not found

Pokud narazíme na problémy, tak můžeme v poskytovateli zapnout logování API volání (požadavky a odpovědi, plus debug) do souboru.

Inicializace Terraform workspace

Když máme připravenu základní Terraform konfiguraci, tak musíme poprvé provést inicializaci pracovního adresáře. Dojde ke stažení určeného poskytovatele. Inicializaci provedeme CLI příkazem terraform init, který musíme spustit v projektové složce. Ve VS Code můžeme využít terminál (zobrazení View - Terminal).

PS D:\VCD-terraform> terraform init
Initializing the backend...
Initializing provider plugins...
- Finding vmware/vcd versions matching "~> 3.14"...
- Installing vmware/vcd v3.14.1...
- Installed vmware/vcd v3.14.1 (signed by a HashiCorp partner, key ID 8BF53DB49CDB70B0)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://developer.hashicorp.com/terraform/cli/plugins/signing
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

Ověření konfigurace

Můžeme provést ověření syntaxe a vnitřní konzistence naší konfigurace. Nedochází ke spuštění, ale pouze kontrole kódu.

PS D:\VCD-terraform> terraform validate
Success! The configuration is valid.

VMware Cloud Director Resources (prostředky / zdroje / objekty)

Prostředek (Resource) je jakýkoliv objekt infrastruktury, který chceme vytvořit nebo spravovat. Druhy prostředků závisí na nainstalovaných poskytovatelích (Providers). V každém prostředku můžeme použít různé argumenty, které definují jeho vlastnosti.

VMware Cloud Director Provider nabízí řadu prostředků (detailní popis nalezneme v dokumentaci), například:

Zjištění informací o existujících objektech (prostředcích)

Zdroje dat (Data Sources) načítají data od poskytovatele, ale nevytváří ani nemění prostředky. Používá se blok data <TYPE> <LABEL>.  Type určuje typ zdroje dat (prostředku). Label určuje jméno objektu (štítek). Můžeme pak odkazovat na načtená data pomocí data.<type>.<label>.<attribute>. Uvnitř bloku musíme použít (v našich příkladech) minimálně argument name, kde určíme název prostředku daného typu.

Načtené (nebo nakonfigurované) informace můžeme zobrazit v příkazové řádce pomocí bloku output <LABEL>.  Pomocí povinného argumentu value určíme vrácenou hodnotu (může být vypočtena). My se zde odkazujeme na načtený objekt a můžeme jej zobrazit celý nebo některý jeho atribut.

Pro příklad vytvoříme soubor output.tf (ten se běžně používá jako výstup pro moduly), kde načteme informace o vApp Demo-vApp a zobrazíme seznam jmen VM, která se v ní nachází.

# read vApp details
data "vcd_vapp" "my-vapp" {
  name = "Demo-vApp"
}

# display vApp details
output "vapp-details" {
  value = data.vcd_vapp.my-vapp.vm_names
}

Vyhodnocení konfigurace (terraform plan) - načtení a zobrazení dat

Když máme připravenou konfiguraci (ať načítání zdrojů dat nebo vytváření prostředků), tak je další krok použít Terraform CLI příkaz terraform plan. Ten vyhodnotí konfiguraci a určí požadovaný stav všech deklarovaných prostředků. Poté porovná tento stav se skutečnými objekty infrastruktury. A zobrazí popis změn k dosažení požadovaného stavu. Neprovádí žádné změny infrastruktury, pouze předkládá plán změn.

Pokud existují výstupní hodnoty (blok output), tak se díky terraform plan zobrazí (reportují).

PS D:\VCD-terraform> terraform plan  
data.vcd_vapp.my-vapp: Reading...
data.vcd_vapp.my-vapp: Read complete after 3s [id=urn:vcloud:vapp:8855943a-e16a-416e-bae5-0fd1dfc251e3]

Changes to Outputs:
  + vApp-details = [
      + "Demo-VM",
    ]

You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.

-------------------------------------------------------------------------------------------------------------------------

Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run
 "terraform apply" now.

Můžeme také použít příkaz terraform apply. Pokud v konfiguraci nemáme nové prostředky (blok resource), tak se pouze uloží tyto hodnoty (načtené a výstupy) do stavu (State). Nedochází ke změně infrastruktury.

PS D:\VCD-terraform> terraform apply
data.vcd_vapp.my-vapp: Reading...
data.vcd_vapp.my-vapp: Read complete after 2s [id=urn:vcloud:vapp:8855943a-e16a-416e-bae5-0fd1dfc251e3]

Changes to Outputs:
  + vApp-details = [
      + "Demo-VM",
    ]

You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

vApp-details = tolist([
  "Demo-VM",
])

Uložené výstupy (do State) můžeme zobrazit pomocí terraform output.

PS D:\VCD-terraform> terraform output
vApp-details = tolist([
  "Demo-VM",
])

Vytvoření nových objektů (provisioning infrastructure)

Pro konfiguraci prostředků se využívá blok resource <TYPE> <LABEL>. Musíme určit typ prostředku (Type) od našeho poskytovatele. A unikátní jméno prostředku - štítek objektu (Label), který se používá ke sledování prostředku ve stavovém souboru. V konfiguraci můžeme odkazovat na prostředek pomocí <type>.<label>.<attribute>. Uvnitř bloku resource konfigurujeme argumenty daného prostředku.

V našem projektu vytvoříme soubor main.tf, do kterého vložíme různé konfigurační bloky pro různé objekty.

Vytvoření nové vApp

Nakonfigurujeme novou vApp Demo-vApp.

# create vApp
resource "vcd_vapp" "Demo" {
  name = "Demo-vApp"
}

Připojení sítě

Do vApp připojíme existující síť organizace Demo_net. Nastavujeme závislost, že se nejprve musí dokončit vApp, než Terraform začne pracovat na síti.

# add vApp network attached to existing Org network
resource "vcd_vapp_org_network" "vappOrgNet" {
  vapp_name        = vcd_vapp.Demo.name
  org_network_name = "Demo_net"
  depends_on       = [ vcd_vapp.Demo ]
}

Načtení šablony

Zjistíme informace o našem katalogu a v něm nalezneme určitou šablonu, z které budeme vytvářet VM.

# read Catalog
data "vcd_catalog" "my-catalog" {
  name = var.vcd_catalog_name
}

# read Catalog Template
data "vcd_catalog_vapp_template" "my-vapp-template" {
  catalog_id = data.vcd_catalog.my-catalog.id
  name       = var.vcd_template_name
}

Vytvoření VM ze šablony

Vytvoříme VM z předem určené šablony. Definujeme jeho parametry (po vytvoření dojde k aktualizaci). Přiřazujeme síť s manuálně zadanou IP adresou (musí spadat do daného rozsahu). Po vytvoření VM automaticky nastartuje (můžeme změnit argumentem power_on).

# create VM from template wtih manual IP assignment
resource "vcd_vapp_vm" "DemoVM" {
  vapp_name        = vcd_vapp.Demo.name
  name             = "Demo-VM"
  computer_name    = "Demo-VM"
  vapp_template_id = data.vcd_catalog_vapp_template.my-vapp-template.id
  memory           = 2048 
  cpus             = 2
  cpu_cores        = 1
  depends_on       = [ vcd_vapp_org_network.vappOrgNet ]

  network {
    type               = "org"
    name               = vcd_vapp_org_network.vappOrgNet.org_network_name
    ip_allocation_mode = "MANUAL"
    ip                 = "172.30.21.100"
    is_primary         = true
  }
}

Aplikace změn konfigurace (terraform apply)

Poslední krok je (provedení) aplikace změn dle Terraform plánu, tedy vlastní vytvoření nebo změna objektů (nebo rušení) podle naší konfigurace.

Důležitá jsou oprávnění uživatele, kterým se připojujeme do Cloud Director (VCD). Když třeba nechceme použít roli Organization Administrator. Zkoušel jsem vApp Author, který mohl vytvořit vApp, ale nedokázal načíst katalog (i když ta práva by měl mít). Zobrazovala se chyba

Error: [catalog read DS] error retrieving catalog Firma_catalog: [ENF] entity not found - no records found for catalog
 'Firma_catalog' in org 'Firma'

Pozn.: Před aplikací můžeme nejprve použít Terraform CLI příkaz terraform plan a zkontrolovat výstup.

Pro provedení operací navržených Terraform plánem se používá Terraform CLI příkaz terraform apply. Příkaz vytvoří plán provedení, vyzve nás k odsouhlasení tohoto plánu (zadáme yes) a provede uvedené operace.

Visual Studio Code - Terraform project - terminal - terraform apply
PS D:\VCD-terraform> terraform apply
data.vcd_catalog.my-catalog: Reading...
data.vcd_catalog.my-catalog: Read complete after 3s [id=urn:vcloud:catalog:e9e5c417-cfbc-4d4d-8136-6623b8615d6d]
data.vcd_catalog_vapp_template.my-vapp-template: Reading...
data.vcd_catalog_vapp_template.my-vapp-template: Read complete after 3s [id=urn:vcloud:vapptemplate:22ad75a3-bb77-4c36-8cee-8faf7
8b60a03]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following
 symbols:
  + create

Terraform will perform the following actions:

  # vcd_vapp.Demo will be created
  + resource "vcd_vapp" "Demo" {
      + href                   = (known after apply)
      + id                     = (known after apply)
      + inherited_metadata     = (known after apply)
      + metadata               = (known after apply)
      + name                   = "Demo-vApp"
      + power_on               = false
      + status                 = (known after apply)
      + status_text            = (known after apply)
      + vapp_network_names     = (known after apply)
      + vapp_org_network_names = (known after apply)
      + vm_names               = (known after apply)

      + lease (known after apply)

      + metadata_entry (known after apply)
  }

# vcd_vapp_org_network.vappOrgNet will be created
+ resource "vcd_vapp_org_network" "vappOrgNet" {
    + id                     = (known after apply)
    + is_fenced              = false
    + org_network_name       = "Demo_net"
    + reboot_vapp_on_removal = false
    + retain_ip_mac_enabled  = false
    + vapp_name              = "Demo-vApp"
  }

# vcd_vapp_vm.DemoAS will be created
+ resource "vcd_vapp_vm" "DemoVM" {
    + accept_all_eulas               = true
    + computer_name                  = "DemoVM"
    + consolidate_disks_on_create    = false
    + cpu_cores                      = 1
    + cpu_hot_add_enabled            = false
    + cpu_limit                      = (known after apply)
    + cpu_priority                   = (known after apply)
    + cpu_reservation                = (known after apply)
    + cpu_shares                     = (known after apply)
    + cpus                           = 2
    + description                    = (known after apply)
    + expose_hardware_virtualization = false
    + extra_config                   = (known after apply)
    + firmware                       = (known after apply)
    + hardware_version               = (known after apply)
    + href                           = (known after apply)
    + id                             = (known after apply)
    + imported                       = (known after apply)
    + inherited_metadata             = (known after apply)
    + internal_disk                  = (known after apply)
    + memory                         = 2048
    + memory_hot_add_enabled         = false
    + memory_limit                   = (known after apply)
    + memory_priority                = (known after apply)
    + memory_reservation             = (known after apply)
    + memory_shares                  = (known after apply)
    + metadata                       = (known after apply)
    + name                           = "DemoVM"
    + os_type                        = (known after apply)
    + placement_policy_id            = (known after apply)
    + power_on                       = true
    + prevent_update_power_off       = false
    + security_tags                  = (known after apply)
    + sizing_policy_id               = (known after apply)
    + status                         = (known after apply)
    + status_text                    = (known after apply)
    + storage_profile                = (known after apply)
    + vapp_id                        = (known after apply)
    + vapp_name                      = "Demo-vApp"
    + vapp_template_id               = "urn:vcloud:vapptemplate:22ad75a3-bb77-4c36-8cee-8faf78b60a03"
    + vm_type                        = (known after apply)

    + boot_options (known after apply)

    + customization (known after apply)

    + metadata_entry (known after apply)

    + network {
        + adapter_type                 = (known after apply)
        + connected                    = true
        + ip                           = "172.30.21.100"
        + ip_allocation_mode           = "MANUAL"
        + is_primary                   = true
        + mac                          = (known after apply)
        + name                         = "Demo_net"
        + secondary_ip                 = (known after apply)
        + secondary_ip_allocation_mode = (known after apply)
        + type                         = "org"
      }
  }

Plan: 3 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

vcd_vapp.Demo: Creating...
vcd_vapp.Demo: Creation complete after 6s [id=urn:vcloud:vapp:8855943a-e16a-416e-bae5-0fd1dfc251e3]
vcd_vapp_org_network.vappOrgNet: Creating...
vcd_vapp_org_network.vappOrgNet: Creation complete after 5s [id=urn:vcloud:network:3be9573d-b435-4f73-ad36-734aa010e910]
vcd_vapp_vm.DemoAS: Creating...
vcd_vapp_vm.DemoAS: Still creating... [00m10s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [00m20s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [00m30s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [00m40s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [00m50s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [01m00s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [01m10s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [01m20s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [01m30s elapsed]
vcd_vapp_vm.DemoAS: Still creating... [01m40s elapsed]
vcd_vapp_vm.DemoAS: Creation complete after 1m46s [id=urn:vcloud:vm:c33102c0-77d0-4455-a220-df52dcf19658]

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
VMware Cloud Director - new vApp and VM created using Terraform

Pro terraform apply a terraform plan můžeme použít řadu parametrů, které ovlivní jeho chování. Třeba přeskočit automatické obnovení stavu.

terraform apply -refresh=false

Nebo omezit počet souběžných operací (výchozí hodnota je 10).

terraform apply -parallelism=1

Zrušení objektů (terraform destroy)

Pokud provádíme testování či vývoj, tak můžeme chtít vytvořené objekty zase zrušit (deprovision). V Terraform CLI máme k dispozici příkaz terraform destroy (reálně se použije terraform apply -destroy), který smaže všechny objekty spravované Terraform konfigurací.

Pozn.: Můžeme použít také terraform plan -destroy.

Standardně se nepovede odebrání vApp sítěvApp, pokud vApp běží, a pak ani nedojde ke smazání vApp. V konfiguraci sítě (vcd_vapp_org_network) můžeme povolit vypnutí nadřazené vApp pro odstranění sítě pomocí:

reboot_vapp_on_removal = true

Související články:

Infrastruktura jako kód - Terraform

Nástroje typu Infrastructure as Code (IaC) umožňují definovat, nasazovat a spravovat infrastrukturu deklarativním (nebo imperativním) způsobem pomocí konfiguračních souborů. Prostředky (servery, sítě, úložiště apod.) popíšeme v textovém souboru, který definuje požadovaný stav. Nástroj zajistí, že reálné prostředí odpovídá definici. Zatím se budeme věnovat nástroji Terraform.

Virtualizace

Články z populárních témat o virtualizace serverů a stanic.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

Zatím zde nejsou žádné komentáře.

Přidat komentář

Vložit tag: strong em link

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách