
NĂ« kĂ«tĂ« artikull, do tĂ« shqyrtojmĂ« pĂ«rbĂ«rĂ«sit e Terraform dhe do tĂ« krijojmĂ« hap pas hapi infrastrukturĂ«n tonĂ« â do tĂ« pĂ«rgatisim tre VM pĂ«r qĂ«llime tĂ« ndryshme: proxy, ruajtje skedarĂ«sh dhe CMS.
Të gjitha në detaje dhe në tre etapa:
1. Terraform â pĂ«rshkrimi, pĂ«rparĂ«sitĂ« dhe pĂ«rbĂ«rĂ«sit
Terraform është një mjet IaC (Infrastructure-as-Code) për ndërtimin dhe menaxhimin e infrastrukturës virtuale me anë të kodit.
Gjatë punës me këtë mjet, ne vërejtëm disa përparësi:
Shpejtësia e vendosjes së tenanteve të rinj (mjediset virtuale të përdoruesve). Zakonisht, sa më shumë klientë të rinj, aq më shumë "klikë" nevojiten nga stafi i mbështetjes teknike për publikimin e burimeve të reja. Me Terraform, përdoruesit mund të modifikojnë parametrat e makinave virtuale (p.sh., automatikisht të ç aktivizojnë OS-në dhe të rrisin ndarjen e disku virtual) pa angazhimin e mbështetjes teknike dhe pa ç aktivizuar makinën vetë.
Kontrolli i menjohëshem të planit të aktivizimit te te rinovatit të ri. Me ndihmën e përshkrimit të kodit të infrastrukturës, ne mund ta kontrollojmë menjëherë se çfarë dhe në cilin rend do të shtohet, si dhe në çfarë gjendjeje të përfunduar do të jetë ajo ose ajo makinë virtuale apo rrjet virtual me lidhje në makinat virtuale.
Mundësia për të përshkruar shumicën e platformave popullore në cloud. Ju mund të përdorni mjetin nga Amazon dhe Google Cloud, deri te platformat private të bazuara në VMware vCloud Director, të cilat ofrojnë shërbime në kuadër të zgjidhjeve IaaS, SaaS dhe PaaS.
Të menaxhoni disa ofrues të cloud dhe të shpërndani infrastrukturën mes tyre për të rritur qëndrueshmërinë, duke përdorur një konfigurim të vetëm për krijimin, diagnostikimin dhe menaxhimin e burimeve cloud.
Përdorim miqësor për krijimin e demonstracioneve për testimin dhe zgjidhjen e softuerit. Ju mund të krijoni dhe transferoni demo për departamentin e testimeve, të kontrolloni softuerin paralelisht në ambiente të ndryshme, si dhe të ndryshoni dhe fshini burimet menjëherë, duke krijuar vetëm një plan ndërtimi burimesh.
"Terrarium" Terraform
Kemi folur shkurtimisht për avantazhet e mjetit, tani do të shqyrtojmë përbërësit e tij
Ofruesit (providers).Â
Në Terraform, pothuajse çdo lloj infrastrukture mund të paraqitet si një burim. Lidhja ndërmjet burimeve dhe platformës API sigurohet nga modulet e ofruesve, të cilat lejojnë krijimin e burimeve në një platformë të caktuar, si për shembull, Azure ose VMware vCloud Director.
Brenda projektit mund të ndërveproni me ofrues të ndryshëm në platforma të ndryshme.
Burimet (përshkrimi i burimeve).
PĂ«rshkrimi i burimeve lejon menaxhimin e componenteve tĂ« platformĂ«s, si pĂ«r shembull, makinave virtuale ose rrjeteve.Â
Mund të krijoni vetë përshkrimin e burimeve për ofruesin VMware vCloud Director dhe ta përdorni këtë përshkrim për të krijuar burime te çdo ofrues hosti që përdor vCloud Director. Ju nevojitet vetëm të zëvendësoni parametrat e autentikimit dhe parametrat e lidhjes në rrjet me ofruesin e hostit të nevojshëm.
Provisioners.
Ky komponent ofron mundĂ«sinĂ« pĂ«r tĂ« kryer operacione mbi instalimin fillestar dhe mirĂ«mbajtjen e sistemit operativ pas krijimit tĂ« makinave virtuale. Pasi tĂ« keni krijuar burimin e makinĂ«s virtuale, me ndihmĂ«n e provisioners mund tĂ« konfiguroheni dhe lidheni pĂ«rmes SSH, tĂ« bĂ«ni azhurnimin e sistemit operativ, si dhe tĂ« ngarkoni dhe ekzekutoni njĂ« skenar.Â
Variablat Input dhe Output.
Variablat Input â variablat hyrĂ«se pĂ«r çdo lloj bloku.Â
Variablat Output lejojnë të ruani vlerat pas krijimit të burimeve dhe mund të përdoren si variabla hyrëse në module të tjera, për shembull në blokun Provisioners.
Shtetet (States).
Skedarët e Shteteve ruajnë informacion mbi konfigurimin e burimeve të platformës së ofruesit. Gjatë krijimit të parë të platformës nuk ka asnjë informacion mbi burimet dhe para çdo operacioni Terraform azhurnon gjendjen me infrastrukturën reale të burimeve tashmë të përshkruara.
Qëllimi kryesor i shteteve është ruajtja e lidhjeve të objekteve të burimeve të krijuara tashmë për të krahasuar konfigurimin e burimeve të shtuar dhe objekteve, në mënyrë që të shmanget krijimi dhe ndryshimi i përsëritur të platformës.
Informacioni mbi statusin e parazgjedhur ruhet në skedarin lokal terraform.tfstate, por nëse është e nevojshme, ka mundësinë të përdorim ruajtjen e largët për punë në ekip.
Gjithashtu, mund tĂ« importoni burimet aktuale tĂ« platformĂ«s nĂ« gjendje, nĂ« mĂ«nyrĂ« qĂ« tĂ« mund tĂ« ndĂ«rveproni me burime tĂ« tjera, tĂ« cilat nga ana e tyre janĂ« krijuar pa ndihmĂ«n e Terraform. Â
2. Krijimi i infrastrukturës
Kompontët janë shpjeguar, tani me ndihmën e Terraform do të krijojmë infrastrukturën në disa hapa me tre makina virtuale. E para me një server proxy nginx të instaluar, e dyta me një ruajtje skedari në bazë të Nextcloud dhe e treta me CMS Bitrix.
Do të shkruajmë kodin dhe do ta ekzekutojmë atë me shembujin e . Përdoruesit tanë marrin një llogari me të drejtat Organization Administrator, nëse përdorni një llogari me të njëjtat të drejta në një re tjetër VMware, atëherë do të mund të riprodhoni kodin nga shembujt tanë. Le të fillojmë!
Së pari do të krijojmë për projektin tonë një direktori, në të cilën do të vendosen skedarët me përshkrimin e infrastrukturës.
mkdir project01
MĂ« pas do tĂ« pĂ«rshkruajmĂ« komponentĂ«t e infrastrukturĂ«s. Terraform krijon lidhje dhe pĂ«rpunon skedarĂ«t bazuar nĂ« pĂ«rshkrimin qĂ« ndodhet nĂ« skedarĂ«. VetĂ« skedarĂ«t mund tĂ« emĂ«rtohen sipas qĂ«llimit tĂ« blloqeve qĂ« pĂ«rshkruhen, pĂ«r shembull, network.tf â pĂ«rshkruan parametrat rrjetorĂ« pĂ«r infrastrukturĂ«n.
Për të përshkruar komponentët e infrastrukturës tonë, ne krijuam skedarët e mëposhtëm:
Lista e skedarëve.
main.tf â pĂ«rshkrimi i parametrave pĂ«r mjedisin virtual â makinat virtuale, kontenierĂ«t virtualĂ«;
network.tf â pĂ«rshkrimi i parametrave tĂ« rrjetit virtual dhe rregullave pĂ«r NAT, Firewall;
variables.tf â lista e variablave qĂ« pĂ«rdorim;
vcd.tfvars â vlerat e variablave pĂ«r projektin nĂ« modulin VMware vCloud Director.
Gjuha e konfigurimit në Terraform është deklarative dhe rendi i blloqeve nuk ka rëndësi, përveç bllokëve provisioner, pasi në këtë bllok ne përshkruajmë komandat për t'u ekzekutuar gjatë përgatitjes së infrastrukturës dhe ato do të ekzekutohen në rend.
Struktura e blloqeve.
"" "" {
# Block body
= # Argument
}
Për përshkrimin e blloqeve përdoret një gjuhë programimi e njohur HCL (HashiCorp Configuration Language), gjithashtu mund të përshkruhet infrastruktura edhe me JSON. Më shumë rreth sintaksës mund .
Konfigurimi i variablit të mjedisit, variables.tf dhe vcd.tfvars
Së pari do të krijojmë dy skedarë, të cilët përshkruajnë listën e të gjithë variablave të përdorur dhe vlerave të tyre për modulin VMware vCloud Director. E para do të krijojmë skedarin variables.tf.
Përmbajtja e skedarit variables.tf.
variable "vcd_org_user" {
  description = "Përdoruesi i Tenant-eve vCD"
}
variable "vcd_org_password" {
  description = "Fjalëkalimi i Tenant-eve vCD"
}
variable "vcd_org" {
  description = "Organizata e Tenant-eve vCD"
}
variable "vcd_org_vdc" {
  description = "VDC i Tenant-eve vCD"
}
variable "vcd_org_url" {
  description = "URL e Tenant-eve vCD"
}
variable "vcd_org_max_retry_timeout" {
  default = "60"
}
variable "vcd_org_allow_unverified_ssl" {
  default = "true"
}
variable "vcd_org_edge_name" {
  description = "Emri i skajit vCD"
}
variable "vcd_org_catalog" {
  description = "Katalogu publik vCD"
}
variable "vcd_template_os_centos7" {
  description = "OS CentOS 7"
  default = "CentOS7"
}
variable "vcd_org_ssd_sp" {
  description = "Politikat e Ruajtjes"
  default = "Politika e Ruajtjes Gold"
}
variable "vcd_org_hdd_sp" {
  description = "Politikat e Ruajtjes"
  default = "Politika e Ruajtjes Bronze"
}
variable "vcd_edge_local_subnet" {
  description = "Subneti i Rrjetit të Organizatat"
}
variable "vcd_edge_external_ip" {
  description = "IP e jashtme publike"
}
variable "vcd_edge_local_ip_nginx" {}
variable "vcd_edge_local_ip_bitrix" {}
variable "vcd_edge_local_ip_nextcloud" {}
variable "vcd_edge_external_network" {}
Vlerat e variablave që marrim nga ofruesi.
vcd_org_user â emri i pĂ«rdoruesit me tĂ« drejtat Administrator Organzizate,
vcd_org_password â fjalĂ«kalimi i pĂ«rdoruesit,
vcd_org â emri i organizatĂ«s,
vcd_org_vdc â emri i qendrĂ«s virtuale tĂ« tĂ« dhĂ«nave,
vcd_org_url â URL API,
vcd_org_edge_name â emri i ruterit virtual,
vcd_org_catalog â emri i katalogut tĂ« modele tĂ« makinave virtuale,
vcd_edge_external_ip â adresa IP publike,
vcd_edge_external_network â emri i rrjetit tĂ« jashtĂ«m,
vcd_org_hdd_sp â emri i politikĂ«s sĂ« ruajtjes pĂ«r HDD,
vcd_org_ssd_sp â emri i politikĂ«s sĂ« ruajtjes pĂ«r SSD.
Dhe futim variablat tanë:
vcd_edge_local_ip_nginx â adresa IP e makinĂ«s virtuale me NGINX,
vcd_edge_local_ip_bitrix â adresa IP e makinĂ«s virtuale me 1C: Bitrix,
vcd_edge_local_ip_nextcloud â adresa IP e makinĂ«s virtuale me Nextcloud.
NĂ« skedarin e dytĂ« krijojmĂ« dhe pĂ«rcaktojmĂ« variablat pĂ«r modulin VMware vCloud Director nĂ« skedarin vcd.tfvars: TĂ« kujtojmĂ« se nĂ« shembullin tonĂ« pĂ«rdorim , nĂ«se punoni me njĂ« ofrues tjetĂ«r, sqaroni vlerat me tĂ«.Â
Përmbajtja e skedarit 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"
Konfigurimi i rrjetit, network.tf.
Variablat ambient janĂ« vendosur, tani do tĂ« configuremi skemĂ«n e lidhjes sĂ« makinerive virtuale â do t'i caktojmĂ« çdo makine virtuale njĂ« adresĂ« IP private dhe me NAT-in e Destinacionit do tĂ« 'shkallojmĂ«' portet nĂ« rrjetin e jashtĂ«m. PĂ«r tĂ« kufizuar aksesin nĂ« portet e menaxhimit, do tĂ« vendosim akses vetĂ«m pĂ«r adresĂ«n tonĂ« IP.
Skena e rrjetit për platformën Terraform të krijuar
Krijojmë një rrjet organizativ virtual me emrin net_lan01, me portën e përparme: 192.168.110.254, si dhe me hapësirën adresore: 192.168.110.0/24.
Përshkruajmë rrjetin virtual.
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"
  }
}
Do të krijojmë rregulla për firewall-in që lejon makineritë virtuale të kenë akses në internet. Në kuadër të këtij bloku, të gjitha burimet virtuale në re do të kenë akses në internet:
Përshkruajmë rregullat për aksesin e VM në internet.
resource "vcd_nsxv_firewall_rule" "fw_internet_access" {
  edge_gateway  = var.vcdorgedgename
  name = "Qaccess në Internet"
  source {
gateway_interfaces = ["internal"]
  }
  destination {
gateway_interfaces = ["external"]
  }
  service {
protocol = "any"
  }
  depends_on = [vcdnetworkrouted.net]
}
Pas vendosjes së varësisë, që pas procesimit të bllokut vcdnetworkrouted.net, ne vazhdojmë me konfigurimin e bllokut vcdnsxvfirewallrule, përmes dependson. Përdorim këtë mundësi, pasi disa varësi mund të njihen implicit në konfigurim.
MĂ« pas, do tĂ« krijojmĂ« rregulla qĂ« lejojnĂ« aksesin nĂ« porte nga rrjeta e jashtme dhe pĂ«rcaktojmĂ« adresĂ«n tonĂ« IP pĂ«r t'u lidhur pĂ«rmes SSH me serverat. Ădo pĂ«rdorues i rrjetit tĂ« internetit ka akses nĂ« portet 80 dhe 443 nĂ« serverin web dhe pĂ«rdoruesi me adresĂ«n IP 90.1.15.1 ka akses nĂ« portet SSH tĂ« serverave virtualĂ«.
Lejojmë aksesin në porte nga rrjeta e jashtme.
resource "vcd_nsxv_firewall_rule" "fwnatports" {
  edge_gateway  = var.vcd_org_edge_name
  name = "Akses HTTPs"
  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 = "Akses Admin"
  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]
}
Krijojmë rregulla Source NAT për akses në rrjetin Internet nga rrjeta lokale cloud:
Përshkruajmë rregullat 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]
}
Dhe në përfundim të konfigurimit të bllokut rrjet, shtojmë rregullat Destination NAT për qasje në shërbimet nga rrjeti i jashtëm:
Shtojmë rregullat Destination 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]
}
Shtojmë një rregull NAT për translacionin e portave në serverin SSH nën 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]
}
Shtojmë një rregull NAT për translacionin e portave në serverin SSH me 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]
}
Shtojmë një rregull NAT për translacionin e portave në serverin SSH me 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]
}
Konfigurimi i mjedisit virtual main.tf
Siç e planifikuam në fillim të artikullit, do të krijojmë tre makina virtuale. Ato do të përgatiten me "Guest Customization". Parametrat e rrjetit do të vendosen sipas configureve tona të dhëna, ndërsa fjalëkalimi për përdoruesin krijohet automatikisht.
Përshkruajmë vApp ku do të ndodhen makinat virtuale dhe konfigurimi i tyre.
Konfigurimi i makinave virtuale
Do të krijojmë një kontejner vApp. Për të qenë në gjendje të lidhim menjëherë vApp dhe VM në rrjetin virtual, gjithashtu shtojmë parametrin depends_on:
Krijo kontejner
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true" depends_on = [vcd_network_routed.net]
}
Do të krijojmë një makinë virtuale me përshkrim
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
}
}
Parametrat kryesorë në përshkrimin e VM:
name â emri i makinĂ«s virtuale,
vappname â emri i vApp nĂ« tĂ« cilin do tĂ« shtohet VM e re,
catalogname / templatename â emri i katalogut dhe emri i shabllonit tĂ« makinĂ«s virtuale,
storageprofile â politika e ruajtjes sipas parazgjedhjes.
Parametrat e bllokut të rrjetit:
type â tipi i rrjetit qĂ« lidhet,
name â nĂ« cilin rrjet virtual do tĂ« lidhet VM,
isprimary â adaptori kryesor i rrjetit,
ipallocation_mode â mĂ«nyra e ndarjes sĂ« adresĂ«s MANUAL / DHCP / POOL,
ip â Adresa IP pĂ«r mjedisin virtual, do ta caktojmĂ« manualisht.
Blloku override_template_disk:
sizeinmb â madhĂ«sia e boot-disqeve pĂ«r mjedisin virtual
storage_profile â politika e ruajtjes pĂ«r disqin
Le të krijojmë një VM të dytë me përshkrimin e hapësirës së skedarëve 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 ]
}
Në seksionin vcdvminternal_disk do të përshkruajmë një disk të ri virtual, i cili lidhet me mjedisin virtual.
Shpjegime për bllokun vcdvminternaldisk:
bustype â lloji i kontrollorit tĂ« disqeve
sizeinmb â madhĂ«sia e diskut
busnumber / unitnumber â vendi i lidhjes nĂ« adaptues
storage_profile â politika e ruajtjes pĂ«r disqin
Do të përshkruajmë VM-në e fundit për 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
}
}
Përditësimi i OS-së dhe instalimi i skripteve shtesë
Rrjeti është përgatitur, mjediset virtuale janë përshkruar. Para importimit të infrastrukturës sonë, ne mund të kryejmë paraprakisht provizionimin fillestar me blloqet provisioners pa përdorur Ansible.
Le të shohim se si të përditësojmë OS-në dhe të nisnim skriptin e instalimit të CMS Bitrix me ndihmën e bllokut provisioner.
Së pari do të bëjmë instalimin e paketave të përditësimit të 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" ]
}
}
}
Përshkrimi i përbërësve:
provisioner «remote-exec» â lidhim bllokun e «provizionimit» tĂ« largĂ«t
Në bllokun connection përshkruajmë llojin dhe parametrat për lidhjen:
type â protokolli, nĂ« rastin tonĂ« SSH;
user â emri i pĂ«rdoruesit;
password â fjalĂ«kalimi i pĂ«rdoruesit. NĂ« rastin tonĂ«, e cila tregon parametrin vcdvappvm.nginx.customization[0].admin_password, i cili ruan fjalĂ«kalimin e gjeneruar tĂ« pĂ«rdoruesit tĂ« sistemit.
host â adresa IP e jashtme pĂ«r lidhjen;
port â porta pĂ«r lidhjen, e cila u pĂ«rmend mĂ« parĂ« nĂ« cilĂ«simet DNAT;
inline â listojmĂ« listĂ«n e komandave qĂ« do tĂ« futen. Komandat do tĂ« futen nĂ« rendin e shĂ«nuar nĂ« kĂ«tĂ« seksion.
Si shembull, do të ekzekutojmë gjithashtu skriptin për instalimin e 1C-Bitrix. Rezultati i ekzekutimit të skriptit do të jetë i disponueshëm gjatë zbatimit të planit. Për të instaluar skriptin, së pari do të përshkruajmë bllokun:
Përshkruajmë instalimin e 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"
]
}
Dhe menjëherë do të përshkruajmë azhurnimin e Bitrix.
Shembulli i provizionimit të 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"
]
}
}
ĂshtĂ« e rĂ«ndĂ«sishme! Skripti mund tĂ« mos funksionojĂ« nĂ«se nuk çaktivizoni mĂ« parĂ« SELinux! NĂ«se ju nevojitet njĂ« artikull i detajuar pĂ«r instalimin dhe konfigurimin e CMS 1C-Bitrix me ndihmĂ«n e bitrix-env.sh, mund tĂ« .
3. Inizializimi i infrastrukturës
Inizializimi i moduleve dhe plaginëve
PĂ«r punĂ« ne pĂ«rdorim njĂ« âset tĂ« thjeshtĂ«â: njĂ« laptop me sistemin operativ Windows 10 dhe njĂ« shpĂ«rndarje nga faqja zyrtare . E shpĂ«rndajmĂ« dhe e iniciojmĂ« me komandĂ«n: terraform.exe init
Pas përshkrimit të infrastrukturës llogaritëse dhe rrjetore, ne fillojmë planifikimin për të kontrolluar konfigurimin tonë, ku mund të shohim se çfarë do të krijohet dhe si lidhin mes vete.
Kryejmë komandën
- terraform plan -var-file=vcd.tfvars.Marrim rezultatin
- Plani: 16 për t'u shtuar, 0 për t'u ndryshuar, 0 për t'u shkatërruar.Kështu që, sipas këtij plani do të krijohen 16 burime.Nisim planin me një komandë
- terraform.exe apliko -var-file=vcd.tfvars.
Makinat virtuale do tĂ« krijohen, dhe pastaj do tĂ« ekzekutohen paketat e listuara nga ne nĂ« seksionin provisioner â sistemi operativ do tĂ« pĂ«rditĂ«sohet dhe CMS Bitrix do tĂ« instalohet.
Marrja e të dhënave për lidhje
Pasi të realizohet plani, dëshirojmë të marrim në formë tekstuale të dhënat për lidhjen me serverët, prandaj do ta formulojmë seksionin output ashtu si më poshtë:
output "nginxpassword" {
 value = vcdvappvm.nginx.customization[0].adminpassword
}
Dhe ky output na informon për fjalëkalimin e makinë së krijuar virtuale:
Outputs: nginx_password = F#4u8!!N
Kështu, ne fitojmë akses në makinat virtuale me sistemin e operativ të përditësuar dhe paketat e parainstaluara për punën tonë të ardhshme. E gjithë është gati!
Por çfarë nëse ju tashmë keni një infrastrukturë ekzistuese?
3.1. Puna e Terraform me infrastrukturën ekzistuese
ĂshtĂ« e thjeshtĂ«, ju mund tĂ« importoni makinat virtuale aktuale dhe kontainerĂ«t e tyre vApp me komandĂ«n import.
Të përshkruajmë burimin vAPP dhe makinën virtuale.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
Hapi i ardhshëm është të importoni pronat e burimeve vApp në formatin vcdvapp. .., ku:
vApp â emri i vApp;
org â emri i organizatĂ«s;
org_vdc â emri i qendrĂ«s virtuale tĂ« tĂ« dhĂ«nave.
Importimi i pronave të burimit vAPP
Të importojmë pronat e burimeve VM në formatin: vcdvappvm. ..., në të cilin:
VM â emri i VM;
vApp â emri i vApp;
org â emri i organizatĂ«s;
orgvdc â emri i qendrĂ«s virtuale tĂ« tĂ« dhĂ«nave.
Importimi u krye me sukses
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Duke importuar nga ID "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Importi është përgatitur!
Përgatit vcd_vapp_vm për import
vcd_vapp_vm.Zabbix: Rinovimi i gjendjes... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Importimi u suksesshëm!
Burimet që u importuan janë të paraqitura më lart. Këto burime tani janë në
statin tuaj Terraform dhe do të menaxhohen nga Terraform nga këtu e tutje.
Tani mund të shohim burimin e ri të importuar:
Burimi i importuar
> 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"
}
}
Tani tani Ă«shtĂ« gati â kemi pĂ«rfunduar me momentin e fundit (importimi nĂ« infrastrukturĂ«n ekzistuese) dhe kemi shqyrtuar tĂ« gjithĂ« pikat kryesore tĂ« funksionimit me Terraform.Â
Mjeti doli shumë i dobishëm dhe lejon të përshkruash infrastrukturën tënde si kod, duke filluar nga makinash virtuale të një ofruesi cloud deri te përshkrimi i burimeve të komponentëve rrjetë.
Pavarësia nga mjedisi ofron mundësinë për të punuar me burimet lokale dhe ato në re, përfshirë menaxhimin e platformës. Nëse nuk ka një platformë të mbështetur dhe dëshira për të shtuar një të re, mund të shkruani ofruesin tuaj dhe ta përdorni atë.
Burimi: habr.com
