Halo, saya Denis dan salah satu bidang kegiatan saya adalah pengembangan solusi infrastruktur di X5. Hari ini saya ingin berbagi dengan Anda bagaimana Anda dapat menerapkan sistem persiapan server otomatis berdasarkan alat yang tersedia untuk umum. Menurut pendapat saya, ini adalah solusi yang menarik, sederhana dan fleksibel.
Yang kami maksud dengan persiapan adalah: mengubah server baru menjadi server yang terkonfigurasi sepenuhnya dengan OS. Linux atau dengan hypervisor ESXi (penerapan server Windows tidak dibahas dalam artikel ini).
hal:
- server β server yang perlu dikonfigurasi.
- server instalasi adalah server utama yang menyediakan seluruh proses persiapan melalui jaringan.
Mengapa otomatisasi diperlukan?
Katakanlah ada tugas: menyiapkan server secara besar-besaran dari awal, dengan kecepatan maksimal β 30 per hari. Server dari pabrikan dan model berbeda, sistem operasi berbeda mungkin diinstal di dalamnya, dan mungkin memiliki hypervisor atau tidak.
Operasi apa yang termasuk dalam proses penyiapan (tanpa otomatisasi):
- sambungkan keyboard, mouse, monitor ke server;
- konfigurasikan BIOS, RAID, IPMI;
- perbarui firmware komponen;
- menyebarkan citra sistem file (atau menginstal hypervisor dan menyalin mesin virtual);
Catatan. Alternatifnya, penerapan OS dapat dilakukan melalui instalasi dengan file respons otomatis. Namun hal ini tidak akan dibahas dalam artikel tersebut. Meskipun Anda akan melihat di bawah bahwa menambahkan fungsi ini tidaklah sulit.
- konfigurasikan parameter OS (nama host, IP, dll.).
Dengan pendekatan ini, pengaturan yang sama dilakukan secara berurutan di setiap server. Efisiensi pekerjaan tersebut sangat rendah.
Inti dari otomatisasi adalah menghilangkan partisipasi manusia dari proses persiapan server. Sebanyak mungkin.
Otomatisasi mengurangi waktu henti antar operasi dan memungkinkan penyediaan beberapa server secara bersamaan. Kemungkinan kesalahan karena faktor manusia juga sangat berkurang.
Bagaimana server dikonfigurasi secara otomatis?
Mari kita analisis semua tahapan secara detail.
Anda memiliki server Linux yang Anda gunakan sebagai server instalasi PXE. Layanan diinstal dan dikonfigurasi di dalamnya: DHCP, TFTP.
Jadi, kita mem-boot server (yang perlu dikonfigurasi) melalui PXE. Mari kita ingat cara kerjanya:
- Boot jaringan dipilih di server.
- Server memuat PXE-ROM kartu jaringan dan menghubungi server instalasi melalui DHCP untuk mendapatkan alamat jaringan.
- Server instalasi DHCP mengeluarkan alamat, serta instruksi untuk pengunduhan lebih lanjut melalui PXE.
- Server memuat bootloader jaringan dari server instalasi melalui PXE, pemuatan lebih lanjut terjadi sesuai dengan file konfigurasi PXE.
- Booting terjadi berdasarkan parameter yang diterima (kernel, initramfs, mount point, image squashfs, dll.).
Catatan. Artikel ini menjelaskan booting melalui PXE melalui mode BIOS. Saat ini, produsen secara aktif menerapkan mode boot UEFI. Untuk PXE, perbedaannya terletak pada konfigurasi server DHCP dan adanya bootloader tambahan.
Mari kita lihat contoh konfigurasi server PXE (menu pxelinux).
Berkas pxelinux.cfg/default:
default menu.c32
prompt 0
timeout 100
menu title X5 PXE Boot Menu
LABEL InstallServer Menu
MENU LABEL InstallServer
KERNEL menu.c32
APPEND pxelinux.cfg/installserver
LABEL VMware Menu
MENU LABEL VMware ESXi Install
KERNEL menu.c32
APPEND pxelinux.cfg/vmware
LABEL toolkit // ΠΌΠ΅Π½Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
MENU LABEL Linux Scripting Toolkits
MENU default
KERNEL menu.c32
APPEND pxelinux.cfg/toolkit // ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΌΠ΅Π½Ρ
File pxelinux.cfg/toolkit:
prompt 0
timeout 100
menu title X5 PXE Boot Menu
label mainmenu
menu label ^Return to Main Menu
kernel menu.c32
append pxelinux.cfg/default
label x5toolkit-auto // ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ
menu label x5 toolkit autoinstall
menu default
kernel toolkit/tkcustom-kernel
append initrd=toolkit/tk-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot/toolkit nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh CMDIS2=ββ¦β
label x5toolkit-shell // Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ - ΠΊΠΎΠ½ΡΠΎΠ»Ρ
menu label x5 toolkit shell
kernel toolkit/tkcustom-kernel
append initrd=toolkit/tkcustom-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot/toolkit nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash CMDIS2=ββ¦β
Kernel dan initramfs pada tahap ini adalah image Linux perantara, yang dengannya persiapan utama dan konfigurasi server akan dilakukan.
Seperti yang Anda lihat, bootloader meneruskan banyak parameter ke kernel. Beberapa parameter ini digunakan oleh kernel itu sendiri. Dan kita dapat menggunakannya untuk tujuan kita sendiri. Ini akan dibahas nanti, tetapi untuk saat ini Anda hanya perlu mengingat bahwa semua parameter yang diteruskan akan tersedia di image Linux perantara melalui /proc/cmdline.
Di mana saya bisa mendapatkannya, kernel dan initramfs?
Sebagai dasar, Anda dapat memilih distribusi Linux apa pun. Apa yang kami perhatikan saat memilih:
- gambar boot harus bersifat universal (ketersediaan driver, kemampuan untuk menginstal utilitas tambahan);
- Kemungkinan besar, Anda perlu menyesuaikan initramfs.
Bagaimana hal ini dilakukan dalam solusi kami untuk X5? CentOS 7 dipilih sebagai dasarnya. Mari kita coba trik berikut: siapkan struktur gambar masa depan, masukkan ke dalam arsip dan buat initramfs, yang di dalamnya akan terdapat arsip sistem file kita. Saat memuat gambar, arsip akan diperluas ke partisi tmpfs yang dibuat. Dengan cara ini kita akan mendapatkan image live linux yang minimal namun lengkap dengan semua utilitas yang diperlukan, hanya terdiri dari dua file: vmkernel dan initramfs.
#ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
mkdir -p /tftpboot/toolkit/CustomTK/rootfs /tftpboot/toolkit/CustomTK/initramfs/bin
#ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ:
yum groups -y install "Minimal Install" --installroot=/tftpboot/toolkit/CustomTK/rootfs/
yum -y install nfs-utils mariadb ntpdate mtools syslinux mdadm tbb libgomp efibootmgr dosfstools net-tools pciutils openssl make ipmitool OpenIPMI-modalias rng-tools --installroot=/tftpboot/toolkit/CustomTK/rootfs/
yum -y remove biosdevname --installroot=/tftpboot/toolkit/CustomTK/rootfs/
# ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅ΠΌ initramfs:
wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64 -O /tftpboot/toolkit/CustomTK/initramfs/bin/busybox
chmod a+x /tftpboot/toolkit/CustomTK/initramfs/bin/busybox
cp /tftpboot/toolkit/CustomTK/rootfs/boot/vmlinuz-3.10.0-957.el7.x86_64 /tftpboot/toolkit/tkcustom-kernel
# ΡΠΎΠ·Π΄Π°Π΅ΠΌ /tftpboot/toolkit/CustomTK/initramfs/init (Π½ΠΈΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠ°):
#!/bin/busybox sh
/bin/busybox --install /bin
mkdir -p /dev /proc /sys /var/run /newroot
mount -t proc proc /proc
mount -o mode=0755 -t devtmpfs devtmpfs /dev
mkdir -p /dev/pts /dev/shm /dev/mapper /dev/vc
mount -t devpts -o gid=5,mode=620 devpts /dev/pts
mount -t sysfs sysfs /sys
mount -t tmpfs -o size=4000m tmpfs /newroot
echo -n "Extracting rootfs... "
xz -d -c -f rootfs.tar.xz | tar -x -f - -C /newroot
echo "done"
mkdir -p /newroot/dev /newroot/proc /newroot/sys
mount --move /sys /newroot/sys
mount --move /proc /newroot/proc
mount --move /dev /newroot/dev
exec switch_root /newroot /sbin/init
# ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ rootfs ΠΈ initramfs:
cd /tftpboot/toolkit/CustomTK/rootfs
tar cJf /tftpboot/toolkit/CustomTK/initramfs/rootfs.tar.xz --exclude ./proc --exclude ./sys --exclude ./dev .
cd /tftpboot/toolkit/CustomTK/initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > /tftpboot/toolkit/tkcustom-initramfs-new.gz
Jadi kami telah menentukan kernel dan initramf yang harus dimuat. Hasilnya, pada tahap ini, dengan memuat image perantara linux melalui PXE, kita akan menerima konsol OS.
Bagus, tapi sekarang kita perlu mentransfer kendali ke βotomatisasiβ kita.
Itu bisa dilakukan seperti ini.
Mari kita asumsikan bahwa setelah memuat gambar kita berencana untuk mentransfer kontrol ke skrip mount.sh.
Mari sertakan skrip mount.sh di autorun. Untuk melakukan ini, Anda perlu memodifikasi initramfs:
- unpack initramfs (jika kita menggunakan opsi initramfs di atas, ini tidak diperlukan)
- sertakan kode di startup yang akan menganalisis parameter yang melewati /proc/cmdline dan mentransfer kontrol lebih lanjut;
- paket initramfs.
Catatan. Dalam kasus toolkit X5, kontrol pemuatan ditransfer ke skrip /opt/x5/toolkit/bin/hook.sh Ρ ΠΏΠΎΠΌΠΎΡΡΡ override.conf Π² getty tty1 (ExecStart=β¦)
Jadi, gambar dimuat, di mana skrip mount.sh dimulai saat autorun. Selanjutnya, skrip mount.sh menganalisis parameter yang diteruskan (script_cmd=) selama eksekusi dan meluncurkan program/skrip yang diperlukan.
perangkat label-mobil
inti...
tambahkan... nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh
perangkat label-tempurung
inti...
tambahkan... nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash
Di sini di sebelah kiri adalah menu PXE, di sebelah kanan adalah diagram transfer kendali.
Kami menemukan transfer kendali. Tergantung pada pilihan menu PXE, skrip konfigurasi otomatis atau konsol debugging diluncurkan.
Dalam hal konfigurasi otomatis, direktori yang diperlukan dipasang dari server instalasi, yang berisi:
- skrip;
- templat BIOS/UEFI yang disimpan untuk berbagai server;
- perangkat lunak;
- utilitas server;
- log
Selanjutnya, skrip mount.sh mentransfer kontrol ke skrip master-install.sh dari direktori skrip.
Pohon skrip (urutan peluncurannya) terlihat seperti ini:
- instalasi utama
- fungsi berbagi (fungsi bersama)
- info (keluaran informasi)
- model (mengatur parameter instalasi berdasarkan model server)
- prep_utils (instalasi utilitas yang diperlukan)
- fwupdate (pembaruan firmware)
- diag (diagnostik dasar)
- biosconf (pengaturan BIOS/UEFI)
- clockfix (mengatur waktu pada motherboard)
- srmconf (konfigurasi antarmuka antarmuka jarak jauh)
- raidconf (mengonfigurasi volume logis)
satu dari:
- prainstal (mentransfer kontrol ke penginstal OS atau hypervisor, seperti ESXi)
- merge-install (segera mulai membongkar gambar)
Sekarang kita tahu:
- cara mem-boot server melalui PXE;
- cara mentransfer kontrol ke skrip Anda sendiri.
Ayo lanjutkan. Pertanyaan-pertanyaan berikut menjadi relevan:
- Bagaimana cara mengidentifikasi server yang sedang kami persiapkan?
- Utilitas apa dan bagaimana cara mengkonfigurasi server?
- Bagaimana cara mendapatkan pengaturan untuk server tertentu?
Bagaimana cara mengidentifikasi server yang sedang kami persiapkan?
Sederhana saja - DMI:
dmidecode βs system-product-name
dmidecode βs system-manufacturer
dmidecode βs system-serial-number
Semua yang Anda butuhkan ada di sini: vendor, model, nomor seri. Jika Anda tidak yakin bahwa informasi ini ada di semua server, Anda dapat mengidentifikasinya berdasarkan alamat MAC-nya. Atau kedua cara tersebut secara bersamaan, jika vendor server berbeda dan pada beberapa model tidak ada informasi tentang nomor serinya.
Berdasarkan informasi yang diterima, folder jaringan dipasang dari server instalasi dan semua yang diperlukan dimuat (utilitas, firmware, dll.).
Utilitas apa dan bagaimana cara mengkonfigurasi server?
Saya akan menyediakan utilitas untuk Linux untuk beberapa produsen. Semua utilitas tersedia di situs resmi vendor.
Dengan firmware, saya rasa semuanya sudah jelas. Mereka biasanya datang dalam bentuk paket file yang dapat dieksekusi. File yang dapat dieksekusi mengontrol proses pembaruan firmware dan melaporkan kode pengembalian.
BIOS dan IPMI biasanya dikonfigurasi melalui template. Jika perlu, template dapat diedit sebelum diunduh.
Utilitas RAID dari beberapa vendor juga dapat dikonfigurasi menggunakan template. Jika tidak demikian, Anda harus menulis skrip konfigurasi.
Prosedur untuk menyiapkan RAID paling sering adalah sebagai berikut:
- Kami meminta konfigurasi saat ini.
- Jika sudah ada array logis, kami menghapusnya.
- Mari kita lihat disk fisik apa yang ada dan berapa jumlahnya.
- Buat array logis baru. Kami menghentikan proses jika terjadi kesalahan.
Bagaimana cara mendapatkan pengaturan untuk server tertentu?
Misalkan pengaturan semua server akan disimpan di server instalasi. Dalam hal ini, untuk menjawab pertanyaan kita, pertama-tama kita harus memutuskan bagaimana cara mentransfer pengaturan ke server instalasi.
Pada awalnya, Anda dapat bertahan dengan file teks. (Di masa depan, Anda mungkin ingin menggunakan file teks sebagai metode cadangan untuk mentransfer pengaturan.)
Anda dapat βberbagiβ file teks di server instalasi. Dan tambahkan mountnya ke skrip mount.sh.
Misalnya, garisnya akan terlihat seperti ini:
<nomor seri> <nama host> <subnet>
Baris-baris ini akan ditransfer ke file oleh insinyur dari mesin kerjanya. Dan kemudian, saat menyiapkan server, parameter untuk server tertentu akan dibaca dari file.
Namun, dalam jangka panjang, lebih baik menggunakan database untuk menyimpan pengaturan, status, dan log instalasi server.
Tentu saja, database saja tidak cukup, dan Anda perlu membuat bagian klien yang pengaturannya akan ditransfer ke database. Ini lebih sulit diterapkan dibandingkan dengan file teks, namun kenyataannya, semuanya tidak sesulit kelihatannya. Sangat mungkin untuk menulis versi minimal klien yang hanya akan mentransfer data ke database sendiri. Dan di masa depan dimungkinkan untuk meningkatkan program klien dalam mode bebas (laporan, pencetakan label, pengiriman pemberitahuan, dll. yang terlintas dalam pikiran).
Dengan membuat permintaan khusus ke database dan menentukan nomor seri server, kami akan menerima parameter yang diperlukan untuk mengkonfigurasi server.
Selain itu, kita tidak perlu membuat kunci untuk akses simultan, seperti halnya file teks.
Kita dapat menulis log konfigurasi ke database di semua tahapan dan mengontrol proses instalasi melalui event dan flag pada tahap persiapan.
Sekarang kita tahu caranya:
- boot server melalui PXE;
- mentransfer kendali ke skrip kami;
- mengidentifikasi server yang perlu disiapkan berdasarkan nomor serinya;
- konfigurasikan server menggunakan utilitas yang sesuai;
- mentransfer pengaturan ke database server instalasi menggunakan bagian klien.
Kami menemukan caranya:
- server yang diinstal menerima pengaturan yang diperlukan dari database;
- semua kemajuan persiapan dicatat dalam database (log, acara, bendera panggung).
Bagaimana dengan berbagai jenis perangkat lunak yang Anda instal? Bagaimana cara menginstal hypervisor, menyalin VM dan mengkonfigurasi semuanya?
Dalam hal menyebarkan image sistem file (linux) ke perangkat keras, semuanya cukup sederhana:
- Setelah menyiapkan semua komponen server, kami menyebarkan gambar.
- Instal bootloader grub.
- Kami melakukan chroot dan mengkonfigurasi semua yang diperlukan.
Cara mentransfer kontrol ke penginstal OS (menggunakan ESXi sebagai contoh).
- Kami mengatur transfer kontrol dari skrip kami ke penginstal hypervisor menggunakan file respons otomatis (kickstart):
- Kami menghapus partisi saat ini pada disk.
- Buat partisi dengan ukuran 500MB.
- Kami menandainya sebagai dapat di-boot.
- Format ke FAT32.
- Kami menyalin file instalasi ESXi ke root.
- Menginstal syslinux.
- Salin syslinux.cfg ke /syslinux/
default esxi
prompt 1
timeout 50
label esxi
kernel mboot.c32
append -c boot.cfg
- Salin mboot.c32 ke /syslinux.
- Boot.cfg harus memiliki kernelopt=ks=ftp:// /ks_esxi.cfg
- Nyalakan ulang servernya.
Setelah server di-boot ulang, penginstal ESXi akan diunduh dari hard drive server. Semua file penginstal yang diperlukan akan dimuat ke dalam memori dan kemudian instalasi ESXi akan dimulai, sesuai dengan file respons otomatis yang ditentukan.
Berikut beberapa baris dari file autoresponse ks_esxi.cfg:
%firstboot --interpreter=busybox
β¦
# ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΡΠΈΠΉΠ½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ
SYSSN=$(esxcli hardware platform get | grep Serial | awk -F " " '{print $3}')
# ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ IP
IPADDRT=$(esxcli network ip interface ipv4 get | grep vmk0 | awk -F " " '{print $2}')
LAST_OCTET=$(echo $IPADDRT | awk -F'.' '{print $4}')
# ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ NFS ΠΈΠ½ΡΡΠ°Π»Π»-ΡΠ΅ΡΠ²Π΅ΡΠ°
esxcli storage nfs add -H is -s /srv/nfs_share -v nfsshare1
# ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ssh, Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ssh-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
mv /etc/ssh /etc/ssh.tmp
cp -R /vmfs/volumes/nfsshare1/ssh /etc/
chmod go-r /etc/ssh/ssh_host_rsa_key
# ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ovftool, Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΠ ΡΠ΅ΠΉΡΠ°Ρ, ΠΏΠ»ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅
cp -R /vmfs/volumes/nfsshare1/ovftool /vmfs/volumes/datastore1/
# ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π΅ΠΌ ΠΠ
/vmfs/volumes/datastore1/ovftool/tools/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM1 /vmfs/volumes/nfsshare1/VM_T/VM1.ova vi://root:[email protected]
/vmfs/volumes/datastore1/ovftool/tools/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM2 /vmfs/volumes/nfsshare1/VM_T/VM2.ova vi://root:[email protected]
# ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΡΠΎΠΊΡ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°
ssh root@is "mysql -h'192.168.0.1' -D'servers' -u'user' -p'secretpassword' -e "SELECT ... WHERE servers.serial='$SYSSN'"" | grep -v ^$ | sed 's/NULL//g' > /tmp/servers
...
# Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠΈ
echo '#!/bin/sh' > /vmfs/volumes/datastore1/netconf.sh
echo "esxcli network ip interface ipv4 set -i=vmk0 -t=static --ipv4=$IPADDR --netmask=$S_SUB || exit 1" >> /vmfs/volumes/datastore1/netconf.sh
echo "esxcli network ip route ipv4 add -g=$S_GW -n=default || exit 1" >> /vmfs/volumes/datastore1/netconf.sh
chmod a+x /vmfs/volumes/datastore1/netconf.sh
# Π·Π°Π΄Π°Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ guestinfo.esxihost.id, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π² Π½Π΅ΠΌ ΡΠ΅ΡΠΈΠΉΠ½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ
echo "guestinfo.esxihost.id = "$SYSSN"" >> /vmfs/volumes/datastore1/VM1/VM1.vmx
echo "guestinfo.esxihost.id = "$SYSSN"" >> /vmfs/volumes/datastore1/VM2/VM2.vmx
...
# ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² Π±Π°Π·Π΅
SYSNAME=$(esxcli hardware platform get | grep Product | sed 's/Product Name://' | sed 's/^ *//')
UUID=$(vim-cmd hostsvc/hostsummary | grep uuid | sed 's/ //g;s/,$//' | sed 's/^uuid="//;s/"$//')
ssh root@is "mysql -D'servers' -u'user' -p'secretpassword' -e "UPDATE servers ... SET ... WHERE servers.serial='$SYSSN'""
ssh root@is "mysql -D'servers' -u'user' -p'secretpassword' -e "INSERT INTO events ...""
# Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ SSH
rm -rf /etc/ssh
mv /etc/ssh.tmp /etc/ssh
# Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ
esxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru
/vmfs/volumes/datastore1/netconf.sh
reboot
Pada tahap ini, hypervisor diinstal dan dikonfigurasi, dan mesin virtual disalin.
Bagaimana cara mengkonfigurasi mesin virtual sekarang?
Kami sedikit curang: selama instalasi kami mengatur parameter guestinfo.esxihost.id = "$SYSSN" di file VM1.vmx dan menunjukkan nomor seri server fisik di dalamnya.
Sekarang, setelah memulai, mesin virtual (dengan paket vmware-tools terinstal) dapat mengakses parameter ini:
ESXI_SN=$(vmtoolsd --cmd "info-get guestinfo.esxihost.id")
Artinya, VM akan dapat mengidentifikasi dirinya sendiri (mengetahui nomor seri host fisik), membuat permintaan ke database server instalasi dan menerima parameter yang perlu dikonfigurasi. Ini semua dikompilasi menjadi sebuah skrip, yang akan diluncurkan secara otomatis ketika guestos vm dimulai (tetapi sekali: RunOnce).
Sekarang kita tahu caranya:
- boot server melalui PXE;
- mentransfer kendali ke skrip kami;
- mengidentifikasi server yang perlu disiapkan berdasarkan nomor serinya;
- konfigurasikan server menggunakan utilitas yang sesuai;
- mentransfer pengaturan ke database server instalasi menggunakan bagian klien;
- mengonfigurasi berbagai jenis perangkat lunak, termasuk menerapkan hypervisor esxi dan mengonfigurasi mesin virtual (semuanya secara otomatis).
Kami menemukan caranya:
- server yang diinstal menerima pengaturan yang diperlukan dari database;
- semua kemajuan persiapan dicatat dalam database (log, acara, bendera panggung).
Intinya:
Saya yakin keunikan solusi ini terletak pada fleksibilitas, kesederhanaan, kemampuan, dan keserbagunaannya.
Silakan tulis di komentar apa pendapat Anda.
Sumber: www.habr.com