Python ile DigitalOcean’da Droplet Yaratmak

Neslihan Şirin Saygılı —  23 Şubat 2015 — 2 Comments

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" 
              +"&region_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" 
              +"&region_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.

Neslihan Şirin Saygılı

Posts

İTÜ Bilgisayar Mühendisliği bölümünden mezunum, şimdi doktora öğrencisiyim. Temel olarak ilgilendiğim alanlar bilgi edinilmesi (information retrieval), verinin işlenmesi (metin sınıflandırma, yazar tespiti) ve bu verinin bilgiye dönüştürülmesidir. Python, Java, PHP, Ubuntu, HTTP yığını, Linux-Apache-MySQL üçlüsü gündelik olarak kullandığım araçlardır. Prisync'in kurucu yazılımcılarından biriyim.

2 responses to Python ile DigitalOcean’da Droplet Yaratmak

  1. Eline saglik guzel yazi olmus.
    Ek olarak bu islemler icin https://github.com/koalalorenzo/python-digitalocean Paketi de baya tercih ediliyor.

Yorum yapmak için