Bir önceki yazımda Amazon’un bulut bilişim servislerinden bahsetmiştim. Bu yazıda ise bir diğer bulut bilişim hizmeti sağlayıcısı olan DigitalOcean[1]’dan bahsedeceğim. Oldukça basit ve anlaşılır bir web arayüzünden istediğiniz gibi işlemler yapabilirsiniz ancak daha otomatize şekilde çalışmak isterseniz DigitalOcean API’ye elinizi bulaştırmanız gerekmektedir. DO bir sure önce API V2’yi duyursa da hala API V1’e destek veriyor. Bu yazıda inceleyeceğimiz betik API V1 üzerinde çalışmaktadır. API’ye http istekleri yapmak için Python’da requests
[2] kütüphanesini kullanmayı uygun buldum.
İlk olarak API’ye bize yeni bir makine yaratması için yapacağımız isteği oluşturan fonksiyonu inceleyelim.
def prepare_request_url(droplet_name, size_id, image_id, region_id, ssh_key_ids): client_id = "your_client_id" api_key = "your_api_key" url = 'https://api.digitalocean.com/droplets/new? client_id="+ client_id +"&api_key="+ api_key +"&name=" + droplet_name +"&size_id="+ "size_id" +"&image_id=" + "image_id" +"®ion_id=" + "region_id" +"&ssh_key_ids="+ "ssh_key_ids"' return url
Bu http isteği içerisindeki parametreler, client_id
ve api_key
API’ye erişim için gereken yetkilendirme araçlarıdır, name
makineye vereceğimiz isimdir, size
yaratılacak makinenin boyutuyla ilgili parametredir, image_id
yaratılacak makinenin içinde çalışacak olan işletim sisteminin (ve eğer istenirse üzerine eklenen programların) DigitalOcean web servislerindeki kayıt numarası, region_id
ise bu makinenin fiziksel olarak dünyanın neresinde bulunduğuna dair verimerkezi bölge bilgisidir ve son olarak ssh_key_ids
ise yaratılacak olan makineye erişmek için kullanılacak ssh anahtarların kayıt numarasıdır.
Amacımız çok sayıda makine (bunlara droplet ismi veriliyor) ayağa kaldırmak, bunun için isteğimizi bir for döngüsü içerisinde tekrarlayabiliriz.
def create_droplets(number_of_droplets): for i in xrange(number_of_droplets): droplet_name = "droplet-" + str(i+1) url = prepare_request_url(droplet_name, size_id, image_id, region_id, ssh_key_ids)
hala döngü içerisindeyken API’den gelen cevabı jsona dönüştürüyoruz.
result = requests.get(url) result_json = json.loads(result.text) status = result_json['status']
gelen cevabın statusüne göre işlem başarılı ya da başarısız diye logluyoruz.
if status == 'OK': droplet = result_json['droplet'] print ("droplet name='%s' and id=%s is created" %(droplet['name'],droplet['id'])) else: print ("HTTP GET status code is %s" %result.status_code") print result_json['error_message']
Son kısımda yine main ve droplet yaratan fonksiyonun çağrısını görebiliriz.
if __name__ == "__main__": if len(sys.argv) < 2: print "usage is like : python create_droplet.py number_of_droplets" else: number_of_droplets = int(sys.argv[1]) droplets = create_droplets(number_of_droplets)
Tüm betik dosyasını kesintisiz halde görmek istersek, şöyle olacaktır;
import sys import requests import json def prepare_request_url(droplet_name, size_id, image_id, region_id, ssh_key_ids): client_id = "your_client_id" api_key = "your_api_key" url = 'https://api.digitalocean.com/droplets/new? client_id="+ client_id +"&api_key="+ api_key +"&name=" + droplet_name +"&size_id="+ "size_id" +"&image_id=" + "image_id" +"®ion_id=" + "region_id" +"&ssh_key_ids="+ "ssh_key_ids"' return url def create_droplets(number_of_droplets): for i in xrange(number_of_droplets): droplet_name = "droplet-" + str(i+1) url = prepare_request_url(droplet_name, size_id, image_id, region_id, ssh_key_ids) result = requests.get(url) result_json = json.loads(result.text) status = result_json['status'] if status == 'OK': droplet = result_json['droplet'] print ("droplet name='%s' and id=%s is created" %(droplet['name'], droplet['id'])) else: print ("HTTP GET status code is %s" %result.status_code") print result_json['error_message'] if __name__ == "__main__": if len(sys.argv) < 2: print "usage is like : python create_droplet.py number_of_droplets" else: number_of_droplets = int(sys.argv[1]) droplets = create_droplets(number_of_droplets)
Kaynaklar
1. https://www.digitalocean.com/, en son 23.02.2015 tarihinde erişildi.
2. http://docs.python-requests.org/en/latest/, en son 23.02.2015 tarihinde erişildi.
Eline saglik guzel yazi olmus.
Ek olarak bu islemler icin https://github.com/koalalorenzo/python-digitalocean Paketi de baya tercih ediliyor.
Teşekkür ederim, dediğiniz paketi bilmiyordum, göz attım kapsamlı ve anlaşılır görünüyor.