V tem članku bomo pogledali, kaj sestavlja Terraform, in postopoma uvedli lastno infrastrukturo
O vsem podrobno in v treh fazah:
1. Terraform - opis, prednosti in komponente
Terraform je orodje IaC (Infrastructure-as-Code) za gradnjo in upravljanje virtualne infrastrukture z uporabo kode.
Opazili smo več prednosti pri delu z orodjem:
-
Hitrost uvajanja novih najemnikov (virtualna okolja po meri). Običajno več ko je novih strank, več "klikov" mora osebje tehnične podpore narediti za objavo novih virov. S Terraformom lahko uporabniki spreminjajo nastavitve navideznega stroja (na primer samodejni izklop operacijskega sistema in povečanje particije navideznega diska), ne da bi potrebovali tehnično podporo ali izklopili sam stroj.
-
Takojšnje preverjanje aktivacijskega načrta novi Tennant. Z opisom infrastrukturne kode lahko takoj preverimo, kaj bo dodano in v kakšnem vrstnem redu ter v kakšnem končnem stanju bo ta ali oni virtualni stroj ali virtualno omrežje s povezavami do virtualnih strojev.
-
Sposobnost opisa najbolj priljubljenih platform v oblaku. Orodje lahko uporabite od Amazona in Google Clouda do zasebnih platform, ki temeljijo na VMware vCloud Director, ki ponujajo storitve znotraj rešitev IaaS, SaaS in PaaS.
-
Upravljajte več ponudnikov v oblaku in porazdelite infrastrukturo med njimi za izboljšanje tolerance napak z uporabo ene same konfiguracije za ustvarjanje, diagnosticiranje in upravljanje virov v oblaku.
-
Priročna uporaba za izdelavo demo stojal za testiranje programske opreme in odpravljanje napak. Ustvarite in prenesete lahko stojala za oddelek za testiranje, vzporedno testirate programsko opremo v različnih okoljih ter takoj spremenite in izbrišete vire tako, da ustvarite samo en načrt gradnje virov
"Terarij" Terraform
Na kratko smo govorili o prednostih orodja, zdaj pa ga razdelimo na njegove komponente
Ponudniki.
V Terraformu je skoraj vsako vrsto infrastrukture mogoče predstaviti kot vir. Povezavo med viri in platformo API zagotavljajo moduli ponudnika, ki omogočajo ustvarjanje virov znotraj določene platforme, na primer Azure ali VMware vCloud Director.
V okviru projekta lahko komunicirate z različnimi ponudniki na različnih platformah.
Viri (opis vira).
Opis virov vam omogoča upravljanje komponent platforme, kot so navidezni stroji ali omrežja.
Sami lahko ustvarite opis vira za ponudnika VMware vCloud Director in uporabite ta opis za ustvarjanje virov pri katerem koli ponudniku gostovanja, ki uporablja vCloud Director. Spremeniti morate le parametre preverjanja pristnosti in parametre omrežne povezave na zahtevanega ponudnika gostovanja
Oskrbovalci.
Ta komponenta omogoča izvajanje operacij za začetno namestitev in vzdrževanje operacijskega sistema po ustvarjanju virtualnih strojev. Ko ustvarite vir navideznega stroja, lahko uporabite ponudnike za konfiguracijo in povezavo prek SSH, posodobite operacijski sistem ter prenesete in zaženete skript.
Vhodne in izhodne spremenljivke.
Vhodne spremenljivke - vhodne spremenljivke za poljubne vrste blokov.
Izhodne spremenljivke vam omogočajo shranjevanje vrednosti po ustvarjanju virov in jih je mogoče uporabiti kot vhodne spremenljivke v drugih modulih, na primer v bloku Provisioners.
države.
Datoteke stanja shranjujejo informacije o konfiguraciji virov platforme ponudnika. Ko je platforma prvič ustvarjena, ni informacij o virih in pred kakršno koli operacijo Terraform posodobi stanje z dejansko infrastrukturo že opisanih virov.
Glavni namen stanj je shraniti kup objektov že ustvarjenih virov za primerjavo konfiguracije dodanih virov in objektov, da bi se izognili ponovnemu ustvarjanju in spremembam na platformi.
Informacije o stanju so privzeto shranjene v lokalni datoteki terraform.tfstate, po potrebi pa je možno uporabiti oddaljeno shrambo za timsko delo.
Prav tako lahko uvozite trenutne vire platforme v stanje za nadaljnjo interakcijo z drugimi viri, ki so bili ustvarjeni brez pomoči Terraform.
2. Vzpostavitev infrastrukture
Komponente so urejene, zdaj bomo s Terraformom postopoma ustvarili infrastrukturo s tremi virtualnimi stroji. Prvi z nameščenim proxy strežnikom nginx, drugi s shrambo datotek na osnovi Nextcloud in tretji s CMS Bitrix.
Napisali bomo kodo in jo izvedli na našem primeru
Najprej ustvarimo imenik za naš novi projekt, v katerega bodo postavljene datoteke, ki opisujejo infrastrukturo.
mkdir project01
Nato opišemo komponente infrastrukture. Terraform ustvarja relacije in obdeluje datoteke na podlagi opisa v datotekah. Same datoteke je mogoče poimenovati glede na namen blokov, ki se opisujejo, na primer network.tf - opisuje omrežne parametre za infrastrukturo.
Za opis komponent naše infrastrukture smo ustvarili naslednje datoteke:
Seznam datotek.
main.tf - opis parametrov za virtualno okolje - virtualni stroji, virtualni kontejnerji;
network.tf - opis parametrov navideznega omrežja ter pravil NAT in požarnega zidu;
variables.tf - seznam spremenljivk, ki jih uporabljamo;
vcd.tfvars - vrednosti spremenljivk projekta za modul VMware vCloud Director.
Konfiguracijski jezik v Terraformu je deklarativen in vrstni red blokov ni pomemben, razen blokov ponudnika, ker v tem bloku opisujemo ukaze, ki jih je treba izvesti pri pripravi infrastrukture in bodo izvedeni po vrstnem redu.
Bločna struktura.
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
Za opis blokov se uporablja lasten programski jezik HCL (HashiCorp Configuration Language), infrastrukturo je mogoče opisati z JSON. Izvedete lahko več o sintaksi
Konfiguracija spremenljivk okolja, variables.tf in vcd.tfvars
Najprej ustvarimo dve datoteki, ki opisujeta seznam vseh uporabljenih spremenljivk in njihovih vrednosti za modul VMware vCloud Director. Najprej ustvarimo datoteko variables.tf.
Vsebina datoteke 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" {}
Spremenljive vrednosti, ki jih prejmemo od ponudnika.
-
vcd_org_user — uporabniško ime s pravicami skrbnika organizacije,
-
vcd_org_password — uporabniško geslo,
-
vcd_org — ime organizacije,
-
vcd_org_vdc — ime virtualnega podatkovnega centra,
-
vcd_org_url - URL API-ja,
-
vcd_org_edge_name — ime virtualnega usmerjevalnika,
-
vcd_org_catalog — ime imenika s predlogami virtualnih strojev,
-
vcd_edge_external_ip — javni naslov IP,
-
vcd_edge_external_network — ime zunanjega omrežja,
-
vcd_org_hdd_sp — ime politike shranjevanja HDD,
-
vcd_org_ssd_sp — ime pravilnika za shranjevanje SSD.
In vnesite naše spremenljivke:
-
vcd_edge_local_ip_nginx — naslov IP virtualnega stroja z NGINX,
-
vcd_edge_local_ip_bitrix - IP naslov virtualnega stroja z 1C: Bitrix,
-
vcd_edge_local_ip_nextcloud — naslov IP virtualnega stroja z Nextcloud.
Z drugo datoteko ustvarimo in podamo spremenljivke za modul VMware vCloud Director v datoteki vcd.tfvars: Spomnimo se, da v našem primeru uporabljamo
Vsebina datoteke 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"
Konfiguracija omrežja, network.tf.
Okoljske spremenljivke so nastavljene, zdaj bomo nastavili povezovalno shemo virtualnega stroja - vsakemu virtualnemu stroju bomo dodelili zasebni naslov IP in uporabili ciljni NAT za "posredovanje" vrat v zunanje omrežje. Za omejitev dostopa do vrat za upravljanje bomo nastavili dostop samo za naš naslov IP.
Omrežni diagram za platformo Terraform, ki se ustvarja
Ustvarimo navidezno organizacijsko omrežje z imenom net_lan01, privzetim prehodom: 192.168.110.254 in tudi z naslovnim prostorom: 192.168.110.0/24.
Opisujemo virtualno omrežje.
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"
}
}
Ustvarimo pravila požarnega zidu, ki virtualnim strojem omogočajo dostop do interneta. V tem bloku bodo vsi virtualni viri v oblaku imeli dostop do interneta:
Opisujemo pravila za dostop VM do interneta.
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]
}
Po vzpostavitvi odvisnosti, da po obdelavi bloka vcdnetworkrouted.net nadaljujemo s konfiguracijo bloka vcdnsxvfirewallrule, skozi odvisno od. To možnost uporabljamo, ker so nekatere odvisnosti morda implicitno prepoznane v konfiguraciji.
Nato bomo ustvarili pravila, ki omogočajo dostop do vrat iz zunanjega omrežja in navedejo naš naslov IP za povezavo prek SSH s strežniki. Vsak uporabnik interneta ima dostop do vrat 80 in 443 na spletnem strežniku, uporabnik z naslovom IP 90.1.15.1 pa ima dostop do SSH vrat virtualnih strežnikov.
Dovoli dostop do vrat iz zunanjega omrežja.
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]
}
Ustvarimo Source NAT pravila za dostop do interneta iz lokalnega omrežja v oblaku:
Opisujemo pravila Source 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]
}
Za dokončanje konfiguracije omrežnega bloka dodamo ciljna pravila NAT za dostop do storitev iz zunanjega omrežja:
Dodajanje ciljnih pravil 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]
}
Dodajte pravilo NAT za prevod vrat na strežnik SSH pod Nginx.
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]
}
Dodajte pravilo NAT za prevajanje vrat na strežnik SSH z 1C-Bitrix.
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]
}
Dodajte pravilo NAT za prevajanje vrat na strežnik SSH z Nextcloud.
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]
}
Konfiguracija virtualnega okolja Main.tf
Kot smo načrtovali na začetku članka, bomo ustvarili tri virtualne stroje. Pripravljeni bodo z uporabo "Guest Customization". Omrežne parametre bomo nastavili v skladu z nastavitvami, ki smo jih določili, uporabniško geslo pa bo generirano samodejno.
Opišimo aplikacijo vApp, v kateri bodo virtualni stroji, in njihovo konfiguracijo.
Konfiguracija virtualnega stroja
Ustvarimo vsebnik vApp. Da lahko vApp in VM takoj povežemo z virtualnim omrežjem, dodamo tudi parameter depend_on:
Ustvari vsebnik
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
Ustvarimo virtualni stroj z opisom
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
}
}
Glavni parametri v opisu VM:
-
ime — ime virtualnega stroja,
-
vappname - ime aplikacije vApp, v katero želite dodati nov VM,
-
ime kataloga / ime predloge - ime kataloga in ime predloge virtualnega stroja,
-
storageprofile - privzeta politika shranjevanja.
Parametri omrežnega bloka:
-
vrsta — vrsta povezanega omrežja,
-
ime — na katero navidezno omrežje povezati VM,
-
isprimary - primarni omrežni adapter,
-
ipallocation_mode — način dodeljevanja naslovov MANUAL / DHCP / POOL,
-
ip — naslov IP za virtualni stroj, določili ga bomo ročno.
blok override_template_disk:
-
sizeinmb — velikost zagonske diskete za virtualni stroj
-
storage_profile — politika shranjevanja za disk
Ustvarimo drugi VM z opisom shrambe datotek 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 ]
}
V razdelku vcdvminternal_disk bomo opisali nov virtualni disk, ki je povezan z virtualnim strojem.
Pojasnila za blok vcdvminternaldisk:
-
bustype - tip krmilnika diska
-
sizeinmb — velikost diska
-
busnumber / unitnumber - lokacija povezave v adapterju
-
storage_profile — politika shranjevanja za disk
Opišimo najnovejši VM na Bitrixu
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
}
}
Posodabljanje OS in namestitev dodatnih skriptov
Omrežje je pripravljeno, virtualni stroji so opisani. Pred uvozom naše infrastrukture lahko izvedemo začetno oskrbo vnaprej z uporabo blokov oskrbovalcev in brez uporabe Ansible.
Oglejmo si, kako posodobiti operacijski sistem in zagnati namestitveni skript CMS Bitrix z uporabo bloka oskrbovalca.
Najprej namestimo posodobitvene pakete 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" ]
}
}
}
Oznaka komponent:
-
oskrbovalec “remote-exec” - povežite blok za oddaljeno oskrbo
-
V bloku povezave opisujemo vrsto in parametre za povezavo:
-
tip — protokol, v našem primeru SSH;
-
uporabnik — uporabniško ime;
-
geslo — uporabniško geslo. V našem primeru pokažemo na parameter vcdvappvm.nginx.customization[0].admin_password, ki shrani generirano geslo za uporabnika sistema.
-
gostitelj — zunanji naslov IP za povezavo;
-
vrata — vrata za povezavo, ki je bila predhodno določena v nastavitvah DNAT;
-
inline - seznam ukazov, ki bodo vneseni. Ukazi bodo vneseni v vrstnem redu, kot je navedeno v tem razdelku.
Na primer, dodatno izvedite namestitveni skript 1C-Bitrix. Izhod rezultata izvajanja skripta bo na voljo med izvajanjem načrta. Za namestitev skripta najprej opišemo blok:
Opišimo namestitev 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"
]
}
In takoj bomo opisali posodobitev Bitrixa.
Primer zagotavljanja 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"
]
}
}
Pomembno! Skript morda ne bo deloval, če SELinuxa ne onemogočite vnaprej! Če potrebujete podroben članek o namestitvi in konfiguraciji CMS 1C-Bitrix z uporabo bitrix-env.sh, oo lahko
3. Inicializacija infrastrukture
Inicializacija modulov in vtičnikov
Za delo uporabljamo preprost »gentleman's kit«: prenosni računalnik z operacijskim sistemom Windows 10 in distribucijski komplet z uradne spletne strani. terraform.exe init
Po opisu računalniške in omrežne infrastrukture se lotimo načrtovanja testiranja naše konfiguracije, kjer lahko vidimo, kaj bo nastalo in kako bo med seboj povezano.
-
Izvedite ukaz
- terraform plan -var-file=vcd.tfvars
. -
Dobimo rezultat
- Plan: 16 to add, 0 to change, 0 to destroy.
To pomeni, da bo po tem načrtu ustvarjenih 16 virov. -
Načrt zaženemo na ukaz
- terraform.exe apply -var-file=vcd.tfvars
.
Ustvarjeni bodo navidezni stroji, nato pa se bodo paketi, ki smo jih navedli, izvajali znotraj razdelka za zagotavljanje - OS bo posodobljen in CMS Bitrix bo nameščen.
Prejemanje podatkov o povezavi
Po izvedbi načrta želimo prejeti podatke v besedilni obliki za povezavo s strežniki, za to bomo izhodni del oblikovali na naslednji način:
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
In naslednji izhod nam pove geslo za ustvarjeni virtualni stroj:
Outputs: nginx_password = F#4u8!!N
Posledično dobimo dostop do virtualnih strojev s posodobljenim operacijskim sistemom in prednameščenimi paketi za naše nadaljnje delo. Vse je pripravljeno!
Kaj pa, če že imate obstoječo infrastrukturo?
3.1. Delovni Terraform z obstoječo infrastrukturo
Preprosto je, trenutne virtualne stroje in njihove vsebnike vApp lahko uvozite z ukazom za uvoz.
Opišimo vir vAPP in virtualni stroj.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
Naslednji korak je uvoz lastnosti virov vApp v obliki vcdvapp.<vApp> <org>.<orgvdc>.<vApp>
, kjer:
-
vApp - ime vApp;
-
org — ime organizacije;
-
org_vdc — ime virtualnega podatkovnega centra.
Uvažanje lastnosti vira vAPP
Uvozimo lastnosti virov VM v formatu: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, v katerem:
-
VM - ime VM;
-
vApp - ime vApp;
-
org — ime organizacije;
-
orgvdc je ime virtualnega podatkovnega centra.
Uvoz je bil uspešen
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.
Zdaj si lahko ogledamo nov uvoženi vir:
Uvožen vir
> 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"
}
}
Zdaj smo zagotovo pripravljeni - končali smo z zadnjo točko (uvoz v obstoječo infrastrukturo) in upoštevali smo vse glavne točke dela s Terraformom.
Orodje se je izkazalo za zelo priročno in vam omogoča, da svojo infrastrukturo opišete kot kodo, začenši od virtualnih strojev enega ponudnika oblaka do opisa virov omrežnih komponent.
Hkrati pa neodvisnost od okolja omogoča delo z lokalnimi, oblačnimi viri in celo upravljanje platforme. In če ni podprte platforme in želite dodati novo, lahko napišete svojega ponudnika in ga uporabite.
Vir: www.habr.com