天天看點

通過Python調用OpenStack 的RESTful API

使用openstack api 可用python sdk ,需要部署相應元件的指令用戶端,例如請求nova,需要python-novaclient 

實際上是加入了novaclient 的庫

[email protected]:~# ll /usr/lib/python2.7/dist-packages/novaclient/
auth_plugin.py       base.pyc             crypto.py            exceptions.pyc       __init__.py          service_catalog.py   shell.pyc            utils.pyc            
auth_plugin.pyc      client.py            crypto.pyc           extension.py         __init__.pyc         service_catalog.pyc  tests/               v1_1/                
base.py              client.pyc           exceptions.py        extension.pyc        openstack/           shell.py             utils.py             v3/     
           

如果請求glance,neutron 元件,同樣需部署其元件的指令行用戶端

為了避免部署,可以通過調用restful api 來實作, 了解     openstack restful api 

python 調用restful api 其實用了urllib2 來實作,這個庫一般的系統都會自帶,import urllib2 即可,下面貼出一些例子

一,通過認證

def curl_keystone():
    url = 'http://192.168.12.1:35357/v2.0/tokens'
    values = {"auth":{"passwordCredentials":{"username":"admin","password":"password"},"tenantName":"admin"}}
    params = json.dumps(values)
    headers = {"Content-type":"application/json","Accept": "application/json"}
    req = urllib2.Request(url, params, headers)
    response = urllib2.urlopen(req)
    data = response.read()
    ddata=json.loads(data)
    token = ddata['access']['token']['id']
    return token
           

二,查詢 IP

def curl_nova_addr(id):
    """
       :param id: vm id
       :Restore vm ip address.
    """
    xtoken = curl_keystone()
    url = 'http://192.168.12.1:8774/v2/2996e46c2519415d8de2b141d6c607ba/servers/'+id
    headers = {"Content-type":"application/json","Accept": "application/json"}
    req = urllib2.Request(url)
    req.add_header('X-Auth-Token',xtoken)
    response = urllib2.urlopen(req)
    data = response.read()
    ddata=json.loads(data)
    net = ddata['server']['addresses']['sharednet1']
    addr = net[0]['addr']
    return addr
           

三,通過name 查詢id

def curl_nova_id(name):
    """
       :param name: Something to name the server.
       :Restore vm id.
    """
    ID=""
    xtoken = curl_keystone()
    url = 'http://192.168.12.1:8774/v2/2996e46c2519415d8de2b141d6c607ba/servers'
    headers = {"Content-type":"application/json","Accept": "application/json"}
    req = urllib2.Request(url)
    req.add_header('X-Auth-Token',xtoken)
    response = urllib2.urlopen(req)
    data = response.read()
    ddata=json.loads(data)
    list=ddata['servers']
    print len(list)
    print list
    for i in list:
       if(i['name'] == name):
           ID= i['id']
    return ID
           

知道了如何通過urllib2 發送請求的方式,就可以輕松調用openstack 了

更多 restful api 的使用,請參考  http://developer.openstack.org/api-ref-compute-v2.1.html  ,包括了各個元件的 restful api  詳解

繼續閱讀