Merhaba arkadaşlar, bugün sizlere Proxmox sunucularınızın yönetimini bir üst seviyeye taşıyacak, zaman kazandıracak bir konudan bahsedeceğim: Proxmox API'sini kullanarak Python ile sanal makinelerinizi nasıl otomatik yönetebileceğiniz. Benim sunucu çiftliğimde rutin işleri (yedekleme sonrası yeni VM açma, test ortamı kurma, kaynak izleme) bu şekilde script'leştiriyorum ve inanın hayat kurtarıyor.
Neden Proxmox API'si?
Proxmox, güçlü bir web arayüzü sunsa da, çok sayıda sunucuyu yönetiyorsanız veya sürekli tekrarlanan işleriniz varsa, API kullanımı vazgeçilmezdir. Örneğin, her hafta aynı özelliklerde test VM'si açmak, belirli koşullarda VM'leri durdurmak/başlatmak veya mevcut tüm VM'lerinizin bir listesini alıp bir rapora dökmek istediğinizde, API sizi birçok tıklamadan kurtarır ve hatasız işlem yapmanızı sağlar.
Hazırlık Aşaması: API Erişimini Ayarlama
İlk adım, Proxmox panelinizde API için bir kullanıcı ve token oluşturmak. Bunun için Datacenter > Permissions > Users yolunu izleyin. API için özel bir kullanıcı (örneğin `api-user@pve`) oluşturmanızı ve ardından bu kullanıcı için Add > API Token diyerek bir token almanızı öneririm. Token'ı kaydettiğinize emin olun, bir daha gösterilmez!
Ayrıca, Python tarafında `proxmoxer` kütüphanesine ihtiyacımız olacak. Sunucunuzda veya script'i çalıştıracağınız istemcide bu kütüphaneyi kurun.
Python ile Bağlantı ve Kimlik Doğrulama
Artık Python script'imizi yazmaya başlayabiliriz. İlk olarak, Proxmox sunucumuza bağlanıp kimlik doğrulaması yapacağız. Token ile kimlik doğrulama, en güvenli ve tavsiye ettiğim yöntemdir.
Dikkat Edilmesi Gerekenler
`verify_ssl=False` parametresini sadece test ortamlarında veya güvenilir bir iç ağda, öz-imzalı sertifika kullandığınızda kullanın. Canlı/prodüksiyon ortamında mutlaka geçerli bir SSL sertifikası kullanın ve bu parametreyi `True` yapın veya CA sertifika yolunu (`verify_ssl='/path/to/ca.pem'`) belirtin.
Mevcut VM'leri ve Node'ları Listeleme
Bağlantı sağlandıktan sonra, ortamınızı keşfetmek için mevcut düğümleri (node) ve VM'leri listeleyelim.
Yeni Bir VM (Container veya QEMU) Oluşturma
Şimdi asıl heyecanlı kısma geldik: Python ile yeni bir sanal makine oluşturmak. Bu örnekte basit bir QEMU/KVM sanal makinesi oluşturacağız. İşlem biraz parametre gerektirir, bu yüzden /etc/pve/ altındaki mevcut VM konfigürasyonlarınıza bakarak yol gösterebilir.
VM oluşturma işlemi asenkron olarak bir görev (task) döndürür. Bu görevin durumunu aşağıdaki gibi takip edebilirsiniz.
Görev Durumunu Takip Etme ve VM'yi Başlatma
Önemli Not: Disk imajı (`scsi0` parametresi) belirtirken, sunucunuzda var olan bir storage ve uygun bir format (örneğin `local-lvm`, `local-zfs`) kullandığınızdan emin olun. Aksi halde API hata döndürecektir.
Sonuç olarak, Proxmox API'si ve Python, sunucu yönetim otomasyonunuz için çok güçlü bir ikili. Ben rutin yedekleme sonrası rapor çıkarma ve geliştirici ekipler için otomatik test ortamı hazırlama işlerinde bu yapıyı sıklıkla kullanıyorum.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? API ile yaptığınız başka ilginç otomasyonlar var mı? Takıldığınız bir nokta olursa aşağıya yazmaktan çekinmeyin, beraber çözelim.
Proxmox, güçlü bir web arayüzü sunsa da, çok sayıda sunucuyu yönetiyorsanız veya sürekli tekrarlanan işleriniz varsa, API kullanımı vazgeçilmezdir. Örneğin, her hafta aynı özelliklerde test VM'si açmak, belirli koşullarda VM'leri durdurmak/başlatmak veya mevcut tüm VM'lerinizin bir listesini alıp bir rapora dökmek istediğinizde, API sizi birçok tıklamadan kurtarır ve hatasız işlem yapmanızı sağlar.
İlk adım, Proxmox panelinizde API için bir kullanıcı ve token oluşturmak. Bunun için Datacenter > Permissions > Users yolunu izleyin. API için özel bir kullanıcı (örneğin `api-user@pve`) oluşturmanızı ve ardından bu kullanıcı için Add > API Token diyerek bir token almanızı öneririm. Token'ı kaydettiğinize emin olun, bir daha gösterilmez!
Ayrıca, Python tarafında `proxmoxer` kütüphanesine ihtiyacımız olacak. Sunucunuzda veya script'i çalıştıracağınız istemcide bu kütüphaneyi kurun.
Bash:
pip install proxmoxer
Artık Python script'imizi yazmaya başlayabiliriz. İlk olarak, Proxmox sunucumuza bağlanıp kimlik doğrulaması yapacağız. Token ile kimlik doğrulama, en güvenli ve tavsiye ettiğim yöntemdir.
Python:
import proxmoxer
# Proxmox sunucusuna bağlantı bilgileri
PROXMOX_HOST = '192.168.1.10' # Proxmox sunucunuzun IP'si
USER = 'api-user@pve' # Oluşturduğunuz API kullanıcısı
TOKEN_NAME = 'test-token' # Token'ın adı
TOKEN_VALUE = 'xxxx-xxxx-xxxx-xxxx' # Aldığınız token değeri
# Proxmoxer ile bağlantıyı kuruyoruz
proxmox = proxmoxer.ProxmoxAPI(
PROXMOX_HOST,
user=USER,
token_name=TOKEN_NAME,
token_value=TOKEN_VALUE,
verify_ssl=False # Eğer öz-imzalı sertifika kullanıyorsanız
)
print("✅ Proxmox API'ye başarıyla bağlanıldı.")
`verify_ssl=False` parametresini sadece test ortamlarında veya güvenilir bir iç ağda, öz-imzalı sertifika kullandığınızda kullanın. Canlı/prodüksiyon ortamında mutlaka geçerli bir SSL sertifikası kullanın ve bu parametreyi `True` yapın veya CA sertifika yolunu (`verify_ssl='/path/to/ca.pem'`) belirtin.
Bağlantı sağlandıktan sonra, ortamınızı keşfetmek için mevcut düğümleri (node) ve VM'leri listeleyelim.
Python:
# Tüm düğümleri (node) listele
nodes = proxmox.nodes.get()
print("Mevcut Düğümler:")
for node in nodes:
print(f" - {node['node']}")
# Belirli bir düğümdeki (örneğin 'pve') tüm VM'leri listele
vms = proxmox.nodes('pve').qemu.get()
print("\n'pve' düğümündeki VM'ler:")
for vm in vms:
print(f" - VMID: {vm['vmid']}, İsim: {vm.get('name', 'İsimsiz')}, Durum: {vm['status']}")
Şimdi asıl heyecanlı kısma geldik: Python ile yeni bir sanal makine oluşturmak. Bu örnekte basit bir QEMU/KVM sanal makinesi oluşturacağız. İşlem biraz parametre gerektirir, bu yüzden /etc/pve/ altındaki mevcut VM konfigürasyonlarınıza bakarak yol gösterebilir.
Python:
# Yeni bir VM oluşturma parametreleri
new_vm_config = {
'vmid': 9999, # Boş bir VM ID seçin (pve'de 'qm list' ile kontrol edin)
'name': 'python-api-test-vm',
'memory': 2048, # 2GB RAM
'cores': 2, # 2 CPU çekirdeği
'sockets': 1,
'net0': 'virtio,bridge=vmbr0', # Ağ ayarı
'scsi0': 'local-lvm:32', # 32GB disk, local-lvm storage'da
'ostype': 'l26' # Linux 2.6/3.x/4.x/5.x (64-bit) için
}
try:
# VM'yi oluşturmak için API'yi çağırıyoruz.
# 'pve' node'u ve 'qemu' tipi için create metodunu kullanıyoruz.
create_task = proxmox.nodes('pve').qemu.create(new_vm_config)
print(f"✅ VM oluşturma görevi başlatıldı. Task ID: {create_task}")
except Exception as e:
print(f"❌ VM oluşturulurken hata oluştu: {e}")
VM oluşturma işlemi asenkron olarak bir görev (task) döndürür. Bu görevin durumunu aşağıdaki gibi takip edebilirsiniz.
Python:
# Görevin durumunu kontrol et (örnek task ID'si ile)
task_status = proxmox.nodes('pve').tasks('UPID:pve:00001F2C:12345678:ABCDEF01').status.get()
print(f"Görev durumu: {task_status['status']}")
# VM oluştuktan sonra başlatmak için:
# proxmox.nodes('pve').qemu(9999).status.start.post() # 9999 yerine VMID'nizi yazın
# print("VM başlatıldı.")
Önemli Not: Disk imajı (`scsi0` parametresi) belirtirken, sunucunuzda var olan bir storage ve uygun bir format (örneğin `local-lvm`, `local-zfs`) kullandığınızdan emin olun. Aksi halde API hata döndürecektir.
Sonuç olarak, Proxmox API'si ve Python, sunucu yönetim otomasyonunuz için çok güçlü bir ikili. Ben rutin yedekleme sonrası rapor çıkarma ve geliştirici ekipler için otomatik test ortamı hazırlama işlerinde bu yapıyı sıklıkla kullanıyorum.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? API ile yaptığınız başka ilginç otomasyonlar var mı? Takıldığınız bir nokta olursa aşağıya yazmaktan çekinmeyin, beraber çözelim.