在這篇文章中我們將了解 Terraform 的組成,並逐步推出我們自己的基礎設施
關於一切細節,分三個階段:
1. Terraform - 描述、優點和組件
Terraform 是一種 IaC(基礎架構即程式碼)工具,用於使用程式碼建置和管理虛擬基礎架構。
我們注意到使用該工具的幾個優點:
-
新租戶部署速度 (自訂虛擬環境)。 通常,新客戶越多,技術支援人員發布新資源所需的「點擊」次數就越多。 使用 Terraform,使用者可以更改虛擬機器設定(例如,自動關閉作業系統和增加虛擬磁碟分割),而無需技術支援或關閉機器本身。
-
即時驗證啟動計劃 新坦南特。 使用基礎設施代碼的描述,我們可以立即檢查將新增的內容以及新增的順序,以及這個或那個虛擬機器或連接到虛擬機器的虛擬網路的最終狀態。
-
能夠描述最受歡迎的雲端平台。 您可以使用該工具 從 Amazon 和 Google Cloud 到基於 VMware vCloud Director 的私人平台,在 IaaS、SaaS 和 PaaS 解決方案中提供服務。
-
管理多個雲端提供者 並在它們之間分配基礎架構以提高容錯能力,使用單一配置來建立、診斷和管理雲端資源。
-
方便用於建立演示台 用於軟體測試和調試。 您可以為測試部門建立和轉移代表,在不同環境中並行測試軟體,只需建立資源建置計劃即可立即變更和刪除資源
「玻璃容器」地形
我們簡要討論了該工具的優點,現在讓我們將其分解為各個組件
提供者。
在 Terraform 中,幾乎任何類型的基礎設施都可以表示為資源。 資源和 API 平台之間的連接由提供者模組提供,這些模組可讓您在特定平台(例如 Azure 或 VMware vCloud Director)中建立資源。
作為專案的一部分,您可以與不同平台上的不同提供者互動。
資源(資源描述)。
資源描述可讓您管理平台元件,例如虛擬機器或網路。
您可以自行為 VMware vCloud Director 提供者建立資源描述,並使用此描述為使用 vCloud Director 的任何託管提供者建立資源。 您只需將身份驗證參數和網路連線參數變更為所需的託管提供者
供給者。
此元件可以在建立虛擬機器後執行作業系統的初始安裝和維護操作。 建立虛擬機器資源後,您可以使用設定程式透過 SSH 配置和連接、更新作業系統以及下載和執行腳本。
輸入和輸出變數。
輸入變數 - 任何區塊類型的輸入變數。
輸出變數可讓您在建立資源後儲存值,並且可以用作其他模組中的輸入變數,例如在 Provisioners 區塊中。
狀態.
狀態檔案儲存有關提供者平台資源配置的資訊。 首次建立平台時,沒有有關資源的信息,在進行任何操作之前,Terraform 使用已描述的資源的真實基礎架構更新狀態。
狀態的主要目的是保存一堆已經建立的資源的對象,以便比較新增的資源和對象的配置,以避免平台的重複建立和變更。
預設情況下,狀態資訊儲存在本機 terraform.tfstate 檔案中,但如果需要,可以使用遠端儲存進行團隊工作。
您也可以將目前平台資源匯入狀態,以進一步與無需 Terraform 協助而建立的其他資源進行互動。
2. 基礎建設
元件已經整理完畢,現在使用 Terraform 我們將逐步創建具有三個虛擬機器的基礎架構。 第一個安裝了 nginx 代理伺服器,第二個安裝了基於 Nextcloud 的文件存儲,第三個安裝了 CMS Bitrix。
我們將使用我們的範例編寫程式碼並執行它
首先,讓我們為新專案建立一個目錄,其中將放置描述基礎架構的檔案。
mkdir project01
接下來,我們描述基礎設施元件。 Terraform 根據檔案中的描述建立關係並處理檔案。 檔案本身可以根據所描述的區塊的用途來命名,例如,network.tf - 描述基礎設施的網路參數。
為了描述我們的基礎設施的元件,我們建立了以下文件:
文件列表。
main.tf - 虛擬環境參數描述 - 虛擬機器、虛擬容器;
network.tf-虛擬網路參數以及NAT和防火牆規則的描述;
Variables.tf - 我們使用的變數列表;
vcd.tfvars - VMware vCloud Director 模組的專案變數值。
Terraform 中的配置語言是聲明性的,除了配置程式區塊之外,區塊的順序並不重要,因為在本區塊中,我們描述了準備基礎設施時要執行的命令,並且它們將按順序執行。
塊結構。
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
為了描述區塊,使用了它自己的程式語言 HCL(HashiCorp 配置語言);可以使用 JSON 來描述基礎設施。 您可以了解有關語法的更多信息
環境變數配置,variables.tf和vcd.tfvars
首先,我們建立兩個檔案來描述 VMware vCloud Director 模組的所有使用的變數及其值的清單。 首先,讓我們建立變數.tf 檔案。
Variables.tf 檔案的內容。
variable "vcd_org_user" {
description = "vCD Tenant User"
}
variable "vcd_org_password" {
description = "vCD Tenant Password"
}
variable "vcd_org" {
description = "vCD Tenant Org"
}
variable "vcd_org_vdc" {
description = "vCD Tenant VDC"
}
variable "vcd_org_url" {
description = "vCD Tenant URL"
}
variable "vcd_org_max_retry_timeout" {
default = "60"
}
variable "vcd_org_allow_unverified_ssl" {
default = "true"
}
variable "vcd_org_edge_name" {
description = "vCD edge name"
}
variable "vcd_org_catalog" {
description = "vCD public catalog"
}
variable "vcd_template_os_centos7" {
description = "OS CentOS 7"
default = "CentOS7"
}
variable "vcd_org_ssd_sp" {
description = "Storage Policies"
default = "Gold Storage Policy"
}
variable "vcd_org_hdd_sp" {
description = "Storage Policies"
default = "Bronze Storage Policy"
}
variable "vcd_edge_local_subnet" {
description = "Organization Network Subnet"
}
variable "vcd_edge_external_ip" {
description = "External public IP"
}
variable "vcd_edge_local_ip_nginx" {}
variable "vcd_edge_local_ip_bitrix" {}
variable "vcd_edge_local_ip_nextcloud" {}
variable "vcd_edge_external_network" {}
我們從提供者收到的變數值。
-
vcd_org_user — 具有組織管理員權限的使用者名,
-
vcd_org_password — 使用者密碼,
-
vcd_org — 組織名稱,
-
vcd_org_vdc — 虛擬資料中心的名稱,
-
vcd_org_url - API URL,
-
vcd_org_edge_name — 虛擬路由器的名稱,
-
vcd_org_catalog — 包含虛擬機器範本的目錄名稱,
-
vcd_edge_external_ip — 公用 IP 位址,
-
vcd_edge_external_network — 外部網路的名稱,
-
vcd_org_hdd_sp — HDD 儲存策略的名稱,
-
vcd_org_ssd_sp — SSD 儲存策略的名稱。
並輸入我們的變數:
-
vcd_edge_local_ip_nginx — 帶有 NGINX 的虛擬機器的 IP 位址,
-
vcd_edge_local_ip_bitrix - 具有 1C 的虛擬機器的 IP 位址:Bitrix,
-
vcd_edge_local_ip_nextcloud — Nextcloud 虛擬機器的 IP 位址。
使用第二個文件,我們在 vcd.tfvars 文件中創建並指定 VMware vCloud Director 模組的變數: 讓我們回想一下,在我們的範例中,我們使用
vcd.tfvars 檔案的內容。
vcd_org_url = "https://vcloud.mclouds.ru/api"
vcd_org_user = "orgadmin"
vcd_org_password = "*"
vcd = "org"
vcd_org_vdc = "orgvdc"
vcd_org_maxretry_timeout = 60
vcd_org_allow_unverified_ssl = true
vcd_org_catalog = "Templates"
vcd_templateos_centos7 = "CentOS7"
vcd_org_ssd_sp = "Gold Storage Policy"
vcd_org_hdd_sp = "Bronze Storage Policy"
vcd_org_edge_name = "MCLOUDS-EDGE"
vcd_edge_external_ip = "185.17.66.1"
vcd_edge_local_subnet = "192.168.110.0/24"
vcd_edge_local_ip_nginx = "192.168.110.1"
vcd_edge_local_ip_bitrix = "192.168.110.10"
vcd_edge_local_ip_nextcloud = "192.168.110.11"
vcd_edge_external_network = "NET-185-17-66-0"
網路配置,network.tf。
環境變數設定完畢,現在我們將設定虛擬機器連接方案 - 我們將為每個虛擬機器分配一個私人 IP 位址,並使用目標 NAT 將連接埠「轉送」到外部網路。 為了限制對管理連接埠的訪問,我們將僅設定對我們的 IP 位址的存取。
正在創建的 Terraform 平台的網路圖
我們建立一個名為 net_lan01 的虛擬組織網絡,預設網關:192.168.110.254,位址空間:192.168.110.0/24。
我們描述一個虛擬網路。
resource "vcd_network_routed" "net" {
name = "net_lan01"
edge_gateway = var.vcd_org_edge_name
gateway = "192.168.110.254"
dns1 = "1.1.1.1"
dns2 = "8.8.8.8"
static_ip_pool {
start_address = "192.168.110.1"
end_address = "192.168.110.253"
}
}
讓我們建立允許虛擬機器存取 Internet 的防火牆規則。 在這個區塊內,雲端中的所有虛擬資源都可以存取互聯網:
我們描述了虛擬機器存取互聯網的規則。
resource "vcd_nsxv_firewall_rule" "fw_internet_access" {
edge_gateway = var.vcdorgedgename
name = "Internet Access"
source {
gateway_interfaces = ["internal"]
}
destination {
gateway_interfaces = ["external"]
}
service {
protocol = "any"
}
depends_on = [vcdnetworkrouted.net]
}
建立了處理 vcdnetworkrouted.net 區塊後的依賴關係,我們繼續配置 vcdnsxvfirewallrule 區塊, 透過使用 依賴取決於。 我們使用此選項是因為某些依賴項可能會在配置中隱式識別。
接下來,我們將建立允許從外部網路存取連接埠的規則,並指示我們透過 SSH 連接到伺服器的 IP 位址。 任何 Internet 使用者都可以存取 Web 伺服器上的連接埠 80 和 443,IP 位址為 90.1.15.1 的使用者可以存取虛擬伺服器的 SSH 連接埠。
允許從外部網路存取連接埠。
resource "vcd_nsxv_firewall_rule" "fwnatports" {
edge_gateway = var.vcd_org_edge_name
name = "HTTPs Access"
source {
gateway_interfaces = ["external"]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "80"
}
service {
protocol = "tcp"
port = "443"
}
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {
edge_gateway = var.vcd_org_edge_name
name = "Admin Access"
source {
ip_addresses = [ "90.1.15.1" ]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "58301"
}
service {
protocol = "tcp"
port = "58302"
}
service {
protocol = "tcp"
port = "58303"
}
depends_on = [vcd_network_routed.net]
}
我們建立來源 NAT 規則用於從雲端本地網路存取 Internet:
我們描述來源 NAT 規則。
resource "vcd_nsxv_snat" "snat_local" {
edge_gateway = var.vcd_org_edge_name
network_type = "ext"
network_name = var.vcdedgeexternalnetwork
original_address = var.vcd_edge_local_subnet
translated_address = var.vcd_edge_external_ip
depends_on = [vcd_network_routed.net]
}
為了完成網路區塊的配置,我們新增用於從外部網路存取服務的目標 NAT 規則:
新增目標 NAT 規則。
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTPs"
original_address = var.vcd_edge_external_ip
original_port = 443
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTP"
original_address = var.vcd_edge_external_ip
original_port = 80
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
為Nginx下的SSH伺服器新增連接埠轉換的NAT規則。
resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH NGINX"
original_address = var.vcd_edge_external_ip
original_port = 58301
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
使用 1C-Bitrix 新增 NAT 規則以將連接埠轉換到 SSH 伺服器。
resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Bitrix"
original_address = var.vcd_edge_external_ip
original_port = 58302
translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
使用 Nextcloud 新增 NAT 規則以將連接埠轉換到 SSH 伺服器。
resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Nextcloud"
original_address = var.vcd_edge_external_ip
original_port = 58303
translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Main.tf虛擬環境配置
正如我們在文章開頭所計劃的那樣,我們將創建三個虛擬機器。 他們將使用“賓客定制”來準備。 我們將根據我們指定的設定來設定網路參數,並且使用者密碼將自動產生。
我們來描述虛擬機器所在的 vApp 及其配置。
虛擬機器配置
讓我們建立一個 vApp 容器。 為了讓我們能夠立即將 vApp 和 VM 連接到虛擬網絡,我們還添加了 dependent_on 參數:
建立一個容器
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
讓我們建立一個帶有描述的虛擬機
resource "vcd_vapp_vm" "nginx" {
vapp_name = vcd_vapp.vapp.name
name = "nginx"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nginx
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
VM描述中主要參數:
-
name — 虛擬機器的名稱,
-
vappname - 要新增虛擬機器的 vApp 的名稱,
-
Catalogname / templatename - 目錄名稱和虛擬機器範本名稱,
-
storageprofile - 預設儲存策略。
網路區塊參數:
-
type — 連接網路的類型,
-
name — 將虛擬機器連接到哪個虛擬網絡,
-
isprimary - 主網路適配器,
-
ipallocation_mode — MANUAL / DHCP / POOL 位址分配模式,
-
ip — 虛擬機器的 IP 位址,我們將手動指定它。
override_template_disk 塊:
-
sizeinmb — 虛擬機器的啟動磁碟大小
-
storage_profile — 磁碟的儲存策略
讓我們建立第二個虛擬機,其中包含 Nextcloud 檔案儲存的描述
resource "vcd_vapp_vm" "nextcloud" {
vapp_name = vcd_vapp.vapp.name
name = "nextcloud"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nextcloud
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
resource "vcd_vm_internal_disk" "disk1" {
vapp_name = vcd_vapp.vapp.name
vm_name = "nextcloud"
bus_type = "paravirtual"
size_in_mb = "102400"
bus_number = 0
unit_number = 1
storage_profile = var.vcd_org_hdd_sp
allow_vm_reboot = true
depends_on = [ vcd_vapp_vm.nextcloud ]
}
在 vcdvminternal_disk 部分中,我們將描述連接到虛擬機器的新虛擬磁碟。
vcdvminternaldisk 區塊的說明:
-
Bustype - 磁碟控制器類型
-
sizeinmb — 磁碟大小
-
總線號碼/單元號碼 - 適配器中的連接位置
-
storage_profile — 磁碟的儲存策略
讓我們來描述一下 Bitrix 上最新的虛擬機
resource "vcd_vapp_vm" "bitrix" {
vapp_name = vcd_vapp.vapp.name
name = "bitrix"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_bitrix
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "81920"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
更新作業系統並安裝其他腳本
網路已準備好,虛擬機器已描述。 在匯入基礎架構之前,我們可以使用設定程式區塊提前進行初始配置,而無需使用 Ansible。
讓我們看看如何使用配置程式區塊更新作業系統並執行 CMS Bitrix 安裝腳本。
首先,讓我們安裝 CentOS 更新套件。
resource "null_resource" "nginx_update_install" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip" ]
}
}
}
組件名稱:
-
配置程式“remote-exec” - 連接遠端配置區塊
-
在連接塊中,我們描述連接的類型和參數:
-
type — 協議,在我們的例子中是 SSH;
-
用戶——用戶名;
-
密碼——用戶密碼。 在我們的例子中,我們指向參數vcdvappvm.nginx.customization[0].admin_password,它儲存為系統使用者產生的密碼。
-
host——用於連線的外部IP位址;
-
port — 連接端口,之前在 DNAT 設定中指定;
-
內聯 - 列出將輸入的命令清單。 命令將按照本節中所示的順序輸入。
作為範例,我們另外執行 1C-Bitrix 安裝腳本。 計劃運行時,腳本執行結果的輸出將可用。 要安裝腳本,首先我們描述該區塊:
讓我們來描述一下1C-Bitrix的安裝。
provisioner "file" {
source = "prepare.sh"
destination = "/tmp/prepare.sh"
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"
]
}
我們將立即描述 Bitrix 更新。
1C-Bitrix 配置範例。
resource "null_resource" "install_update_bitrix" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.bitrix.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58302"
timeout = "60s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip",
"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",
"chmod +x /tmp/bitrix-env.sh",
"/tmp/bitrix-env.sh"
]
}
}
重要的! 如果不提前停用 SELinux,該腳本可能無法運作! 如果您需要使用 bitrix-env.sh 安裝和設定 CMS 1C-Bitrix 的詳細文章,您可以
3. 基礎設施初始化
初始化模組和插件
工作時,我們使用簡單的「紳士套件」:一台裝有 Windows 10 作業系統的筆記型電腦和官方網站上的分發套件 terraform.exe init
在描述了計算和網路基礎設施之後,我們開始計劃測試我們的配置,在這裡我們可以看到將創建什麼以及它將如何相互連接。
-
執行命令
- terraform plan -var-file=vcd.tfvars
. -
我們得到結果
- Plan: 16 to add, 0 to change, 0 to destroy.
也就是說,依照這個計劃,將會創造16個資源。 -
我們按照命令啟動計劃
- terraform.exe apply -var-file=vcd.tfvars
.
將建立虛擬機,然後我們列出的軟體包將在配置程式部分中執行 - 將更新作業系統並安裝 CMS Bitrix。
接收連接訊息
執行計劃後,我們希望接收文字形式的資料以連接到伺服器,為此我們將格式化輸出部分,如下所示:
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
以下輸出告訴我們所建立的虛擬機器的密碼:
Outputs: nginx_password = F#4u8!!N
因此,我們可以存取具有更新作業系統和預先安裝軟體包的虛擬機,以進行進一步的工作。 一切準備就緒!
但是如果您已經擁有現有的基礎設施怎麼辦?
3.1. 使用現有基礎架構使用 Terraform
很簡單,您可以使用 import 命令匯入目前的虛擬機器及其 vApp 容器。
讓我們來描述一下vAPP資源和虛擬機器。
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
下一步是以以下格式匯入 vApp 資源的屬性 vcdvapp.<vApp> <org>.<orgvdc>.<vApp>
,其中:
-
vApp - vApp 名稱;
-
org——組織名稱;
-
org_vdc — 虛擬資料中心的名稱。
導入 vAPP 資源屬性
讓我們以以下格式匯入 VM 資源的屬性: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, 其中:
-
VM - 虛擬機器名稱;
-
vApp - vApp 名稱;
-
org——組織名稱;
-
orgvdc 是虛擬資料中心的名稱。
導入成功
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Import prepared!
Prepared vcd_vapp_vm for import
vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
現在我們可以查看新匯入的資源:
進口資源
> terraform show
...
# vcd_vapp.Monitoring:
resource "vcd_vapp" "Monitoring" {
guest_properties = {}
href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"
id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"
ip = "allocated"
metadata = {}
name = "Monitoring"
org = "mClouds"
status = 4
status_text = "POWERED_ON"
vdc = "mClouds"
}
…
# vcd_vapp_vm.Zabbix:
resource "vcd_vapp_vm" "Zabbix" {
computer_name = "Zabbix"
cpu_cores = 1
cpus = 2
expose_hardware_virtualization = false
guest_properties = {}
hardware_version = "vmx-14"
href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
internal_disk = [
{
bus_number = 0
bus_type = "paravirtual"
disk_id = "2000"
iops = 0
size_in_mb = 122880
storage_profile = "Gold Storage Policy"
thin_provisioned = true
unit_number = 0
},
]
memory = 8192
metadata = {}
name = "Zabbix"
org = "mClouds"
os_type = "centos8_64Guest"
storage_profile = "Gold Storage Policy"
vapp_name = "Monitoring"
vdc = "mClouds"
customization {
allow_local_admin_password = true
auto_generate_password = true
change_sid = false
enabled = false
force = false
join_domain = false
join_org_domain = false
must_change_password_on_first_login = false
number_of_auto_logons = 0
}
network {
adapter_type = "VMXNET3"
ip_allocation_mode = "DHCP"
is_primary = true
mac = "00:50:56:07:01:b1"
name = "MCLOUDS-LAN01"
type = "org"
}
}
現在我們已經完全準備好了 - 我們已經完成了最後一點(導入現有基礎設施),並考慮了使用 Terraform 的所有要點。
事實證明,該工具非常方便,可讓您將基礎架構描述為程式碼,從一個雲端提供者的虛擬機器開始到描述網路元件的資源。
同時,獨立於環境使得可以使用本地、雲端資源,甚至管理平台。 如果沒有受支援的平台並且您想要新增新的平台,您可以編寫自己的提供者並使用它。
來源: www.habr.com