اس مضمون میں ہم دیکھیں گے کہ Terraform کس چیز پر مشتمل ہے، اور آہستہ آہستہ اپنا بنیادی ڈھانچہ بھی شروع کریں گے۔
ہر چیز کے بارے میں تفصیل سے اور تین مراحل میں:
1. Terraform - تفصیل، فوائد اور اجزاء
Terraform ایک IaC (Infrastructure-as-Code) ٹول ہے جو کوڈ کا استعمال کرتے ہوئے ورچوئل انفراسٹرکچر کی تعمیر اور انتظام کرتا ہے۔
ہم نے ٹول کے ساتھ کام کرنے کے کئی فوائد نوٹ کیے:
-
نئے کرایہ داروں کی تعیناتی کی رفتار (اپنی مرضی کے مطابق ورچوئل ماحول)۔ عام طور پر، جتنے زیادہ نئے کلائنٹس ہوتے ہیں، اتنے ہی زیادہ "کلکس" تکنیکی معاون عملے کو نئے وسائل شائع کرنے کے لیے کرنے کی ضرورت ہوتی ہے۔ Terraform کے ساتھ، صارفین تکنیکی مدد کی ضرورت کے بغیر یا مشین کو خود بند کیے بغیر ورچوئل مشین کی ترتیبات (مثال کے طور پر، OS کو خود بخود بند کرنا اور ورچوئل ڈسک پارٹیشن کو بڑھانا) تبدیل کر سکتے ہیں۔
-
ایکٹیویشن پلان کی فوری تصدیق نیا کرایہ دار۔ انفراسٹرکچر کوڈ کی تفصیل کا استعمال کرتے ہوئے، ہم فوری طور پر چیک کر سکتے ہیں کہ کیا شامل کیا جائے گا اور کس ترتیب میں، اور ساتھ ہی یہ یا وہ ورچوئل مشین یا ورچوئل نیٹ ورک جس میں ورچوئل مشینوں کے کنکشن ہوں گے، کس حتمی حالت میں ہوں گے۔
-
سب سے زیادہ مقبول کلاؤڈ پلیٹ فارم کی وضاحت کرنے کی صلاحیت۔ آپ ٹول استعمال کر سکتے ہیں۔ Amazon اور Google Cloud سے، VMware vCloud ڈائریکٹر پر مبنی نجی پلیٹ فارمز تک، IaaS، SaaS اور PaaS حل کے اندر خدمات پیش کرتے ہیں۔
-
متعدد کلاؤڈ فراہم کنندگان کا نظم کریں۔ اور ان کے درمیان بنیادی ڈھانچے کو تقسیم کریں تاکہ فالٹ ٹولرنس کو بہتر بنایا جا سکے، ایک ہی کنفیگریشن کا استعمال کرتے ہوئے کلاؤڈ وسائل کی تخلیق، تشخیص اور ان کا نظم کریں۔
-
ڈیمو اسٹینڈز بنانے کے لیے آسان استعمال سافٹ ویئر ٹیسٹنگ اور ڈیبگنگ کے لیے۔ آپ ٹیسٹنگ ڈیپارٹمنٹ کے لیے اسٹینڈز بنا اور منتقل کر سکتے ہیں، متوازی طور پر مختلف ماحول میں ٹیسٹ سافٹ ویئر، اور صرف ایک ریسورس بلڈ پلان بنا کر وسائل کو فوری طور پر تبدیل اور حذف کر سکتے ہیں۔
"ٹیریریم" ٹیرافارم
ہم نے مختصراً ٹول کے فوائد کے بارے میں بات کی، اب آئیے اسے اس کے اجزاء میں تقسیم کرتے ہیں۔
فراہم کرنے والے
Terraform میں، تقریبا کسی بھی قسم کے بنیادی ڈھانچے کو وسائل کے طور پر پیش کیا جا سکتا ہے۔ وسائل اور API پلیٹ فارم کے درمیان تعلق فراہم کنندہ ماڈیولز کے ذریعے فراہم کیا جاتا ہے، جو آپ کو ایک مخصوص پلیٹ فارم کے اندر وسائل بنانے کی اجازت دیتے ہیں، مثال کے طور پر، Azure یا VMware vCloud Director۔
پروجیکٹ کے حصے کے طور پر، آپ مختلف پلیٹ فارمز پر مختلف فراہم کنندگان کے ساتھ بات چیت کر سکتے ہیں۔
وسائل (وسائل کی تفصیل)۔
وسائل کی تفصیل آپ کو پلیٹ فارم کے اجزاء کا انتظام کرنے کی اجازت دیتی ہے، جیسے کہ ورچوئل مشینیں یا نیٹ ورک۔
آپ خود VMware vCloud ڈائریکٹر فراہم کنندہ کے لیے وسائل کی تفصیل بنا سکتے ہیں اور اس تفصیل کو کسی بھی ہوسٹنگ فراہم کنندہ کے ساتھ وسائل بنانے کے لیے استعمال کر سکتے ہیں جو vCloud Director استعمال کرتا ہے۔ آپ کو صرف تصدیقی پیرامیٹرز اور نیٹ ورک کنکشن کے پیرامیٹرز کو مطلوبہ ہوسٹنگ فراہم کنندہ میں تبدیل کرنے کی ضرورت ہے
رزق دینے والے۔
یہ جزو ورچوئل مشینیں بنانے کے بعد آپریٹنگ سسٹم کی ابتدائی تنصیب اور دیکھ بھال کے لیے آپریشنز کرنا ممکن بناتا ہے۔ ایک بار جب آپ نے ایک ورچوئل مشین ریسورس بنا لیا، تو آپ پروویژنرز کو SSH کے ذریعے کنفیگر اور کنیکٹ کرنے، آپریٹنگ سسٹم کو اپ ڈیٹ کرنے، اور اسکرپٹ کو ڈاؤن لوڈ اور چلانے کے لیے استعمال کر سکتے ہیں۔
ان پٹ اور آؤٹ پٹ متغیرات۔
ان پٹ متغیرات - کسی بھی قسم کے بلاک کے لیے ان پٹ متغیرات۔
آؤٹ پٹ متغیرات آپ کو وسائل بنانے کے بعد اقدار کو بچانے کی اجازت دیتے ہیں اور دوسرے ماڈیولز میں ان پٹ متغیر کے طور پر استعمال کیا جا سکتا ہے، مثال کے طور پر پروویژنرز بلاک میں۔
ریاستیں.
ریاستوں کی فائلیں فراہم کنندہ پلیٹ فارم کے وسائل کی ترتیب کے بارے میں معلومات کو ذخیرہ کرتی ہیں۔ جب پلیٹ فارم پہلی بار بنایا جاتا ہے، وسائل کے بارے میں کوئی معلومات نہیں ہوتی ہیں اور کسی بھی آپریشن سے پہلے، Terraform پہلے سے بیان کردہ وسائل کے حقیقی انفراسٹرکچر کے ساتھ ریاست کو اپ ڈیٹ کرتا ہے۔
ریاستوں کا بنیادی مقصد یہ ہے کہ پہلے سے تخلیق کردہ وسائل کی اشیاء کے ایک گروپ کو بچانا ہے تاکہ اضافی وسائل اور اشیاء کی ترتیب کا موازنہ کیا جا سکے تاکہ پلیٹ فارم میں بار بار تخلیق اور تبدیلیوں سے بچا جا سکے۔
پہلے سے طے شدہ طور پر، ریاستی معلومات مقامی terraform.tfstate فائل میں محفوظ کی جاتی ہیں، لیکن اگر ضروری ہو تو، ٹیم کے کام کے لیے ریموٹ اسٹوریج کا استعمال ممکن ہے۔
آپ دوسرے وسائل کے ساتھ مزید تعامل کرنے کے لیے موجودہ پلیٹ فارم کے وسائل کو بھی درآمد کر سکتے ہیں جو بدلے میں Terraform کی مدد کے بغیر بنائے گئے تھے۔
2. بنیادی ڈھانچے کی تخلیق
اجزاء کو ترتیب دیا گیا ہے، اب Terraform کا استعمال کرتے ہوئے ہم آہستہ آہستہ تین ورچوئل مشینوں کے ساتھ ایک بنیادی ڈھانچہ بنائیں گے۔ پہلا nginx پراکسی سرور نصب کے ساتھ، دوسرا نیکسٹ کلاؤڈ پر مبنی فائل اسٹوریج کے ساتھ اور تیسرا CMS Bitrix کے ساتھ۔
ہم اپنی مثال کے ذریعے کوڈ لکھیں گے اور اس پر عمل کریں گے۔
سب سے پہلے، آئیے اپنے نئے پروجیکٹ کے لیے ایک ڈائرکٹری بنائیں جس میں انفراسٹرکچر کو بیان کرنے والی فائلیں رکھی جائیں گی۔
mkdir project01
اگلا، ہم بنیادی ڈھانچے کے اجزاء کی وضاحت کرتے ہیں۔ Terraform فائلوں میں بیان کی بنیاد پر تعلقات اور فائلوں پر کارروائی کرتا ہے۔ فائلوں کا نام بلاکس کے بیان کردہ مقصد کی بنیاد پر رکھا جا سکتا ہے، مثال کے طور پر network.tf - بنیادی ڈھانچے کے لیے نیٹ ورک کے پیرامیٹرز کو بیان کرتا ہے۔
اپنے بنیادی ڈھانچے کے اجزاء کو بیان کرنے کے لیے، ہم نے درج ذیل فائلیں بنائیں:
فائلوں کی فہرست۔
main.tf - ورچوئل ماحول کے لیے پیرامیٹرز کی تفصیل - ورچوئل مشینیں، ورچوئل کنٹینرز؛
network.tf - ورچوئل نیٹ ورک کے پیرامیٹرز اور NAT اور فائر وال کے قواعد کی تفصیل؛
variables.tf - متغیرات کی فہرست جو ہم استعمال کرتے ہیں۔
vcd.tfvars - VMware vCloud ڈائریکٹر ماڈیول کے لیے پروجیکٹ متغیر اقدار۔
ٹیرافارم میں کنفیگریشن لینگویج اعلانیہ ہے اور پروویژنر بلاکس کے علاوہ بلاکس کی ترتیب سے کوئی فرق نہیں پڑتا، کیونکہ اس بلاک میں ہم بنیادی ڈھانچے کی تیاری کے دوران ان احکامات کی وضاحت کرتے ہیں جن پر عمل درآمد کیا جائے گا اور انہیں ترتیب سے عمل میں لایا جائے گا۔
بلاک ڈھانچہ۔
<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 — نیکسٹ کلاؤڈ والی ورچوئل مشین کا 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 ایڈریس تفویض کریں گے اور بندرگاہوں کو بیرونی نیٹ ورک پر "آگے بڑھانے" کے لیے Destination 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 بلاک کو ترتیب دینے کے لیے آگے بڑھتے ہیں۔، کے ذریعے منحصرکرتاہے. ہم اس اختیار کو استعمال کرتے ہیں کیونکہ کچھ انحصار کنفیگریشن میں واضح طور پر پہچانے جا سکتے ہیں۔
اس کے بعد، ہم ایسے اصول بنائیں گے جو بیرونی نیٹ ورک سے بندرگاہوں تک رسائی کی اجازت دیتے ہیں اور SSH کے ذریعے سرورز سے جڑنے کے لیے ہمارے IP ایڈریس کی نشاندہی کرتے ہیں۔ کسی بھی انٹرنیٹ صارف کو ویب سرور پر پورٹ 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]
}
اور نیٹ ورک بلاک کی ترتیب کو مکمل کرنے کے لیے، ہم بیرونی نیٹ ورک سے خدمات تک رسائی کے لیے Destination 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]
}
1C-Bitrix کے ساتھ SSH سرور میں پورٹ ترجمہ کے لیے 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 — MANUAL/DHCP/POOL ایڈریس ایلوکیشن موڈ،
-
ip — ورچوئل مشین کے لیے IP ایڈریس، ہم اسے دستی طور پر بیان کریں گے۔
override_template_disk بلاک:
-
sizeinmb — ورچوئل مشین کے لیے بوٹ ڈسک کا سائز
-
اسٹوریج_پروفائل - ڈسک کے لیے اسٹوریج کی پالیسی
آئیے نیکسٹ کلاؤڈ فائل اسٹوریج کی تفصیل کے ساتھ دوسرا 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 - ڈسک کا سائز
-
بس نمبر / یونٹ نمبر - اڈاپٹر میں کنکشن کا مقام
-
اسٹوریج_پروفائل - ڈسک کے لیے اسٹوریج کی پالیسی
آئیے 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 Bitrix انسٹالیشن اسکرپٹ کو چلانے کا طریقہ۔
پہلے، آئیے 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" ]
}
}
}
اجزاء کا عہدہ:
-
provisioner "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. بنیادی ڈھانچے کی ابتدا
ماڈیولز اور پلگ ان شروع کرنا
کام کے لیے، ہم ایک سادہ "جنٹل مین کٹ" استعمال کرتے ہیں: Windows 10 OS والا لیپ ٹاپ اور آفیشل ویب سائٹ سے ڈسٹری بیوشن کٹ terraform.exe init
کمپیوٹنگ اور نیٹ ورک کے بنیادی ڈھانچے کو بیان کرنے کے بعد، ہم اپنی ترتیب کو جانچنے کے لیے منصوبہ بندی شروع کرتے ہیں، جہاں ہم دیکھ سکتے ہیں کہ کیا تخلیق کیا جائے گا اور یہ ایک دوسرے سے کیسے منسلک ہوگا۔
-
کمانڈ پر عمل کریں۔
- terraform plan -var-file=vcd.tfvars
. -
ہمیں نتیجہ ملتا ہے۔
- Plan: 16 to add, 0 to change, 0 to destroy.
یعنی اس پلان کے مطابق 16 وسائل بنائے جائیں گے۔ -
ہم کمانڈ پر منصوبہ شروع کرتے ہیں۔
- 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
یہ آسان ہے، آپ import کمانڈ کا استعمال کرکے موجودہ ورچوئل مشینیں اور ان کے 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