F'dan l-artikolu se nħarsu lejn fiex jikkonsisti Terraform, u wkoll inniedu gradwalment l-infrastruttura tagħna stess
Dwar kollox fid-dettall u fi tliet stadji:
1. Terraform - deskrizzjoni, vantaġġi u komponenti
Terraform hija għodda IaC (Infrastructure-as-Code) għall-bini u l-ġestjoni ta 'infrastruttura virtwali bl-użu tal-kodiċi.
Aħna nnutajna diversi vantaġġi meta naħdmu mal-għodda:
-
Veloċità ta 'skjerament ta' kerrejja ġodda (ambjenti virtwali apposta). Tipikament, aktar ma jkun hemm klijenti ġodda, aktar "klikks" jeħtieġ li l-persunal ta 'appoġġ tekniku jagħmel biex jippubblika riżorsi ġodda. B'Terraform, l-utenti jistgħu jibdlu l-issettjar tal-magni virtwali (pereżempju, jagħlqu awtomatikament l-OS u jżidu l-partizzjoni tad-disk virtwali) mingħajr ma jeħtieġu appoġġ tekniku jew jagħlqu l-magna nnifisha.
-
Verifika immedjata tal-pjan ta 'attivazzjoni Tennant ġdid. Bl-użu tad-deskrizzjoni tal-kodiċi tal-infrastruttura, nistgħu niċċekkjaw immedjatament x'se jiżdied u f'liema ordni, kif ukoll f'liema stat finali se tkun din jew dik il-magna virtwali jew netwerk virtwali b'konnessjonijiet ma 'magni virtwali.
-
Kapaċità li tiddeskrivi l-aktar pjattaformi tal-cloud popolari. Tista 'tuża l-għodda minn Amazon u Google Cloud, għal pjattaformi privati bbażati fuq VMware vCloud Director, li joffru servizzi fi ħdan soluzzjonijiet IaaS, SaaS u PaaS.
-
Immaniġġja fornituri multipli tas-sħab u tqassam l-infrastruttura bejniethom biex ittejjeb it-tolleranza tal-ħsarat, billi tuża konfigurazzjoni waħda biex toħloq, tiddijanjostika u timmaniġġja r-riżorsi tal-cloud.
-
Użu konvenjenti għall-ħolqien ta 'stands demo għall-ittestjar tas-softwer u debugging. Tista 'toħloq u tittrasferixxi stands għad-dipartiment tal-ittestjar, tittestja softwer f'ambjenti differenti b'mod parallel, u tbiddel u tħassar ir-riżorsi istantanjament billi toħloq pjan wieħed biss ta' bini tar-riżorsi
"Terrarium" Terraform
Tkellimna fil-qosor dwar il-vantaġġi tal-għodda, issa ejja nkissruha fil-komponenti tagħha
Fornituri.
F'Terraform, kważi kull tip ta' infrastruttura tista' tiġi rappreżentata bħala riżorsa. Il-konnessjoni bejn ir-riżorsi u l-pjattaforma API hija pprovduta minn moduli tal-fornitur, li jippermettulek toħloq riżorsi fi pjattaforma speċifika, pereżempju, Azure jew VMware vCloud Director.
Bħala parti mill-proġett, tista' tinteraġixxi ma' fornituri differenti fuq pjattaformi differenti.
Riżorsi (deskrizzjoni tar-riżorsi).
Deskrizzjoni tar-riżorsi tippermettilek timmaniġġja komponenti tal-pjattaforma, bħal magni virtwali jew netwerks.
Tista' toħloq deskrizzjoni tar-riżorsi għall-fornitur ta' VMware vCloud Director lilek innifsek u tuża din id-deskrizzjoni biex toħloq riżorsi ma' kwalunkwe fornitur ta' hosting li juża vCloud Director. Għandek bżonn biss li tibdel il-parametri tal-awtentikazzjoni u l-parametri tal-konnessjoni tan-netwerk għall-fornitur tal-hosting meħtieġ
Fornituri.
Dan il-komponent jagħmilha possibbli li jitwettqu operazzjonijiet għall-installazzjoni inizjali u l-manutenzjoni tas-sistema operattiva wara li jinħolqu magni virtwali. Ladarba tkun ħloqt riżors ta' magna virtwali, tista' tuża provvedituri biex tikkonfigura u tikkonnettja permezz ta' SSH, taġġorna s-sistema operattiva, u tniżżel u tmexxi skript.
Input u Output varjabbli.
Input varjabbli - input varjabbli għal kwalunkwe tip ta 'blokk.
Il-varjabbli tal-output jippermettulek tiffranka l-valuri wara li toħloq ir-riżorsi u jistgħu jintużaw bħala varjabbli tal-input f'moduli oħra, pereżempju fil-blokk tal-Provvedituri.
l-Istati.
Fajls tal-Istati jaħżnu informazzjoni dwar il-konfigurazzjoni tar-riżorsi tal-pjattaforma tal-fornitur. Meta l-pjattaforma tinħoloq għall-ewwel darba, m'hemm l-ebda informazzjoni dwar ir-riżorsi u qabel kwalunkwe operazzjoni, Terraform taġġorna l-istat bl-infrastruttura reali tar-riżorsi diġà deskritti.
L-għan ewlieni tal-istati huwa li jiffrankaw mazz ta 'oġġetti ta' riżorsi diġà maħluqa biex iqabblu l-konfigurazzjoni ta 'riżorsi u oġġetti miżjuda sabiex jiġi evitat ħolqien ripetut u bidliet fil-pjattaforma.
B'mod awtomatiku, l-informazzjoni tal-istat hija maħżuna fil-fajl terraform.tfstate lokali, iżda jekk meħtieġ, huwa possibbli li tuża ħażna remota għal xogħol f'tim.
Tista 'wkoll timporta riżorsi tal-pjattaforma attwali fl-istat biex tinteraġixxi aktar ma' riżorsi oħra li mbagħad inħolqu mingħajr l-għajnuna ta 'Terraform.
2. Ħolqien ta' infrastruttura
Il-komponenti ġew riżolti, issa bl-użu ta 'Terraform se noħolqu gradwalment infrastruttura bi tliet magni virtwali. L-ewwel bis-server proxy nginx installat, it-tieni b'ħażna ta 'fajls ibbażata fuq Nextcloud u t-tielet b'CMS Bitrix.
Aħna se niktbu kodiċi u nwettquh billi tuża l-eżempju tagħna
L-ewwel, ejja noħolqu direttorju għall-proġett il-ġdid tagħna li fih se jitqiegħdu fajls li jiddeskrivu l-infrastruttura.
mkdir project01
Sussegwentement, niddeskrivu l-komponenti tal-infrastruttura. Terraform joħloq relazzjonijiet u jipproċessa fajls ibbażati fuq id-deskrizzjoni fil-fajls. Il-fajls infushom jistgħu jissemmew abbażi tal-iskop tal-blokki li qed jiġu deskritti, pereżempju, network.tf - jiddeskrivi l-parametri tan-netwerk għall-infrastruttura.
Biex niddeskrivu l-komponenti tal-infrastruttura tagħna, ħloqna l-fajls li ġejjin:
Lista ta' fajls.
main.tf - deskrizzjoni tal-parametri għall-ambjent virtwali - magni virtwali, kontenituri virtwali;
network.tf - deskrizzjoni tal-parametri tan-netwerk virtwali u regoli NAT u Firewall;
variables.tf - lista ta 'varjabbli li nużaw;
vcd.tfvars - valuri varjabbli tal-proġett għall-modulu VMware vCloud Director.
Il-lingwa tal-konfigurazzjoni f'Terraform hija dikjarattiva u l-ordni tal-blokki ma jimpurtax, ħlief għall-blokki provveditur, minħabba li f'dan il-blokk niddeskrivu l-kmandi li għandhom jiġu esegwiti meta nippreparaw l-infrastruttura u se jiġu eżegwiti fl-ordni.
Struttura tal-blokk.
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
Biex tiddeskrivi blokki, tintuża l-lingwa ta 'programmar tagħha stess HCL (HashiCorp Configuration Language); huwa wkoll possibbli li tiddeskrivi l-infrastruttura bl-użu ta' JSON. Tista' titgħallem aktar dwar is-sintassi
Konfigurazzjoni varjabbli tal-ambjent, variables.tf u vcd.tfvars
L-ewwel, ejja noħolqu żewġ fajls li jiddeskrivu l-lista tal-varjabbli kollha użati u l-valuri tagħhom għall-modulu VMware vCloud Director. L-ewwel, ejja noħolqu l-fajl variables.tf.
Kontenut tal-fajl 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" {}
Valuri varjabbli li nirċievu mingħand il-fornitur.
-
vcd_org_user — isem tal-utent bi drittijiet ta' Amministratur tal-Organizzazzjoni,
-
vcd_org_password — password tal-utent,
-
vcd_org — isem l-organizzazzjoni,
-
vcd_org_vdc — isem iċ-ċentru tad-dejta virtwali,
-
vcd_org_url - URL tal-API,
-
vcd_org_edge_name — isem tar-router virtwali,
-
vcd_org_catalog — isem tad-direttorju b'mudelli ta' magni virtwali,
-
vcd_edge_external_ip — indirizz IP pubbliku,
-
vcd_edge_external_network — isem in-netwerk estern,
-
vcd_org_hdd_sp — isem il-politika tal-ħażna tal-HDD,
-
vcd_org_ssd_sp — isem il-politika tal-ħażna SSD.
U daħħal il-varjabbli tagħna:
-
vcd_edge_local_ip_nginx — indirizz IP tal-magna virtwali b'NGINX,
-
vcd_edge_local_ip_bitrix - indirizz IP tal-magna virtwali b'1C: Bitrix,
-
vcd_edge_local_ip_nextcloud — indirizz IP tal-magna virtwali ma Nextcloud.
Bit-tieni fajl noħolqu u nispeċifikaw varjabbli għall-modulu VMware vCloud Director fil-fajl vcd.tfvars: Ejja nfakkru li fl-eżempju tagħna nużaw
Kontenut tal-fajl 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"
Konfigurazzjoni tan-netwerk, network.tf.
Il-varjabbli tal-ambjent huma stabbiliti, issa se nwaqqfu l-iskema tal-konnessjoni tal-magni virtwali - aħna ser nassenjaw indirizz IP privat għal kull magna virtwali u nużaw Destination NAT biex "tgħaddi" l-portijiet għan-netwerk estern. Biex nillimitaw l-aċċess għall-portijiet ta 'ġestjoni, aħna se nissettjaw aċċess biss għall-indirizz IP tagħna.
Dijagramma tan-netwerk għall-pjattaforma Terraform li qed tinħoloq
Noħolqu netwerk organizzattiv virtwali bl-isem net_lan01, il-portal default: 192.168.110.254, u wkoll bl-ispazju tal-indirizz: 192.168.110.0/24.
Aħna niddeskrivu netwerk virtwali.
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"
}
}
Ejja noħolqu regoli tal-firewall li jippermettu lill-magni virtwali jaċċessaw l-Internet. Fi ħdan dan il-blokk, ir-riżorsi virtwali kollha fil-cloud se jkollhom aċċess għall-Internet:
Aħna niddeskrivu r-regoli għall-aċċess tal-VM għall-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]
}
Wara li stabbilixxa d-dipendenza li wara l-ipproċessar tal-blokk vcdnetworkrouted.net, nipproċedu biex tikkonfigura l-blokk vcdnsxvfirewallrule, billi tuża jiddependi fuq. Aħna nużaw din l-għażla minħabba li xi dipendenzi jistgħu jiġu rikonoxxuti impliċitament fil-konfigurazzjoni.
Sussegwentement, se noħolqu regoli li jippermettu aċċess għall-portijiet min-netwerk estern u nindikaw l-indirizz IP tagħna għall-konnessjoni permezz ta 'SSH mas-servers. Kull utent tal-Internet għandu aċċess għall-portijiet 80 u 443 fuq is-server tal-web, u utent b'indirizz IP ta '90.1.15.1 għandu aċċess għall-portijiet SSH tas-servers virtwali.
Ħalli aċċess għall-portijiet min-netwerk estern.
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]
}
Aħna noħolqu regoli Sors NAT għall-aċċess għall-Internet minn netwerk lokali tal-cloud:
Aħna niddeskrivu r-regoli tas-Sors 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]
}
U biex tlesti l-konfigurazzjoni tal-blokka tan-netwerk, aħna nżidu r-regoli tad-Destinazzjoni NAT għall-aċċess għas-servizzi min-netwerk estern:
Żieda tar-regoli tad-Destinazzjoni 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]
}
Żid regola NAT għat-traduzzjoni tal-port lis-server SSH taħt 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]
}
Żid regola NAT għat-traduzzjoni tal-port lis-server SSH b'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]
}
Żid regola NAT għat-traduzzjoni tal-port lis-server SSH ma 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]
}
Konfigurazzjoni ta 'l-ambjent virtwali Main.tf
Kif ippjanajna fil-bidu tal-artiklu, se noħolqu tliet magni virtwali. Huma se jiġu ppreparati bl-użu ta '"Perswalizzazzjoni tal-Mistednin". Se nissettjaw il-parametri tan-netwerk skont is-settings li speċifikajna, u l-password tal-utent tiġi ġġenerata awtomatikament.
Ejja niddeskrivu l-vApp li fiha se jkunu jinsabu l-magni virtwali u l-konfigurazzjoni tagħhom.
Konfigurazzjoni tal-magna virtwali
Ejja noħolqu kontenitur vApp. Sabiex inkunu nistgħu nqabbdu immedjatament il-vApp u l-VM man-netwerk virtwali, aħna nżidu wkoll il-parametru depends_on:
Oħloq kontenitur
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
Ejja noħolqu magna virtwali b'deskrizzjoni
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
}
}
Parametri ewlenin fid-deskrizzjoni tal-VM:
-
isem — isem il-magna virtwali,
-
vappname - l-isem tal-vApp li miegħu żżid VM ġdida,
-
catalogname / templatename - isem katalogu u isem tal-mudell tal-magna virtwali,
-
storageprofile - politika tal-ħażna default.
Parametri tal-blokk tan-netwerk:
-
tip — tip ta' netwerk konness,
-
isem — liema netwerk virtwali tikkonnettja l-VM,
-
isprimary - adapter tan-netwerk primarju,
-
ipallocation_mode — Mod ta' allokazzjoni tal-indirizz MANUAL / DHCP / POOL,
-
ip — indirizz IP għall-magna virtwali, aħna se nispeċifikawha manwalment.
blokk override_template_disk:
-
sizeinmb — daqs tal-boot disk għall-magna virtwali
-
storage_profile — politika tal-ħażna għad-diska
Ejja noħolqu t-tieni VM b'deskrizzjoni tal-ħażna tal-fajls 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 ]
}
Fit-taqsima vcdvminternal_disk se niddeskrivu disk virtwali ġdid li huwa konness mal-magna virtwali.
Spjegazzjonijiet għall-blokk vcdvmininternaldisk:
-
bustype - tip ta' kontrollur tad-disk
-
sizeinmb — daqs tad-diska
-
busnumber / unitnumber - il-post tal-konnessjoni fl-adapter
-
storage_profile — politika tal-ħażna għad-diska
Ejja niddeskrivu l-aħħar VM fuq 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
}
}
Aġġorna l-OS u tinstalla skripts addizzjonali
In-netwerk huwa ppreparat, il-magni virtwali huma deskritti. Qabel ma nimportaw l-infrastruttura tagħna, nistgħu nwettqu l-proviżjonament inizjali bil-quddiem bl-użu ta’ blokki ta’ provviżorju u mingħajr ma nużaw Ansible.
Ejja nħarsu lejn kif taġġorna l-OS u tħaddem l-iskrittura tal-installazzjoni CMS Bitrix billi tuża l-blokk tal-provveditur.
L-ewwel, ejja ninstallaw pakketti ta 'aġġornament ta' 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" ]
}
}
}
Denominazzjoni tal-komponenti:
-
provisioner "remote-exec" - qabbad il-blokk tal-proviżjon remot
-
Fil-blokka tal-konnessjoni niddeskrivu t-tip u l-parametri għall-konnessjoni:
-
tip — protokoll, fil-każ tagħna SSH;
-
utent — isem tal-utent;
-
password — password tal-utent. Fil-każ tagħna, aħna nippuntaw lejn il-parametru vcdvappvm.nginx.customization[0].admin_password, li jaħżen il-password ġġenerata għall-utent tas-sistema.
-
host — indirizz IP estern għall-konnessjoni;
-
port — port għall-konnessjoni, li qabel kien speċifikat fis-settings tad-DNAT;
-
inline - elenka l-lista tal-kmandi li se jiddaħħlu. Il-kmandi jiddaħħlu fl-ordni kif indikat f'din it-taqsima.
Bħala eżempju, ejja wkoll tesegwixxi l-iskrittura ta 'installazzjoni 1C-Bitrix. L-output tar-riżultat tal-eżekuzzjoni tal-iskript se jkun disponibbli waqt li l-pjan ikun qed jaħdem. Biex tinstalla l-iskrittura, l-ewwel niddeskrivu l-blokk:
Ejja niddeskrivu l-installazzjoni ta '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"
]
}
U aħna se niddeskrivu immedjatament l-aġġornament Bitrix.
Eżempju ta' forniment ta' 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"
]
}
}
Importanti! L-iskritt jista' ma jaħdimx jekk ma tiddiżattivax SELinux minn qabel! Jekk għandek bżonn artikolu dettaljat dwar l-installazzjoni u l-konfigurazzjoni tas-CMS 1C-Bitrix billi tuża bitrix-env.sh, oo tista'
3. Inizjalizzazzjoni tal-infrastruttura
Inizjalizzazzjoni ta 'moduli u plugins
Għax-xogħol, nużaw "kit ta' gentleman" sempliċi: laptop bil-Windows 10 OS u kit ta' distribuzzjoni mill-websajt uffiċjali terraform.exe init
Wara li niddeskrivew l-infrastruttura tal-kompjuters u tan-netwerk, inniedu l-ippjanar biex nittestjaw il-konfigurazzjoni tagħna, fejn nistgħu naraw x'se jinħoloq u kif se tkun konnessa ma 'xulxin.
-
Teżegwixxi l-kmand
- terraform plan -var-file=vcd.tfvars
. -
Nirċievu r-riżultat
- Plan: 16 to add, 0 to change, 0 to destroy.
Jiġifieri skont dan il-pjan se jinħolqu 16-il riżorsi. -
Inniedu l-pjan fuq kmand
- terraform.exe apply -var-file=vcd.tfvars
.
Se jinħolqu magni virtwali, u mbagħad il-pakketti li elenkajna jiġu eżegwiti fi ħdan it-taqsima tal-provveditur - l-OS se jiġi aġġornat u CMS Bitrix se jiġi installat.
Jirċievi informazzjoni dwar il-konnessjoni
Wara li nwettqu l-pjan, irridu nirċievu data f'forma ta 'test għall-konnessjoni mas-servers; għal dan, aħna nifformattjaw is-sezzjoni tal-output kif ġej:
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
U l-output li ġej jgħidilna l-password għall-magna virtwali maħluqa:
Outputs: nginx_password = F#4u8!!N
Bħala riżultat, ikollna aċċess għal magni virtwali b'sistema operattiva aġġornata u pakketti installati minn qabel għal aktar xogħol tagħna. Kollox lest!
Imma x'jiġri jekk diġà għandek infrastruttura eżistenti?
3.1. Xogħol Terraform b'infrastruttura eżistenti
Huwa sempliċi, tista 'timporta magni virtwali kurrenti u l-kontenituri vApp tagħhom billi tuża l-kmand tal-importazzjoni.
Ejja niddeskrivu r-riżors tal-vAPP u l-magna virtwali.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
Il-pass li jmiss huwa li timporta l-proprjetajiet tar-riżorsi vApp fil-format vcdvapp.<vApp> <org>.<orgvdc>.<vApp>
, fejn:
-
vApp - isem tal-vApp;
-
org — isem l-organizzazzjoni;
-
org_vdc — isem taċ-ċentru tad-dejta virtwali.
L-importazzjoni tal-proprjetajiet tar-riżorsi vAPP
Ejja nimportaw il-proprjetajiet tar-riżorsi VM fil-format: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, F'liema:
-
VM - isem VM;
-
vApp - isem tal-vApp;
-
org — isem l-organizzazzjoni;
-
orgvdc huwa l-isem taċ-ċentru tad-dejta virtwali.
L-importazzjoni kienet suċċess
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.
Issa nistgħu nħarsu lejn ir-riżorsa l-ġdida importata:
Riżors importat
> 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"
}
}
Issa aħna definittivament lesti - aħna lesti bl-aħħar punt (importazzjoni fl-infrastruttura eżistenti) u kkunsidra l-punti ewlenin kollha ta 'ħidma ma' Terraform.
L-għodda rriżulta li kienet konvenjenti ħafna u tippermettilek tiddeskrivi l-infrastruttura tiegħek bħala kodiċi, billi tibda minn magni virtwali ta 'fornitur wieħed tas-sħab sa tiddeskrivi r-riżorsi tal-komponenti tan-netwerk.
Fl-istess ħin, l-indipendenza mill-ambjent tagħmilha possibbli li taħdem ma 'riżorsi lokali, tal-cloud, u anke tmexxi l-pjattaforma. U jekk ma jkunx hemm pjattaforma appoġġjata u trid iżżid waħda ġdida, tista 'tikteb il-fornitur tiegħek stess u tużaha.
Sors: www.habr.com