如何使用 Terraform 管理雲基礎設施

如何使用 Terraform 管理雲基礎設施

在這篇文章中我們將了解 Terraform 的組成,並逐步推出我們自己的基礎設施 使用 VMware 在雲端中 — 我們將準備三台虛擬機器用於不同的目的:代理、文件儲存和 CMS。

關於一切細節,分三個階段:

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。

我們將使用我們的範例編寫程式碼並執行它 VMware vCloud Director 上的雲。 我們的使用者會收到一個具有組織管理員權限的帳戶。如果您在另一個 VMware 雲端中使用具有相同權限的帳戶,則可以重現我們範例中的程式碼。 去!

首先,讓我們為新專案建立一個目錄,其中將放置描述基礎架構的檔案。

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 模組的變數: 讓我們回想一下,在我們的範例中,我們使用 自己的雲端mClouds,如果您與其他提供者合作,請與他們檢查這些值。 

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 管理雲基礎設施正在創建的 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 及其配置。

如何使用 Terraform 管理雲基礎設施虛擬機器配置

讓我們建立一個 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. 基礎設施初始化

如何使用 Terraform 管理雲基礎設施初始化模組和插件

工作時,我們使用簡單的「紳士套件」:一台裝有 Windows 10 作業系統的筆記型電腦和官方網站上的分發套件 terraform.io。 讓我們使用以下命令解壓縮並初始化: terraform.exe init

在描述了計算和網路基礎設施之後,我們開始計劃測試我們的配置,在這裡我們可以看到將創建什麼以及它將如何相互連接。

  1. 執行命令 - terraform plan -var-file=vcd.tfvars.

  2. 我們得到結果 - Plan: 16 to add, 0 to change, 0 to destroy. 也就是說,依照這個計劃,將會創造16個資源。

  3. 我們按照命令啟動計劃 - 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 — 虛擬資料中心的名稱。

如何使用 Terraform 管理雲基礎設施導入 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

添加評論