Lenovo XClarity Integrator สำหรับ Proxmox
Lenovo XClarity Integrator สำหรับ Proxmox เป็นเครื่องมือที่พัฒนาด้วย Python เพื่อช่วยอัปเดตเฟิร์มแวร์อัตโนมัติสำหรับสภาพแวดล้อม Proxmox Cluster ที่ทำงานบนเซิร์ฟเวอร์ Lenovo ThinkSystem โดยจะเชื่อมต่อกับ Lenovo XClarity Administrator (LXCA) เพื่อให้โครงสร้างพื้นฐานของคุณทันสมัยอยู่เสมอ ลดเวลาหยุดทำงานและลดการดำเนินการด้วยมือ
โซลูชันนี้ออกแบบมาสำหรับผู้ดูแลระบบ IT ที่ต้องการจัดการการอัปเดตในคลัสเตอร์ Proxmox ได้อย่างมีประสิทธิภาพ
คุณสมบัติ
- เชื่อมต่อกับ Lenovo XClarity Administrator REST API ได้อย่างไร้รอยต่อ
- อัปเดตเฟิร์มแวร์อัตโนมัติตามนโยบายที่กำหนดผ่าน Lenovo XClarity Administrator
- ดำเนินการอัปเดตแบบรู้จักคลัสเตอร์ เพื่อลดผลกระทบต่อการให้บริการ
- บันทึกและรายงานผลการอัปเดต
- กำหนดค่าต่าง ๆ ได้ผ่านไฟล์
config.ini
วิธีการทำงาน
เมื่อคุณเรียกใช้งานโปรแกรม จะดำเนินการตามขั้นตอนดังนี้:
- โหลดพารามิเตอร์การทำงานจากไฟล์
config.ini - ขอรหัสผ่านหลัก หากรหัสผ่านถูกจัดเก็บแบบปลอดภัย (เช่น เข้ารหัส)
- ตรวจสอบว่าโฮสต์ถูกจัดการโดย LXCA และมีนโยบายความสอดคล้องของเฟิร์มแวร์กำหนดไว้
- ตรวจสอบว่าโฮสต์สอดคล้องกับนโยบายที่กำหนดหรือไม่
- หากไม่สอดคล้อง จะดำเนินการย้าย VM และ CT ออกจากโฮสต์ทีละตัว อัปเดตเฟิร์มแวร์ผ่าน LXCA แล้วนำ VM กลับไปยังโฮสต์ที่อัปเดตแล้ว
ข้อกำหนด
- Python: 3.x (ทดสอบกับ Python 3.11 และ Python 3.13 (strict SSL))
- ไลบรารี Python ที่ระบุใน
requirements.txt - มี Lenovo XClarity Administrator ที่กำลังทำงาน พร้อมข้อมูล API credentials ที่เหมาะสม
- มี Proxmox VE cluster หรือ Proxmox VE single node ที่ทำงานบนเซิร์ฟเวอร์ที่รองรับโดย Lenovo XClarity Administrator (ทดสอบกับเซิร์ฟเวอร์ Lenovo ThinkSystem เท่านั้น)
- มี Compliance Policy กำหนดให้กับแต่ละเซิร์ฟเวอร์ในคลัสเตอร์
- มี OS ที่จะใช้รันเครื่องมือนี้ (แนะนำ Linux แต่ควรใช้งานได้บน Windows ด้วย) ข้อควรระวัง: ไม่รองรับ/ไม่แนะนำให้รันเครื่องมือนี้โดยตรงบนเซิร์ฟเวอร์ Proxmox
การติดตั้ง
-
แตกไฟล์แพ็กเกจลงในระบบของคุณ (แนะนำให้ใช้ Linux)
-
(ไม่บังคับแต่แนะนำ) สร้าง Python Virtual Environment 2.1. สร้าง virtual environment ใหม่ในโฟลเดอร์โปรเจกต์:
python -m venv venv2.2. เปิดใช้งาน virtual environment:
- บน Linux/Mac:
source venv/bin/activate- บน Windows:
venv\Scripts\activate -
ติดตั้ง dependencies:
pip install -r requirements.txt -
เตรียมไฟล์ config ของคุณ (ดูหัวข้อ Config File ด้านล่าง)
ไฟล์ Config
-
ตรวจสอบไฟล์ตัวอย่าง config
config.ini.sampleไฟล์นี้มีพารามิเตอร์ที่สามารถปรับแต่งได้ทั้งหมด เช่น:- LXCA hostname หรือ IP
- LXCA API credentials
- รายชื่อ node ในคลัสเตอร์ Proxmox
-
คัดลอกไฟล์ตัวอย่างและปรับแต่ง:
cp config.ini.sample config.ini
แก้ไข config.ini ด้วย editor ที่คุณถนัด เพื่อกำหนดค่าตามสภาพแวดล้อมของคุณ
รายละเอียดแต่ละฟิลด์
ส่วน Proxmox
-
PROXMOX_USER - จำเป็น - ฟิลด์นี้ระบุชื่อผู้ใช้ที่ได้รับสิทธิ์เข้าถึงคลัสเตอร์ Proxmox (ทุก node ในคลัสเตอร์) และดำเนินการต่าง ๆ เช่น ย้าย VM ต้องเป็นผู้ใช้ Linux เท่านั้น เพราะจำเป็นสำหรับการตั้ง node เป็น maintenance mode - ค่าเริ่มต้น = root@pam (ไม่ต้องใส่เครื่องหมายคำพูด)
-
PROXMOX_PASS - จำเป็น - ต้องระบุรหัสผ่านของผู้ใช้ที่ระบุในฟิลด์
PROXMOX_USERรหัสผ่านสามารถเก็บเป็น plain-text (ง่ายแต่ไม่ปลอดภัย) หรือแบบเข้ารหัส (ปลอดภัยกว่า) ดูวิธีการเก็บรหัสผ่านแบบเข้ารหัสในหัวข้อ "Security section" ด้านล่าง -
PROXMOX_VERIFY_SSL - จำเป็น - หากต้องการข้ามการตรวจสอบ SSL Certificate ให้ตั้งค่านี้เป็น
Falseโดยปกติถ้าใช้ self-signed certificate จะต้องตั้งเป็นFalseโดยเฉพาะถ้าใช้ Python > 3.11 คุณ ต้อง ตั้งค่านี้เป็นFalseหากต้องการตั้งเป็นTrueให้ดูวิธีในหัวข้อ "CA Certificate validation" -
CLUSTER_NODES - จำเป็น - ฟิลด์นี้ระบุ host ที่สามารถอัปเดตได้โดยเครื่องมือ ฟิลด์นี้เป็น array ที่แต่ละ element เป็น object แบบ JSON ที่ระบุ 3 พารามิเตอร์ของ host: -- xcc = IP Address ของ XCC host (ต้อง เป็น IP address เท่านั้น ไม่ใช่ hostname) -- pve_ip = IP Address ของ PVE host -- pve_host = hostname ของ PVE host
รูปแบบที่คาดหวังสำหรับ host คือ:
{"xcc":<IP_xcc_node>, "pve_ip": <IP_node> , "pve_host": <NAME_node>}
-
TIMEOUT_HOST - ไม่บังคับ - ระบุเวลาสูงสุด (วินาที) ที่จะรอให้กระบวนการอัปเกรดเสร็จสิ้น - ค่าเริ่มต้น = 3600
-
TIMEOUT_VM - ไม่บังคับ - ระบุเวลาสูงสุด (วินาที) ที่จะรอให้การดำเนินการกับ VM (ย้าย, ปิด) เสร็จก่อนจะคืนค่า error - ค่าเริ่มต้น = 300 วินาที
-
VM_LOCAL_DISKS - จำเป็น - ค่าที่อนุญาตคือ:
POWEROFFเพื่ออนุญาตให้เครื่องมือปิด VM ที่มี local disk (เช่น cdrom, vm disk บน local storage),FAILเพื่อหยุดกระบวนการและให้แก้ไขเอง - ค่าเริ่มต้น =FAIL -
VM_LOCAL_RESOURCES - จำเป็น - ค่าที่อนุญาตคือ:
POWEROFFเพื่ออนุญาตให้เครื่องมือปิด VM ที่มี local resources (เช่น PCIe adapter),FAILเพื่อหยุดกระบวนการและให้แก้ไขเอง - ค่าเริ่มต้น =FAIL -
VM_LOCAL_DISKS_EXPERT - ทดลองใช้ - ไม่บังคับ - ใช้โดยความเสี่ยงของคุณเอง!! - สำหรับผู้เชี่ยวชาญเท่านั้น - อย่าใช้ถ้าไม่แน่ใจว่ากำลังทำอะไร พารามิเตอร์นี้อนุญาตให้ย้าย VM ที่มี local disk (ไม่รวม cdrom) คุณต้องตรวจสอบเองว่าตรงตามเงื่อนไขขณะรัน (เช่น ชื่อ storage เหมือนกัน, มีพื้นที่ disk เพียงพอ ฯลฯ) ค่าที่อนุญาตคือ:
Trueโปรแกรมจะพยายามย้าย VM ที่มี local disk (ไม่รวม local cd-rom) หรือFalseโปรแกรมจะทำตามที่ระบุในVM_LOCAL_DISKSค่าเริ่มต้น =False
ส่วน LXCA session
-
LXCA_HOST - จำเป็น - ฟิลด์นี้ระบุ IP Address (หรือ hostname ถ้า DNS resolve ได้) ของ Lenovo XClarity Administrator (LXCA) ที่จัดการเซิร์ฟเวอร์ Proxmox
-
LXCA_USER - จำเป็น - ฟิลด์นี้ระบุชื่อผู้ใช้ LXCA ที่มีสิทธิ์อัปเดตเซิร์ฟเวอร์ Proxmox
-
LXCA_PASS - จำเป็น - ระบุรหัสผ่านของผู้ใช้ LXCA ที่ระบุในฟิลด์
LXCA_USERรหัสผ่านสามารถเก็บเป็น plain-text (ง่ายแต่ไม่ปลอดภัย) หรือแบบเข้ารหัส (ปลอดภัยกว่า) ดูวิธีการเก็บรหัสผ่านแบบเข้ารหัสในหัวข้อ "Security section" ด้านล่าง -
LXCA_VERIFY_SSL - จำเป็น - หากต้องการข้ามการตรวจสอบ SSL Certificate ให้ตั้งค่านี้เป็น
Falseโดยปกติถ้าใช้ self-signed certificate จะต้องตั้งเป็นFalseโดยเฉพาะถ้าใช้ Python > 3.11 คุณ ต้อง ตั้งค่านี้เป็นFalseหากต้องการตั้งเป็นTrueให้ดูวิธีในหัวข้อ "CA Certificate validation"
ส่วน Security
- SALT - ไม่บังคับ - สามารถเก็บ SALT ที่นี่เพื่อใช้ในการเข้ารหัสรหัสผ่าน
โปรดทราบ: หากคุณกังวลเรื่องการเก็บรหัสผ่านแบบ plain-text ในไฟล์ config.ini คุณสามารถใช้วิธีต่อไปนี้เพื่อเก็บรหัสผ่านแบบเข้ารหัส หากมีการระบุ SALT ในไฟล์ config.ini โปรแกรมจะขอรหัสผ่านหลักเพื่อถอดรหัสรหัสผ่านใน config
วิธีเข้ารหัสรหัสผ่านใน config.ini (ไม่บังคับ)
คุณสามารถรันโปรแกรม create_encrypted_password.py หากต้องการเก็บรหัสผ่านแบบเข้ารหัสในไฟล์ config
python create_encrypted_password.py
โปรแกรมจะขอรหัสผ่านหลัก (ต้องใช้ตอนรัน integrator) และจะเข้ารหัสรหัสผ่าน PVE และ LXCA พร้อมแสดงบรรทัดที่ต้องนำไปใส่ในไฟล์ config (ตัวอย่าง):
Add the following three lines to your config.ini:
LXCA_PASS = gAAAAABonuj0JNenRko_DS-HTcZkFfoho_ZID6RcwLTFPNn7A2QYsNgtE3-wjzCE8R0_bpVquZLDGpe9ARpJdZ7tSEWoNXTOQg==
PROXMOX_PASS = gAAAAABonuj0aXh5IYUhClWjBaOBh9HgcvtmwyB9rYzlvnSO-NAS51rNQXaBH0CjlgvF4lkwpPsXSIi2SLpozKmueTtpV_uQJQ==
SALT = E3T1B/Ty6nk3RJq7dQq8Pg==
การตรวจสอบ CA Certificate
หากคุณใช้ certificate แบบ custom ในระบบ คุณสามารถเลือกตรวจสอบ certificate ของ Proxmox host และ/หรือ LXCA เพื่อให้สอดคล้องกับมาตรฐานความปลอดภัย
ให้สร้างไฟล์ชื่อ custom_cacert.pem ในโฟลเดอร์เดียวกับเครื่องมือ แล้วนำ CA certificate(s) ของระบบคุณในรูปแบบ pem มาใส่ไว้ (ดูตัวอย่างด้านล่าง):
-----BEGIN CERTIFICATE-----
MIIFzTCCA7WgAwIBAgIUdmBnkIBixu29Fv7wAI4de2sxPQ0wDQYJKoZIhvcNAQEL
BQAwdjEkMCIGA1UEAwwbUHJveG1veCBWaXJ0dWFsIEVudmlyb25tZW50MS0wKwYD
VQQLDCQzNzI4MzdlNS1jMjvkLTQwZjgtODA2NC02YWY2OTFlNWMxODMxHzAdBgNV
BAoMFlBWRSBDbHVzdGVyIE1hbmFnZXIgQ0EwHhcNMjUwMzE0MTE0NDE5WhcNMzUw
MzEyMTE0NDE5WjB2MSQwIgYDVQQDDbtQcm94bW94IFZpcnR1YWwgRW52aXJvbm1l
bnQxLTArBgNVBAsMJDM3MjgzN2U1LWMyNWQtNDBmOC04MDY0LTZhZjY5MWU1YzE4
MzEfMB0GA1UECgwWUFZFIENsdXN0ZXIgTWFuYWdlciBDQTCCAiIwDQYJKoZIhvcN
aQEBBQADggIPADCCAgoCggIBANR+cPxIkIEBNx9YCAaaL2+fOUWy/fBaeBMCdD+D
7F/Bi+Mcpn2p3+gVuhyCaTcYZnP0aewHUI4xCL8YHFwqWv6J7ryMV++i/0Rbkzny
EZvKISNxTuZ/9ZioP1S9K3Se3ZVZI23xyLQ/Wu2mqPo5d3QLttR5/ndBLVmUtMZe
pz3Jlj2kQxvQrbG4SdHBs4GpqLbDoqktkFK+nJjGuibNVovZFKufv+7ySoKhbF9l
I21A4Ta+QqlhG+TD6r4c61yGKgX/IozrsvIOaOBwLHX81gEOwh5BZ6G++OKblQu+
nb7ZEyZYUQ4sT6I+HykcyA9amil4Six5qnOohNJwtd9QCZZiFWQhOS+cI627L0EU
uQ7DJ60McDyrMqgNWZOnBKLqoDSi2M1ZkXI1ACa/IoUeutITlMnZucLIdTM1VPhV
qQIJDqb2TaKQnjxnuqSXaA0DVwcSnX+VZgTUbzbV/+tlPENnQ3KcarqwvkUXlQB0
uagYmCURylUJXOT4r+8oUJDak4zwPjOQLH+PF3OdGScj4FIByNL+1G08UmhHzixi
a76J8eF0NOx65tBJDjie3McU7vrDJ8DrIbcM/LOvFa9PCrGe9wNmHqqOtoUuxdaR
b6co1YE34OF2cdyeaEVRVYtKFFp/Oa0ZA10eBEOFxzv4KTFi4/Y+nuMjKMYY0Kmo
XUxJAgMBAAGjUzBRMB0GA1UdDgQWBBQxTKcz/j1/m505HaGyrZtGqiDaFDAfBgNV
HSMEGDAWgBQxTKcz/j1/m505HaGyrZtGqiDaFDAPBgNVHRMBAf8EBTADAQH/MA0G
CSqGSIb3DQEBCwUAA4ICAQCcsA4imt0cpgYNbBvufvBpObGKkiSoimd6p1fpJhjX
PMDdtn6dVw2zbAmqDmBqdRTenK9J30OWVoYmpnh5H+p8wM1uT5js248DmhtXTeUd
xHHVyz9c2ooZT/7EGqWAa/VRpKAeN99uzEmLZzxxb0Sg7wvN8Q7KbIiJdtckqo09
sZqDXIKFnqRL0Gyys9ZvsGZFpZoUipA+IbJVQlArKjWFNZkPhT14xMPdoZAMX4Zi
45srzk4Z9sJjKkYaA5eFsirbPOi9N5KmrqmD2c1Jb4p3ScdzJO7ay5PmkYdeIq3K
vN9MPAuMSDWmQasqB/oO1gRmdcWNU2ABbsrEeALMPhe/J82meUQd7MorVC87OUJ6
mp2b97TTBDqsqsqrygKmWb2YFXFS/uR5ZaYEXDjxe9LXCRODRJAlGF882PS20YoV
iUBGWd361+nkLkJ3GaT8l/PkpHLg5mXU6UmiPEw9O+mzYFNAhYzvzfIP4G4afYYo
T+/8KBbqWVuW6ecv/vqLQIyc0ucOgnH9vhwliGTyMug/GhaTjXFtRdjdu0W7irmM
CgkLeEpvWN1xgNTBILIqva6dc31V36hOVgSjRcIr4r0sCe2I3J6ixw7ShHXxMYAi
od9Lz4mJrL4k1SovZEonEr6HmXYlsdV2R6/ZaoCKYN2F1zZ4IzGuSRU1iUiz5iCN
WQ==
-----END CERTIFICATE-----
โปรดทราบ: ตั้งแต่ Python 3.13 เป็นต้นไป มีการตั้งค่า strict default ในการจัดการ SSL ซึ่งทำให้ OpenSSL ทำงานตามมาตรฐาน RFC 5280 มากขึ้น แต่จะมีความไม่เข้ากันกับ certificate X.509 รุ่นเก่า context ของ SSL จะใช้ VERIFY_X509_PARTIAL_CHAIN และ VERIFY_X509_STRICT เป็นค่า default ซึ่งหมายความว่า CA certificate ต้องเป็นไปตามข้อกำหนดที่เข้มงวด (เช่น X509v3 Key Usage, X509v3 Basic Constraints = Critical ฯลฯ)
การใช้งาน
python lxca_proxmox_integrator.py
หากไม่ระบุ parameter จะได้รับข้อความช่วยเหลือการใช้งานแบบนี้:
usage: lxca_proxmox_integrator.py [-h] (-d | -x) [-v] [-c] [-V]
LXCA Proxmox integrator command line parameters
options:
-h, --help show this help message and exit
-d, --dry-run Simulate the upgrade
-x, --execute Perform the upgrade
-v, --verbose Add verbosity to the ouput
-c, --clearlog Move current log to backup and start a clean log file
-V, --version Show program version
คุณ ต้อง ระบุ parameter -d | --dry-run หรือ -x | --execute อย่างใดอย่างหนึ่ง
parameter dry-run (-d | --dry-run) จะช่วยให้คุณจำลองกระบวนการทั้งหมดโดยไม่ดำเนินการจริงกับคลัสเตอร์
ระหว่าง dry-run จะมีการจำลองและแสดงรายการสิ่งที่พบในระบบ (แนะนำให้ใช้ร่วมกับ -v)
ขอแนะนำให้ ทำ dry-run (-d | --dry-run) ทุกครั้งก่อนรันด้วย parameter -x | --execute เพราะจะเป็นการอัปเดตเฟิร์มแวร์จริง
parameter -v | --verbose จะเพิ่มรายละเอียดการแสดงผล (ทั้งบน console และ log)
parameter -c | --clearlog จะสำรอง log ปัจจุบันและสร้างไฟล์ log ใหม่ที่ว่างเปล่า
เครื่องมือจะดำเนินการหลักดังนี้:
- ขอรหัสผ่านหลักถ้าจำเป็น (ไม่บังคับ)
- เชื่อมต่อกับ LXCA instance ของคุณ
- ตรวจสอบ ThinkSystem node ว่ามีอัปเดตหรือไม่
- จัดการอัปเดตเฟิร์มแวร์ในคลัสเตอร์/แต่ละ node
โปรดทราบ: ปัจจุบันยังไม่รองรับการย้าย CT container แบบออนไลน์ ดังนั้นจะดำเนินการโดยปิด container แล้วเปิดใหม่ทันทีบน host เป้าหมาย
การบันทึก log
ทุกการดำเนินการจะถูกบันทึกทั้งบน console และไฟล์ log (lxca_proxmox_integrator.log) ตรวจสอบ log เพื่อดูผลการอัปเดตและแก้ไขปัญหา
ข้อสงวนสิทธิ์
-
เพื่อความปลอดภัย แนะนำให้ทดสอบการอัปเดตเฟิร์มแวร์และไดรเวอร์ในระบบทดสอบหรือระบบที่ไม่ใช่ production ก่อนนำไปใช้กับคลัสเตอร์จริง คุณสามารถใช้โหมด DRY_RUN เพื่อจำลองการดำเนินการอื่น ๆ โดยไม่อัปเดตเฟิร์มแวร์
-
หากเกิดข้อผิดพลาดระหว่างกระบวนการ เครื่องมือจะหยุดทำงานเพื่อให้ผู้ดูแลระบบตรวจสอบและแก้ไข ยกเว้นกรณี "power on" ของ VM/CT ที่จะแสดงใน log แต่กระบวนการจะดำเนินต่อไป อาจต้องแก้ไขด้วยมือเพื่อคืนสถานะที่ถูกต้อง
-
เว้นแต่กฎหมายที่เกี่ยวข้องหรือมีข้อตกลงเป็นลายลักษณ์อักษร ซอฟต์แวร์ที่แจกภายใต้ License นี้จะถูกแจกจ่ายแบบ "AS IS" โดยไม่มีการรับประกันใด ๆ ทั้งสิ้น ไม่ว่าจะโดยชัดแจ้งหรือโดยนัย ดูรายละเอียด License สำหรับข้อกำหนดและข้อจำกัดในการใช้งาน
License
ได้รับอนุญาตภายใต้ Apache License, Version 2.0 ("License"): http://www.apache.org/licenses/LICENSE-2.0