Openstack提供了一个rest形式的web api接口供外部用户调用,为了方便对他的使用,openstack提供了一个可以被python直接调用的封装过的官方client api(如novaclient,glanceclient),在openstack的项目中,一些跨项目的服务的调用就是使用client api,在安装openstack时这些api必须要被安装的。
各个client可能因为开发的人员不同实现起来是有差异的,这里就以比较有代表性的novaclient为例进行学习。client api基本的调用方法如下:
"""
创建一个client 实例:
>>> client = Client(USERNAME, PASSWORD, PROJECT_ID, AUTH_URL)
调用其中managers中的方法
>>> client.servers.list()
...
>>> client.flavors.list()
...
"""
Client类实际继承于HTTPClient类,HTTPClient类实现通过keystone的验证功能,实现对应于特定endpoint 的含有验证信息的get,post,patch,head,delete, rest方式的方法,方便对于api的访问。
# FIXME(jesse): project_id isn't required to authenticate
def __init__(self, username, api_key, project_id, auth_url=None,
insecure=False, timeout=None, proxy_tenant_id=None,
proxy_token=None, region_name=None,
endpoint_type='publicURL', extensions=None,
service_type='compute', service_name=None,
volume_service_name=None, timings=False,
bypass_url=None, os_cache=False, no_cache=True,
http_log_debug=False, auth_system='keystone',
auth_plugin=None,
cacert=None):
# FIXME(comstud): Rename the api_key argument above when we
# know it's not being used as keyword argument
password = api_key
self.project_id = project_id
self.flavors = flavors.FlavorManager(self)
self.flavor_access = flavor_access.FlavorAccessManager(self)
self.images = images.ImageManager(self)
self.limits = limits.LimitsManager(self)
self.servers = servers.ServerManager(self)
# extensions
self.agents = agents.AgentsManager(self)
self.dns_domains = floating_ip_dns.FloatingIPDNSDomainManager(self)
self.dns_entries =