
I den hĂ€r artikeln kommer vi att gĂ„ igenom vad Terraform bestĂ„r av och steg för steg lansera vĂ„r egen infrastruktur â vi kommer att förbereda tre VM för olika Ă€ndamĂ„l: proxy, fillagring och CMS.
Allt i detalj och i tre steg:
1. Terraform â beskrivning, fördelar och komponenter
Terraform Àr ett IaC (Infrastructure-as-Code) verktyg för skapande och hantering av virtuell infrastruktur med hjÀlp av kod.
Vid arbete med verktyget har vi noterat flera fördelar:
Hastighet för att distribuera nya tenants (anvÀndarspecifika virtuella miljöer). Vanligtvis, ju fler nya kunder, desto fler 'klick' krÀvs av teknisk support för att publicera nya resurser. Med Terraform kan anvÀndare Àndra parametrar för virtuella maskiner (t.ex. automatiskt stÀnga av OS och öka partitionen av den virtuella disken) utan teknisk supports hjÀlp och utan att stÀnga av maskinen.
Omedelbar kontroll av aktiveringsplanen för den nya tenanten. Genom att anvÀnda beskrivningen av infrastrukturens kod kan vi omedelbart kontrollera vad och i vilken ordning som kommer att lÀggas till, samt vilket slutligt tillstÄnd en viss virtuell maskin eller virtuell nÀtverk med kopplingar till virtuella maskiner kommer att ha.
Möjlighet att beskriva de flesta populÀra molnplattformar. Du kan anvÀnda verktyget frÄn Amazon och Google Cloud, till privata plattformar baserade pÄ VMware vCloud Director som erbjuder tjÀnster inom IaaS, SaaS och PaaS-lösningar.
Hantera flera molnleverantörer och distribuera infrastrukturen mellan dem för att öka tillförlitligheten, med hjÀlp av en och samma konfiguration för att skapa, diagnostisera och hantera molnresurser.
AnvÀndarvÀnlighet för att skapa demostÀll för testning och felsökning av programvara. Du kan skapa och överföra stÀll för testavdelningen, parallellt kontrollera programvaran i olika miljöer, samt omedelbart Àndra och ta bort resurser med bara en plan för resursbyggande
Terraform "terrariet"
Vi har kort berÀttat om fördelarna med verktyget, nu gÄr vi igenom dess komponenter
Providers (leverantörer).Â
I Terraform kan nÀstan vilken typ av infrastruktur som helst representeras som en resurs. Kopplingen mellan resurser och plattformens API sÀkerstÀlls av providers-moduler som möjliggör skapande av resurser inom en specifik plattform, som Azure eller VMware vCloud Director.
Inom projektet kan du interagera med olika leverantörer pÄ olika plattformar.
Resurser (beskrivning av resurser).
Beskrivningen av resurser gör det möjligt att hantera plattformskomponenter, som virtuella maskiner eller nĂ€tverk.Â
Du kan sjÀlv skapa en beskrivning av resurser för VMware vCloud Director och anvÀnda denna beskrivning för att skapa resurser hos vilken hostingleverantör som helst som anvÀnder vCloud Director. Du behöver bara ersÀtta autentiseringsparametrarna och nÀtverksanslutningsparametrarna för den nödvÀndiga hostingleverantören.
Provisioners.
Denna komponent möjliggör initial installation och underhĂ„ll av operativsystemet efter skapande av virtuella maskiner. NĂ€r du har skapat resursen för den virtuella maskinen kan du med hjĂ€lp av provisioners konfigurera och ansluta via SSH, utföra en uppdatering av operativsystemet samt ladda upp och köra ett skript.Â
Input- och Output-variabler.
Input-variabler Ă€r ingĂ„ngsvariabler för alla typer av block.Â
Output-variabler gör det möjligt att spara vÀrden efter skapandet av resurser och kan anvÀndas som ingÄngsvariabler i andra moduler, sÄsom blocket Provisioners.
States (tillstÄnd).
States-filer lagrar information om konfigurationen av leverantörens resurser. Vid första skapandet av plattformen finns det inga uppgifter om resurser, och innan varje operation uppdaterar Terraform tillstÄndet med den faktiska infrastrukturen för redan beskrivna resurser.
Huvudsyftet med tillstÄnd Àr att spara kopplingen av objekt för redan skapade resurser för att jÀmföra konfigurationen av de tillagda resurserna och objekten, för att undvika att skapa om och Àndra plattformen.
Standardinformationen om tillstÄnd lagras i en lokal fil terraform.tfstate, men vid behov finns det möjlighet att anvÀnda fjÀrrlagring för att jobba i team.
Du kan ocksĂ„ importera nuvarande plattformsresurser till tillstĂ„ndet för att interagera med andra resurser som i sin tur skapades utan hjĂ€lp av Terraform. Â
2. Skapa infrastruktur
Komponenterna har tagits isÀr, nu kommer vi steg för steg att skapa infrastrukturen med hjÀlp av Terraform med tre virtuella maskiner. Den första med den installerade proxy-servern nginx, den andra med lagringslösningen Nextcloud och den tredje med CMS Bitrix.
Vi kommer att skriva och köra kod med hjÀlp av vÄrt . AnvÀndarna fÄr ett konto med rÀttigheter som Organisation Administrator, om du anvÀnder ett konto med samma rÀttigheter pÄ ett annat VMware-moln kan du Äterskapa koden frÄn vÄra exempel. LÄt oss börja!
Först skapar vi en katalog för vÄrt nya projekt dÀr filerna med infrastrukturen kommer att placeras.
mkdir project01
Sedan beskriver vi infrastrukturkomponenterna. Terraform skapar kopplingar och behandlar filer baserat pĂ„ beskrivningen i dessa filer. SjĂ€lva filerna kan namnges utifrĂ„n syftet med de beskrivna blocken, till exempel network.tf â beskriver nĂ€tverksparametrar för infrastrukturen.
För att beskriva komponenterna i vÄr infrastruktur har vi skapat följande filer:
Filövervakningslista.
main.tf â beskrivning av parametrarna för den virtuella miljön â virtuella maskiner, virtuella containrar;
network.tf â beskrivning av parametrarna för det virtuella nĂ€tverket och regler för NAT, brandvĂ€gg;
variables.tf â lista över variabler som vi anvĂ€nder;
vcd.tfvars â vĂ€rden för projektvariabler för modulen VMware vCloud Director.
KonfigurationssprÄket i Terraform Àr deklarativt och ordningen pÄ blocken spelar ingen roll, förutom för provisionerblocken, dÀr vi beskriver kommandon för att utföra vid förberedelsen av infrastrukturen och de kommer att utföras i ordning.
Blockstruktur.
"" "" {
# Block body
= # Argument
}
För att beskriva blocken anvÀnds ett eget programmeringssprÄk HCL (HashiCorp Configuration Language), det Àr ocksÄ möjligt att beskriva infrastrukturen med JSON. Mer om syntaxen kan du .
Konfiguration av miljövariabel, variables.tf och vcd.tfvars
Först skapar vi tvÄ filer som beskriver listan över alla variabler som anvÀnds och deras vÀrden för modulen VMware vCloud Director. Först kommer vi att skapa filen variables.tf.
InnehÄllet i filen variables.tf.
variabel "vcd_org_user" {
  beskrivning = "vCD HyresgÀst AnvÀndare"
}
variabel "vcd_org_password" {
  beskrivning = "vCD HyresgÀst Lösenord"
}
variabel "vcd_org" {
  beskrivning = "vCD HyresgÀst Organisation"
}
variabel "vcd_org_vdc" {
  beskrivning = "vCD HyresgÀst VDC"
}
variabel "vcd_org_url" {
  beskrivning = "vCD HyresgÀst URL"
}
variabel "vcd_org_max_retry_timeout" {
  standard = "60"
}
variabel "vcd_org_allow_unverified_ssl" {
  standard = "true"
}
variabel "vcd_org_edge_name" {
  beskrivning = "vCD kantnamn"
}
variabel "vcd_org_catalog" {
  beskrivning = "vCD offentlig katalog"
}
variabel "vcd_template_os_centos7" {
  beskrivning = "OS CentOS 7"
  standard = "CentOS7"
}
variabel "vcd_org_ssd_sp" {
  beskrivning = "Lagerriktlinjer"
  standard = "Guld Lagringspolicy"
}
variabel "vcd_org_hdd_sp" {
  beskrivning = "Lagerriktlinjer"
  standard = "Brons Lagringspolicy"
}
variabel "vcd_edge_local_subnet" {
  beskrivning = "OrganisationsnÀtverksunder"
}
variabel "vcd_edge_external_ip" {
  beskrivning = "Extern offentlig IP"
}
variabel "vcd_edge_local_ip_nginx" {}
variabel "vcd_edge_local_ip_bitrix" {}
variabel "vcd_edge_local_ip_nextcloud" {}
variabel "vcd_edge_external_network" {}
Variablerna som vi fÄr frÄn leverantören.
vcd_org_user â anvĂ€ndarnamn med Organisation Administrator rĂ€ttigheter,
vcd_org_password â anvĂ€ndarens lösenord,
vcd_org â organisationsnamn,
vcd_org_vdc â namn pĂ„ virtuell datacenter,
vcd_org_url â API URL,
vcd_org_edge_name â namn pĂ„ den virtuella routern,
vcd_org_catalog â namn pĂ„ katalogen med mallar för virtuella maskiner,
vcd_edge_external_ip â offentlig IP-adress,
vcd_edge_external_network â namn pĂ„ det externa nĂ€tverket,
vcd_org_hdd_sp â namn pĂ„ HDD lagringspolicy,
vcd_org_ssd_sp â namn pĂ„ SSD lagringspolicy.
Och vi definierar vÄra egna variabler:
vcd_edge_local_ip_nginx â IP-adress för den virtuella maskinen med NGINX,
vcd_edge_local_ip_bitrix â IP-adress för den virtuella maskinen med 1C: Bitrix,
vcd_edge_local_ip_nextcloud â IP-adress för den virtuella maskinen med Nextcloud.
I den andra filen skapar vi och anger variabler för modulen VMware vCloud Director i filen vcd.tfvars: Vi pĂ„minner om att vi i vĂ„rt exempel anvĂ€nder , om du arbetar med en annan leverantör, kontrollera vĂ€rdena med dem.Â
InnehÄllet i filen 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 = "Guld Lagringspolicy"
vcd_org_hdd_sp = "Brons Lagringspolicy"
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"
NĂ€tverkskonfiguration, network.tf.
Miljövariablerna Ă€r instĂ€llda, nu konfigurerar vi anslutningen för virtuella maskiner â vi kommer att tilldela varje virtuell maskin ett privat IP-adress och via Destination NAT "öppna" portar till det externa nĂ€tverket. För att begrĂ€nsa Ă„tkomsten till administrationsportarna kommer vi att stĂ€lla in Ă„tkomst endast för vĂ„r IP-adress.
NÀtverksschema för den skapade Terraform-plattformen
Vi skapar ett virtuellt organiskt nÀtverk med namnet net_lan01, standardgateway: 192.168.110.254, samt med adressutrymmet: 192.168.110.0/24.
Vi beskriver det virtuella nÀtverket.
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"
  }
}
Vi skapar regler för brandvÀggen som tillÄter virtuella maskiner att fÄ Ätkomst till Internet. Inom detta block kommer alla virtuella resurser i molnet att ha Ätkomst till Internet:
Vi beskriver reglerna för Ätkomst till VM pÄ 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]
}
Genom att stÀlla in beroendet, sÄ att efter bearbetningen av blocket vcdnetworkrouted.net, börjar vi konfigurera blocket vcdnsxvfirewallrule, med hjÀlp av dependson. Vi anvÀnder detta alternativ eftersom vissa beroenden kan uppfattas implicit i konfigurationen.
DÀrefter ska vi skapa regler som tillÄter Ätkomst till portar frÄn det externa nÀtverket och ange vÄr IP-adress för att ansluta via SSH till servrar. Alla anvÀndare pÄ Internet har tillgÄng till portar 80 och 443 pÄ webbservern och en anvÀndare med IP-adressen 90.1.15.1 har tillgÄng till SSH-portarna för de virtuella servrarna.
Vi tillÄter Ätkomst till portar frÄn det externa nÀtverket.
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]
}
Vi skapar regler för Source NAT för Ätkomst till Internet frÄn det lokala molnnÀtverket:
Vi beskriver reglerna för 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]
}
Och avslutningsvis, i konfigurationen av nÀtverksblocket lÀgger vi till regler för Destination NAT för Ätkomst till tjÀnster frÄn det externa nÀtverket:
Vi lÀgger till regler för 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]
}
Vi lÀgger till en NAT-regel för portöversÀttning till SSH-servern under 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]
}
Vi lÀgger till en NAT-regel för portöversÀttning till SSH-servern med 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]
}
Vi lÀgger till en NAT-regel för portöversÀttning till SSH-servern med 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]
}
Konfiguration av den virtuella miljön main.tf
Som vi planerade i början av artikeln, ska vi skapa tre virtuella maskiner. De kommer att förberedas med "Guest Customization". NÀtverksinstÀllningarna kommer att anges enligt de instÀllningar vi angav, och anvÀndarens lösenord genereras automatiskt.
Vi beskriver vApp dÀr de virtuella maskinerna och deras konfiguration kommer att finnas.
Konfiguration av de virtuella maskinerna
Vi skapar en vApp-container. För att vi omedelbart ska kunna koppla vApp och VM till det virtuella nÀtverket lÀgger vi Àven till parametern depends_on:
Vi skapar en container
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true" depends_on = [vcd_network_routed.net]
}
Vi skapar en virtuell maskin med beskrivning
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
}
}
Huvudparametrar i beskrivningen av VM:
name â namn pĂ„ den virtuella maskinen,
vappname â namn pĂ„ vApp som ska lĂ€gga till en ny VM,
catalogname / templatename â namn pĂ„ katalog och namn pĂ„ mallen för den virtuella maskinen,
storageprofile â standard lagringspolicy.
Parametrar för nÀtverksblocket:
type â typ av ansluten nĂ€tverk,
name â vilken virtuell nĂ€tverk maskinen ska kopplas till,
isprimary â huvudnĂ€tverksadapter,
ipallocation_mode â adressallokeringslĂ€ge MANUAL / DHCP / POOL,
ip â IP-adress för den virtuella maskinen, vi anger den manuellt.
Blocket override_template_disk:
sizeinmb â storlek pĂ„ boot-disk för den virtuella maskinen
storage_profile â lagringspolicy för disken
Vi skapar en andra VM med beskrivning av Nextcloud-lagring
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 ]
}
I sektionen vcdvminternal_disk beskriver vi en ny virtuell disk som ansluts till den virtuella maskinen.
Förklaring av blocket vcdvminternaldisk:
bustype â typ av diskcontroller
sizeinmb â diskens storlek
busnumber / unitnumber â anslutningsplats i adaptern
storage_profile â lagringspolicy för disken
Vi beskriver den sista VM fö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
}
}
Uppdatering av OS och installation av ytterligare skript
NÀtverket Àr klart, de virtuella maskinerna Àr beskrivna. Innan vi importerar vÄr infrastruktur kan vi göra en preliminÀr provisioning med hjÀlp av provisioners-block och utan att anvÀnda Ansible.
Vi kommer att se hur man uppdaterar OS och startar installationsskriptet för CMS Bitrix med hjÀlp av provisioner-blocket.
Först installerar vi uppdateringspaketen för 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" ]
}
}
}
Indikering av komponenterna:
provisioner «remote-exec» â ansluter blocket för fjĂ€rrprovisioning
I blocket connection beskriver vi typ och parametrar för anslutning:
type â protokollet, i vĂ„rt fall SSH;
user â anvĂ€ndarnamn;
password â anvĂ€ndarens lösenord. I vĂ„rt fall hĂ€nvisar vi till parametern vcdvappvm.nginx.customization[0].admin_password, som lagrar det genererade lösenordet för systemanvĂ€ndaren.
host â extern IP-adress för anslutning;
port â port för anslutning, som vi tidigare angav i DNAT-instĂ€llningarna;
inline â vi upprĂ€ttar en lista över kommandon som ska anges. Kommandona kommer att anges i ordning, sĂ„som angivet i denna sektion.
Som ett exempel kommer vi att köra installationsskriptet för 1C-Bitrix. Resultatet av skripts utförande kommer att vara tillgÀngligt under planens körning. För att installera skriptet beskriver vi först blocket:
Vi beskriver installationen av 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"
]
}
Och vi beskriver omedelbart uppdateringen av Bitrix.
Exempel pÄ provisioning för 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"
]
}
}
Viktigt! Skriptet kan misslyckas om SELinux inte inaktiveras i förvÀg! Om du behöver en detaljerad artikel om installation och konfiguration av CMS 1C-Bitrix med hjÀlp av bitrix-env.sh, kan du .
3. Initiering av infrastrukturen
Initiering av moduler och plugins
För arbetet anvÀnder vi en enkel "gentlemannakitt": en laptop med Windows 10 och en distribution frÄn den officiella webbplatsen . Vi packar upp och initierar med kommandot: terraform.exe init
Efter beskrivningen av berÀknings- och nÀtverksinfrastrukturen kör vi planering för att kontrollera vÄr konfiguration, dÀr vi kan se vad som kommer att skapas och hur de hÀnger ihop.
Vi kör kommandot
- terraform plan -var-file=vcd.tfvars.Vi fÄr resultatet
- Plan: 16 att lÀgga till, 0 att Àndra, 0 att förstöra.Det vill sÀga enligt denna plan kommer 16 resurser att skapas.Vi kör planen med kommandot
- terraform.exe apply -var-file=vcd.tfvars.
Virtuella maskiner kommer att skapas, och sedan körs de paket vi angav inom provisionsavsnittet â operativsystemet kommer att uppdateras och CMS Bitrix installeras.
Mottagning av data för anslutning
Efter att planen har genomförts vill vi fÄ textdata för att ansluta till servrarna, dÀrför formulerar vi output-avsnittet pÄ följande sÀtt:
output "nginxpassword" {
 value = vcdvappvm.nginx.customization[0].adminpassword
}
Och följande output informerar oss om lösenordet för den skapade virtuella maskinen:
Outputs: nginx_password = F#4u8!!N
Slutligen fÄr vi tillgÄng till de virtuella maskinerna med det uppdaterade operativsystemet och förinstallerade paket för vÄrt fortsatta arbete. Allt Àr klart!
Men vad hÀnder om du redan har en befintlig infrastruktur?
3.1. Terraform-working med en redan existerande infrastruktur
Det Àr enkelt, du kan importera de nuvarande virtuella maskinerna och deras vApp-containrar med kommandot import.
LÄt oss beskriva vAPP-resursen och den virtuella maskinen.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
NÀsta steg Àr att importera resurser vApps egenskaper i formatet vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, dÀr:
vApp â namnet pĂ„ vApp;
org â namnet pĂ„ organisationen;
org_vdc â namnet pĂ„ det virtuella datacentret.
Import av vAPP-resursens egenskaper
Vi utför import av VM-resursernas egenskaper i formatet: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, dÀr:
VM â namnet pĂ„ VM;
vApp â namnet pĂ„ vApp;
org â namnet pĂ„ organisationen;
orgvdc â namnet pĂ„ det virtuella datacentret.
Importen var framgÄngsrik
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Importerar frÄn ID "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Import förberett!
Förberedde vcd_vapp_vm för import
vcd_vapp_vm.Zabbix: Uppdaterar tillstÄnd... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Import lyckades!
De resurser som importerades visas ovan. Dessa resurser finns nu i
ditt Terraform-tillstÄnd och kommer hÀdanefter att hanteras av Terraform.
Nu kan vi titta pÄ den nya importerade resursen:
Importerad resurs
> 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 = "tilldelad"
metadata = {}
name = "Ăvervakning"
org = "mClouds"
status = 4
status_text = "PĂ
SLAGEN"
vdc = "mClouds"
}
âŠ
# vcd_vapp_vm.Zabbix:
resource "vcd_vapp_vm" "Zabbix" {
dator_namn = "Zabbix"
cpu_kÀrnor = 1
cpus = 2
exponera_hÄrdvaru_virtualisering = false
guest_properties = {}
hÄrdvaru_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"
intern_disk = [
{
bus_number = 0
bus_type = "paravirtual"
disk_id = "2000"
iops = 0
size_i_mb = 122880
lagrings_profil = "Guld Lagringspolicy"
tunn_provisionerad = true
unit_number = 0
},
]
minne = 8192
metadata = {}
name = "Zabbix"
org = "mClouds"
os_typ = "centos8_64Guest"
lagrings_profil = "Guld Lagringspolicy"
vapp_namn = "Ăvervakning"
vdc = "mClouds"
anpassning {
tillÄt_lokal_admin_lösenord = true
auto_generera_lösenord = true
Ă€ndra_sid = false
aktiverad = false
tvinga = false
ansluta_domÀn = false
ansluta_org_domÀn = false
mÄste_byta_lösenord_vid_första_inloggning = false
antal_auto_inloggningar = 0
}
network {
adapter_typ = "VMXNET3"
ip_tilldelning = "DHCP"
Àr_primÀr = true
mac = "00:50:56:07:01:b1"
namn = "MCLOUDS-LAN01"
typ = "org"
}
}
Nu Ă€r det verkligen klart â vi har avslutat det sista momentet (import i en befintlig infrastruktur) och gĂ„tt igenom alla viktiga punkter för att arbeta med Terraform.Â
Verktyget visade sig vara vÀldigt anvÀndbart och möjliggör att beskriva din infrastruktur som kod, frÄn virtuella maskiner hos en molnleverantör till beskrivningar av nÀtverkskomponenter.
Denna oberoende frÄn miljö gör det möjligt att arbeta med lokala och molnresurser, samt att hantera plattformen. Om det saknas en stödd plattform och man vill lÀgga till en ny, kan man skriva sin egen leverantör och anvÀnda den.
KĂ€lla: habr.com
