په دې مقاله کې به موږ وګورو چې Terraform څه شی لري، او په تدریجي ډول زموږ خپل زیربنا هم پیلوي
د هر څه په اړه په تفصیل او په دریو مرحلو کې:
1. Terraform - توضیحات، ګټې او برخې
Terraform د کوډ په کارولو سره د مجازی زیربنا رامینځته کولو او اداره کولو لپاره د IaC (Infrastructure-as-Code) وسیله ده.
موږ د وسیلې سره کار کولو کې ډیری ګټې یادونه کړې:
-
د نوي کرایه کونکو د ګمارلو سرعت (د دودیز مجازی چاپیریال). په عموم ډول، څومره چې نوي پیرودونکي شتون لري، د تخنیکي مالتړ کارمندانو ډیر "کلکونه" د نوي سرچینو خپرولو لپاره اړتیا لري. د Terraform سره، کاروونکي کولی شي د مجازی ماشین ترتیبات بدل کړي (د مثال په توګه، په اتوماتيک ډول د OS بندول او د مجازی ډیسک ویش زیاتول) پرته له دې چې تخنیکي ملاتړ ته اړتیا ولري یا پخپله ماشین بند کړي.
-
د فعال کولو پلان سمدستي تایید نوی کرایه دار د زیربنا کوډ توضیحاتو په کارولو سره ، موږ کولی شو سمدلاسه وګورو چې څه به اضافه شي او په کوم ترتیب کې ، او همدارنګه په کوم وروستي حالت کې دا یا هغه مجازی ماشین یا مجازی شبکه به د مجازی ماشینونو سره اړیکې ولري.
-
د ډیری مشهور کلاوډ پلیټ فارمونو تشریح کولو وړتیا. تاسو کولی شئ وسیله وکاروئ د ایمیزون او ګوګل کلاوډ څخه ، د VMware vCloud ډایرکټر پراساس خصوصي پلیټ فارمونو ته ، د IaaS ، SaaS او PaaS حلونو کې خدمات وړاندې کوي.
-
ډیری کلاوډ چمتو کونکي اداره کړئ او د دوی تر مینځ زیربنا توزیع کړئ ترڅو د غلطۍ زغم ښه کړي ، د بادل سرچینو رامینځته کولو ، تشخیص او اداره کولو لپاره د یو واحد ترتیب په کارولو سره.
-
د ډیمو سټینډونو رامینځته کولو لپاره اسانه کارول د سافټویر ازموینې او ډیبګ کولو لپاره. تاسو کولی شئ د ازموینې څانګې لپاره سټینډونه رامینځته او لیږد کړئ ، په موازي ډول په مختلف چاپیریالونو کې د ازموینې سافټویر ، او سمدستي یوازې د یوې سرچینې جوړونې پلان رامینځته کولو سره سرچینې بدل او حذف کړئ.
Terraform "Terrarium" Terraform
موږ په لنډه توګه د وسیلې د ګټو په اړه خبرې وکړې، اوس راځئ چې دا د هغې په برخو وویشو
برابرونکي.
په Terraform کې، نږدې هر ډول زیربنا د سرچینې په توګه استازیتوب کیدی شي. د سرچینو او API پلیټ فارم ترمینځ اړیکه د چمتو کونکي ماډلونو لخوا چمتو شوې ، کوم چې تاسو ته اجازه درکوي په ځانګړي پلیټ فارم کې سرچینې رامینځته کړئ ، د مثال په توګه ، Azure یا VMware vCloud Director.
د پروژې د یوې برخې په توګه، تاسو کولی شئ په مختلفو پلیټ فارمونو کې د مختلف چمتو کونکو سره اړیکه ونیسئ.
سرچینې (د سرچینې توضیحات).
د سرچینو توضیحات تاسو ته اجازه درکوي د پلیټ فارم اجزا اداره کړئ ، لکه مجازی ماشینونه یا شبکې.
تاسو کولی شئ پخپله د VMware vCloud ډایرکټر چمتو کونکي لپاره د سرچینې توضیحات رامینځته کړئ او دا توضیحات د هر کوربه چمتو کونکي سره سرچینې رامینځته کولو لپاره وکاروئ چې د vCloud ډایرکټر کاروي. تاسو یوازې اړتیا لرئ د اړتیا وړ کوربه توب چمتو کونکي ته د تصدیق پیرامیټرې او د شبکې پیوستون پیرامیټونه بدل کړئ
روزونکي.
دا برخه د مجازی ماشینونو رامینځته کولو وروسته د عملیاتي سیسټم لومړني نصب او ساتنې لپاره عملیات ترسره کول امکان لري. یوځل چې تاسو د مجازی ماشین سرچینې رامینځته کړې ، تاسو کولی شئ د SSH له لارې تنظیم کولو او وصل کولو لپاره چمتو کونکي وکاروئ ، عملیاتي سیسټم تازه کړئ ، او سکریپټ ډاونلوډ او چل کړئ.
د داخل او محصول متغیرونه.
د ننوتلو متغیرونه - د هر ډول بلاک ډولونو لپاره د داخل متغیرونه.
د محصول تغیرات تاسو ته اجازه درکوي د سرچینو رامینځته کولو وروسته ارزښتونه خوندي کړئ او په نورو ماډلونو کې د ان پټ متغیر په توګه کارول کیدی شي ، د مثال په توګه د پروویژنرز بلاک کې.
ایالتونه.
د ریاست فایلونه د چمتو کونکي پلیټ فارم سرچینو ترتیب کولو په اړه معلومات ذخیره کوي. کله چې پلیټ فارم په لومړي ځل جوړ شي، د سرچینو په اړه هیڅ معلومات شتون نلري او د هر ډول عملیاتو څخه مخکې، Terraform د هغه سرچینو اصلي زیربنا سره چې دمخه یې تشریح شوي تازه کوي.
د دولتونو اصلي هدف د دمخه رامینځته شوي سرچینو څخه د شیانو یوه ډله خوندي کول دي ترڅو د اضافه سرچینو او شیانو ترتیب پرتله کولو لپاره په پلیټ فارم کې د تکرار رامینځته کیدو او بدلونونو څخه مخنیوی وشي.
د ډیفالټ په توګه، د دولت معلومات په محلي terraform.tfstate فایل کې زیرمه شوي، مګر که اړتیا وي، دا ممکنه ده چې د ټیم کار لپاره د ریموټ ذخیره کارول ممکن وي.
تاسو کولی شئ اوسني پلیټ فارم سرچینې په دولت کې وارد کړئ ترڅو د نورو سرچینو سره نور تعامل وکړي چې په پایله کې د Terraform مرستې پرته رامینځته شوي.
2. د زیربنا جوړول
اجزاوې ترتیب شوي، اوس د Terraform په کارولو سره موږ به په تدریجي ډول د دریو مجازی ماشینونو سره زیربنا جوړه کړو. لومړی د نګینکس پراکسي سرور نصب سره ، دوهم د Nextcloud پراساس د فایل ذخیره کولو سره او دریم د CMS Bitrix سره.
موږ به کوډ ولیکو او زموږ د مثال په کارولو سره به یې اجرا کړو
لومړی، راځئ چې زموږ د نوې پروژې لپاره لارښود جوړ کړو په کوم کې چې د زیربنا تشریح کولو فایلونه به ځای په ځای شي.
mkdir project01
بیا، موږ د زیربناوو برخې تشریح کوو. Terraform اړیکې رامینځته کوي او فایلونه په فایلونو کې د توضیحاتو پراساس پروسس کوي. فایلونه پخپله نومول کیدی شي د بلاکس هدف پراساس چې تشریح شوي ، د مثال په توګه ، network.tf - د زیربنا لپاره د شبکې پیرامیټونه تشریح کوي.
زموږ د زیربنا اجزاو تشریح کولو لپاره، موږ لاندې فایلونه جوړ کړل:
د فایلونو لیست.
main.tf - د مجازی چاپیریال لپاره د پیرامیټونو توضیحات - مجازی ماشینونه، مجازی کانټینرونه؛
network.tf - د مجازی شبکې پیرامیټونو توضیحات او د NAT او فایروال قواعد؛
variables.tf - د متغیرونو لیست چې موږ یې کاروو؛
vcd.tfvars - د VMware vCloud ډایرکټر ماډل لپاره د پروژې متغیر ارزښتونه.
په Terraform کې د ترتیب کولو ژبه اعلاناتي ده او د بلاکونو ترتیب هیڅ اهمیت نلري، پرته له دې چې چمتو کونکي بلاکونه، ځکه چې په دې بلاک کې موږ هغه حکمونه تشریح کوو چې د زیربنا چمتو کولو په وخت کې اجرا کیږي او دوی به په ترتیب سره اجرا شي.
د بلاک جوړښت.
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
د بلاکونو تشریح کولو لپاره، د هغې د خپل پروګرام کولو ژبه HCL (HashiCorp Configuration Language) کارول کیږي؛ دا ممکنه ده چې د JSON په کارولو سره زیربنا تشریح کړئ. تاسو کولی شئ د ترکیب په اړه نور معلومات زده کړئ
د چاپیریال متغیر ترتیب، variables.tf او vcd.tfvars
لومړی، راځئ چې دوه فایلونه جوړ کړو چې د VMware vCloud ډایرکټر ماډل لپاره د ټولو کارول شویو متغیرونو لیست او د دوی ارزښتونه تشریح کوي. لومړی، راځئ چې د variables.tf فایل جوړ کړو.
د variables.tf فایل منځپانګې.
variable "vcd_org_user" {
description = "vCD Tenant User"
}
variable "vcd_org_password" {
description = "vCD Tenant Password"
}
variable "vcd_org" {
description = "vCD Tenant Org"
}
variable "vcd_org_vdc" {
description = "vCD Tenant VDC"
}
variable "vcd_org_url" {
description = "vCD Tenant URL"
}
variable "vcd_org_max_retry_timeout" {
default = "60"
}
variable "vcd_org_allow_unverified_ssl" {
default = "true"
}
variable "vcd_org_edge_name" {
description = "vCD edge name"
}
variable "vcd_org_catalog" {
description = "vCD public catalog"
}
variable "vcd_template_os_centos7" {
description = "OS CentOS 7"
default = "CentOS7"
}
variable "vcd_org_ssd_sp" {
description = "Storage Policies"
default = "Gold Storage Policy"
}
variable "vcd_org_hdd_sp" {
description = "Storage Policies"
default = "Bronze Storage Policy"
}
variable "vcd_edge_local_subnet" {
description = "Organization Network Subnet"
}
variable "vcd_edge_external_ip" {
description = "External public IP"
}
variable "vcd_edge_local_ip_nginx" {}
variable "vcd_edge_local_ip_bitrix" {}
variable "vcd_edge_local_ip_nextcloud" {}
variable "vcd_edge_external_network" {}
متغیر ارزښتونه چې موږ یې د چمتو کونکي څخه ترلاسه کوو.
-
vcd_org_user — د سازمان د مدیر حقونو سره کارن نوم،
-
vcd_org_password — د کارن پټنوم،
-
vcd_org — د سازمان نوم،
-
vcd_org_vdc — د مجازی معلوماتو مرکز نوم،
-
vcd_org_url - API URL،
-
vcd_org_edge_name — د مجازی روټر نوم،
-
vcd_org_catalog — د مجازی ماشین ټیمپلیټونو سره د لارښود نوم،
-
vcd_edge_external_ip - عامه IP پته،
-
vcd_edge_external_network — د بهرنۍ شبکې نوم،
-
vcd_org_hdd_sp — د HDD ذخیره کولو پالیسۍ نوم،
-
vcd_org_ssd_sp - د SSD ذخیره کولو پالیسۍ نوم.
او زموږ متغیرونه دننه کړئ:
-
vcd_edge_local_ip_nginx — د NGINX سره د مجازی ماشین IP پته،
-
vcd_edge_local_ip_bitrix - د 1C سره د مجازی ماشین IP پته: Bitrix،
-
vcd_edge_local_ip_nextcloud - د Nextcloud سره د مجازی ماشین IP پته.
د دوهم فایل سره موږ د vcd.tfvars فایل کې د VMware vCloud ډایرکټر ماډل لپاره متغیرونه رامینځته کوو او مشخص کوو: راځئ چې یادونه وکړو چې زموږ په مثال کې موږ کاروو
د vcd.tfvars دوتنې منځپانګې.
vcd_org_url = "https://vcloud.mclouds.ru/api"
vcd_org_user = "orgadmin"
vcd_org_password = "*"
vcd = "org"
vcd_org_vdc = "orgvdc"
vcd_org_maxretry_timeout = 60
vcd_org_allow_unverified_ssl = true
vcd_org_catalog = "Templates"
vcd_templateos_centos7 = "CentOS7"
vcd_org_ssd_sp = "Gold Storage Policy"
vcd_org_hdd_sp = "Bronze Storage Policy"
vcd_org_edge_name = "MCLOUDS-EDGE"
vcd_edge_external_ip = "185.17.66.1"
vcd_edge_local_subnet = "192.168.110.0/24"
vcd_edge_local_ip_nginx = "192.168.110.1"
vcd_edge_local_ip_bitrix = "192.168.110.10"
vcd_edge_local_ip_nextcloud = "192.168.110.11"
vcd_edge_external_network = "NET-185-17-66-0"
د شبکې ترتیب، network.tf.
د چاپیریال تغیرات تنظیم شوي ، اوس به موږ د مجازی ماشین اتصال سکیم تنظیم کړو - موږ به هر مجازی ماشین ته یو شخصي IP پته وټاکو او د منزل NAT به بهرنۍ شبکې ته بندرونه "پرمختللي" وکاروو. د مدیریت بندرونو ته د لاسرسي محدودولو لپاره ، موږ به یوازې زموږ د IP پتې لپاره لاسرسی تنظیم کړو.
د ټریفارم پلیټ فارم لپاره د شبکې ډیاګرام رامینځته کیږي
موږ د net_lan01 په نوم یو مجازی سازماني شبکه رامینځته کوو، د ډیفالټ دروازې: 192.168.110.254، او همدارنګه د پتې ځای سره: 192.168.110.0/24.
موږ یو مجازی شبکه تشریح کوو.
resource "vcd_network_routed" "net" {
name = "net_lan01"
edge_gateway = var.vcd_org_edge_name
gateway = "192.168.110.254"
dns1 = "1.1.1.1"
dns2 = "8.8.8.8"
static_ip_pool {
start_address = "192.168.110.1"
end_address = "192.168.110.253"
}
}
راځئ چې د فایروال قواعد رامینځته کړو چې مجازی ماشینونو ته اجازه ورکوي انټرنیټ ته لاسرسی ومومي. د دې بلاک دننه، په بادل کې ټولې مجازی سرچینې به انټرنیټ ته لاسرسی ولري:
موږ انټرنیټ ته د VM لاسرسي لپاره مقررات تشریح کوو.
resource "vcd_nsxv_firewall_rule" "fw_internet_access" {
edge_gateway = var.vcdorgedgename
name = "Internet Access"
source {
gateway_interfaces = ["internal"]
}
destination {
gateway_interfaces = ["external"]
}
service {
protocol = "any"
}
depends_on = [vcdnetworkrouted.net]
}
د انحصار رامینځته کولو سره چې د vcdnetworkrouted.net بلاک پروسس کولو وروسته ، موږ د vcdnsxvfirewallrule بلاک تنظیم کولو ته دوام ورکوو، په کارولو اړه لري پر. موږ دا اختیار کاروو ځکه چې ځینې انحصارونه په ترتیب کې په ښکاره ډول پیژندل کیدی شي.
بیا، موږ به هغه مقررات رامینځته کړو چې د بهرني شبکې څخه بندرونو ته د لاسرسي اجازه ورکوي او زموږ IP پته د SSH له لارې سرورونو ته وصل کولو لپاره په ګوته کوي. د انټرنیټ هر کارونکي په ویب سرور کې 80 او 443 بندرونو ته لاسرسی لري، او یو کارن چې د 90.1.15.1 IP پته لري د مجازی سرورونو SSH بندرونو ته لاسرسی لري.
د بهرني شبکې څخه بندرونو ته د لاسرسي اجازه ورکړئ.
resource "vcd_nsxv_firewall_rule" "fwnatports" {
edge_gateway = var.vcd_org_edge_name
name = "HTTPs Access"
source {
gateway_interfaces = ["external"]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "80"
}
service {
protocol = "tcp"
port = "443"
}
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {
edge_gateway = var.vcd_org_edge_name
name = "Admin Access"
source {
ip_addresses = [ "90.1.15.1" ]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "58301"
}
service {
protocol = "tcp"
port = "58302"
}
service {
protocol = "tcp"
port = "58303"
}
depends_on = [vcd_network_routed.net]
}
موږ د بادل محلي شبکې څخه انټرنیټ ته د لاسرسي لپاره د سرچینې NAT قواعد رامینځته کوو:
موږ د سرچینې NAT قواعد تشریح کوو.
resource "vcd_nsxv_snat" "snat_local" {
edge_gateway = var.vcd_org_edge_name
network_type = "ext"
network_name = var.vcdedgeexternalnetwork
original_address = var.vcd_edge_local_subnet
translated_address = var.vcd_edge_external_ip
depends_on = [vcd_network_routed.net]
}
او د شبکې بلاک ترتیب بشپړولو لپاره، موږ د بهرني شبکې څخه خدماتو ته د لاسرسي لپاره د منزل NAT قواعد اضافه کوو:
د منزل NAT قواعد اضافه کول.
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTPs"
original_address = var.vcd_edge_external_ip
original_port = 443
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTP"
original_address = var.vcd_edge_external_ip
original_port = 80
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
د Nginx لاندې SSH سرور ته د پورټ ژباړې لپاره د NAT قاعده اضافه کړئ.
resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH NGINX"
original_address = var.vcd_edge_external_ip
original_port = 58301
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
د SSH سرور ته د 1C-Bitrix سره د پورټ ژباړې لپاره د NAT قاعده اضافه کړئ.
resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Bitrix"
original_address = var.vcd_edge_external_ip
original_port = 58302
translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
د Nextcloud سره SSH سرور ته د پورټ ژباړې لپاره د NAT قاعده اضافه کړئ.
resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Nextcloud"
original_address = var.vcd_edge_external_ip
original_port = 58303
translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Main.tf مجازی چاپیریال ترتیب
لکه څنګه چې موږ د مقالې په پیل کې پلان کړی و، موږ به درې مجازی ماشینونه جوړ کړو. دوی به د "میلمه اصلاح" په کارولو سره چمتو شي. موږ به د شبکې پیرامیټونه د هغه ترتیباتو سره سم تنظیم کړو چې موږ یې مشخص کړي، او د کارونکي پټنوم به په اتوماتيک ډول تولید شي.
راځئ چې د vApp تشریح وکړو په کوم کې چې مجازی ماشینونه به موقعیت ولري او د دوی تشکیلات.
د مجازی ماشین ترتیب
راځئ چې د vApp کانټینر جوړ کړو. د دې لپاره چې موږ وکولی شو سمدلاسه vApp او VM مجازی شبکې سره وصل کړو ، موږ د انحصار_on پیرامیټر هم اضافه کړو:
یو کانټینر جوړ کړئ
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
راځئ چې د توضیحاتو سره یو مجازی ماشین جوړ کړو
resource "vcd_vapp_vm" "nginx" {
vapp_name = vcd_vapp.vapp.name
name = "nginx"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nginx
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
د VM توضیحاتو کې اصلي پیرامیټونه:
-
نوم - د مجازی ماشین نوم،
-
vappname - د vApp نوم چې پکې نوی VM اضافه کول،
-
catalogname / templatename - د کتلاګ نوم او د مجازی ماشین ټیمپلیټ نوم،
-
د ذخیره کولو پروفایل - د ډیفالټ ذخیره کولو پالیسي.
د شبکې بلاک پیرامیټونه:
-
ډول - د تړل شوي شبکې ډول،
-
نوم - کوم مجازی شبکه چې د VM سره وصل شي،
-
isprimary - لومړني شبکې اډاپټر،
-
ipallocation_mode - لارښود / DHCP / POOL پته تخصیص حالت،
-
ip - د مجازی ماشین لپاره IP پته، موږ به دا په لاسي ډول مشخص کړو.
override_template_disk بلاک:
-
sizeinmb - د مجازی ماشین لپاره د بوټ ډیسک اندازه
-
store_profile - د ډیسک لپاره د ذخیره کولو پالیسي
راځئ چې د Nextcloud فایل ذخیره کولو توضیحاتو سره دوهم VM جوړ کړو
resource "vcd_vapp_vm" "nextcloud" {
vapp_name = vcd_vapp.vapp.name
name = "nextcloud"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nextcloud
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
resource "vcd_vm_internal_disk" "disk1" {
vapp_name = vcd_vapp.vapp.name
vm_name = "nextcloud"
bus_type = "paravirtual"
size_in_mb = "102400"
bus_number = 0
unit_number = 1
storage_profile = var.vcd_org_hdd_sp
allow_vm_reboot = true
depends_on = [ vcd_vapp_vm.nextcloud ]
}
د vcdvminternal_disk برخه کې به موږ یو نوی مجازی ډیسک تشریح کړو چې د مجازی ماشین سره وصل دی.
د vcdvminternaldisk بلاک لپاره توضیحات:
-
bustype - د ډیسک کنټرولر ډول
-
sizeinmb - د ډیسک اندازه
-
د بس نمبر / واحد شمیره - په اډاپټر کې د پیوستون موقعیت
-
store_profile - د ډیسک لپاره د ذخیره کولو پالیسي
راځئ چې په Bitrix کې وروستي VM تشریح کړو
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
}
}
د OS تازه کول او اضافي سکریپټونه نصب کول
شبکه چمتو شوې، مجازی ماشینونه بیان شوي. زموږ د زیربنا واردولو دمخه، موږ کولی شو د چمتو کونکي بلاکونو په کارولو سره او د ځواب وړ کارولو پرته لومړني چمتو کول ترسره کړو.
راځئ وګورو چې څنګه OS تازه کړئ او د چمتو کونکي بلاک په کارولو سره د CMS بټریکس نصب کولو سکریپټ چل کړئ.
لومړی ، راځئ چې د CentOS تازه کڅوړې نصب کړو.
resource "null_resource" "nginx_update_install" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip" ]
}
}
}
د اجزاو نومول:
-
چمتو کونکی "remote-exec" - د ریموټ چمتو کولو بلاک سره وصل کړئ
-
د پیوستون بلاک کې موږ د پیوستون ډول او پیرامیټونه تشریح کوو:
-
ډول - پروتوکول، زموږ په قضیه کې SSH؛
-
کارن - د کارن نوم؛
-
پاسورډ - د کارونکي پټنوم. زموږ په قضیه کې، موږ پیرامیټر vcdvappvm.nginx.customization[0].admin_password ته اشاره کوو، کوم چې د سیسټم کارونکي لپاره پیدا شوی پټنوم ذخیره کوي.
-
کوربه - د ارتباط لپاره بهرنی IP پته؛
-
بندر - د ارتباط لپاره بندر، کوم چې مخکې د DNAT ترتیباتو کې مشخص شوی و؛
-
انلاین - د امرونو لیست لیست کړئ چې داخلیږي. حکمونه به په ترتیب سره داخل شي لکه څنګه چې پدې برخه کې ښودل شوي.
د مثال په توګه، راځئ چې د 1C-Bitrix نصب کولو سکریپټ هم اجرا کړو. د سکریپټ اجرا کولو پایله به د پلان په جریان کې شتون ولري. د سکریپټ نصبولو لپاره، لومړی موږ بلاک تشریح کوو:
راځئ چې د 1C-Bitrix نصبولو تشریح کړو.
provisioner "file" {
source = "prepare.sh"
destination = "/tmp/prepare.sh"
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"
]
}
او موږ به سمدلاسه د Bitrix تازه معلومات بیان کړو.
د 1C-Bitrix چمتو کولو یوه بیلګه.
resource "null_resource" "install_update_bitrix" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.bitrix.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58302"
timeout = "60s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip",
"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",
"chmod +x /tmp/bitrix-env.sh",
"/tmp/bitrix-env.sh"
]
}
}
مهم! سکریپټ ممکن کار ونکړي که تاسو دمخه SELinux غیر فعال نه کړئ! که تاسو د bitrix-env.sh په کارولو سره د CMS 1C-Bitrix نصب او تنظیم کولو په اړه تفصيلي مقالې ته اړتیا لرئ، او تاسو کولی شئ
3. د زیربنا پیل کول
د ماډلونو او پلگ انونو پیل کول
د کار لپاره، موږ یو ساده "د ښاغلو کټ" کاروو: د وینډوز 10 OS سره یو لپ ټاپ او د رسمي ویب پاڼې څخه د توزیع کټ terraform.exe init
د کمپیوټینګ او شبکې زیربنا تشریح کولو وروسته، موږ پالن جوړوو چې خپل ترتیب ازموینه وکړو، چیرته چې موږ وګورو چې څه به رامینځته شي او دا به څنګه یو بل سره وصل شي.
-
کمانډ اجرا کړئ
- terraform plan -var-file=vcd.tfvars
. -
موږ پایله ترلاسه کوو
- Plan: 16 to add, 0 to change, 0 to destroy.
یعنی د دغه پلان له مخې به ۱۶ منابع رامنځته شی. -
موږ پلان په قومانده پیل کوو
- terraform.exe apply -var-file=vcd.tfvars
.
مجازی ماشینونه به رامینځته شي، او بیا هغه کڅوړې چې موږ لیست کړي دي به د چمتو کونکي برخې کې اجرا شي - OS به تازه شي او CMS Bitrix به نصب شي.
د پیوستون معلومات ترلاسه کول
د پلان پلي کولو وروسته، موږ غواړو د سرورونو سره د نښلولو لپاره د متن په بڼه ډاټا ترلاسه کړو، د دې لپاره به موږ د محصول برخه په لاندې ډول بڼه کړو:
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
او لاندې محصول موږ ته د جوړ شوي مجازی ماشین لپاره پټنوم وایی:
Outputs: nginx_password = F#4u8!!N
د پایلې په توګه، موږ د نوي عملیاتي سیسټم سره مجازی ماشینونو ته لاسرسۍ ترلاسه کوو او زموږ د نور کار لپاره مخکې نصب شوي کڅوړې. ټول چمتو دي!
مګر څه که تاسو دمخه موجود زیربناوې لرئ؟
3.1. د موجوده زیربنا سره د Terraform کار کول
دا ساده ده، تاسو کولی شئ د وارداتو کمانډ په کارولو سره اوسني مجازی ماشینونه او د دوی vApp کانټینرونه وارد کړئ.
راځئ چې د VAPP سرچینې او مجازی ماشین تشریح کړو.
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
بل ګام په فارمیټ کې د vApp سرچینو ملکیت واردول دي vcdvapp.<vApp> <org>.<orgvdc>.<vApp>
چیرته:
-
vApp - د vApp نوم؛
-
org - د سازمان نوم؛
-
org_vdc - د مجازی معلوماتو مرکز نوم.
د VAPP سرچینو ملکیتونو واردول
راځئ چې د VM سرچینو ملکیتونه په بڼه وارد کړو: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, په کوم کې:
-
VM - د VM نوم؛
-
vApp - د vApp نوم؛
-
org - د سازمان نوم؛
-
orgvdc د مجازی معلوماتو مرکز نوم دی.
واردات بریالی وو
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Import prepared!
Prepared vcd_vapp_vm for import
vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
اوس موږ کولی شو نوي وارد شوي سرچینې وګورو:
وارد شوي سرچینې
> terraform show
...
# vcd_vapp.Monitoring:
resource "vcd_vapp" "Monitoring" {
guest_properties = {}
href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"
id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"
ip = "allocated"
metadata = {}
name = "Monitoring"
org = "mClouds"
status = 4
status_text = "POWERED_ON"
vdc = "mClouds"
}
…
# vcd_vapp_vm.Zabbix:
resource "vcd_vapp_vm" "Zabbix" {
computer_name = "Zabbix"
cpu_cores = 1
cpus = 2
expose_hardware_virtualization = false
guest_properties = {}
hardware_version = "vmx-14"
href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
internal_disk = [
{
bus_number = 0
bus_type = "paravirtual"
disk_id = "2000"
iops = 0
size_in_mb = 122880
storage_profile = "Gold Storage Policy"
thin_provisioned = true
unit_number = 0
},
]
memory = 8192
metadata = {}
name = "Zabbix"
org = "mClouds"
os_type = "centos8_64Guest"
storage_profile = "Gold Storage Policy"
vapp_name = "Monitoring"
vdc = "mClouds"
customization {
allow_local_admin_password = true
auto_generate_password = true
change_sid = false
enabled = false
force = false
join_domain = false
join_org_domain = false
must_change_password_on_first_login = false
number_of_auto_logons = 0
}
network {
adapter_type = "VMXNET3"
ip_allocation_mode = "DHCP"
is_primary = true
mac = "00:50:56:07:01:b1"
name = "MCLOUDS-LAN01"
type = "org"
}
}
اوس موږ حتما چمتو یو - موږ وروستي ټکي (موجوده زیربنا ته واردول) سره ترسره شوي او د Terraform سره د کار کولو ټول اصلي ټکي په پام کې نیولي دي.
وسیله خورا اسانه شوه او تاسو ته اجازه درکوي خپل زیربنا د کوډ په توګه تشریح کړئ ، د یو کلاوډ چمتو کونکي مجازی ماشینونو څخه پیل د شبکې اجزاو سرچینې تشریح کولو لپاره.
په ورته وخت کې، د چاپیریال څخه خپلواکي دا ممکنه کوي چې د محلي، بادل سرچینو سره کار وکړي، او حتی د پلیټ فارم اداره کړي. او که چیرې هیڅ ملاتړ شوی پلیټ فارم شتون نلري او تاسو غواړئ یو نوی اضافه کړئ ، تاسو کولی شئ خپل چمتو کونکی ولیکئ او وکاروئ.
سرچینه: www.habr.com