Nova API简单介绍
程序员文章站
2022-05-11 18:09:37
...
Nova API是访问并使用Nova所提供的各种服务的唯一途径,作为客户端和Nova之间的中间层,Nova API扮演了一个桥梁,或者说中间人的角色,Nova API把客户端的请求传达给Nova,待Nova处理完请求后再将处理结果返回给客户端。
基于这样的特殊性,Nova API要求保持高度稳定,他们的名称以及返回的数据结构都不能轻易地作出改变。
Nova发展到现在,我们所需要的API现在已经比较完备,从这个意义上来说,在耗费宝贵的时间去研究API的实现是毫无意义的事情。然而,对于希望能够对Nova有更深理解的我们来说,仔细研究一下少量的API仍然是十分值得的。这样就有机会了解一些概念,并可以趁机详细了解一下Openstack开发特点,就像Nova API本身在客户端和Nova间的桥梁作用一样,学习并理解它也是我们走向Openstack的一个很好的过渡。
此外,作为Openstack两种主要通信方式(RESTFUL API和消息总线)之一,理解API的设计思路和执行过程,也有助于我们对Openstack 有更好的理解。
Nova API的代码位于nova/api目录下,目录结构为:
[[email protected] api]# tree
.
├── auth.py
├── auth.pyc
├── compute_req_id.py
├── compute_req_id.pyc
├── ec2
│ ├── cloud.py
│ ├── ec2utils.py
│ ├── ec2utils.pyc
│ ├── __init__.py
│ └── __init__.pyc
├── __init__.py
├── __init__.pyc
├── manager.py
├── manager.pyc
├── metadata
│ ├── base.py
│ ├── base.pyc
│ ├── handler.py
│ ├── handler.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── password.py
│ ├── password.pyc
│ ├── vendordata_dynamic.py
│ ├── vendordata_dynamic.pyc
│ ├── vendordata_json.py
│ ├── vendordata_json.pyc
│ ├── vendordata.py
│ └── vendordata.pyc
├── openstack
│ ├── api_version_request.py
│ ├── api_version_request.pyc
│ ├── auth.py
│ ├── common.py
│ ├── common.pyc
│ ├── compute
│ │ ├── admin_actions.py
│ │ ├── admin_actions.pyc
│ │ ├── admin_password.py
│ │ ├── admin_password.pyc
│ │ ├── agents.py
│ │ ├── agents.pyc
│ │ ├── aggregates.py
│ │ ├── aggregates.pyc
│ │ ├── assisted_volume_snapshots.py
│ │ ├── assisted_volume_snapshots.pyc
│ │ ├── attach_interfaces.py
│ │ ├── attach_interfaces.pyc
│ │ ├── availability_zone.py
│ │ ├── availability_zone.pyc
│ │ ├── baremetal_nodes.py
│ │ ├── baremetal_nodes.pyc
│ │ ├── block_device_mapping.py
│ │ ├── block_device_mapping.pyc
│ │ ├── block_device_mapping_v1.py
│ │ ├── block_device_mapping_v1.pyc
│ │ ├── cells.py
│ │ ├── cells.pyc
│ │ ├── certificates.py
│ │ ├── certificates.pyc
│ │ ├── cloudpipe.py
│ │ ├── cloudpipe.pyc
│ │ ├── config_drive.py
│ │ ├── config_drive.pyc
│ │ ├── console_auth_tokens.py
│ │ ├── console_auth_tokens.pyc
│ │ ├── console_output.py
│ │ ├── console_output.pyc
│ │ ├── consoles.py
│ │ ├── consoles.pyc
│ │ ├── create_backup.py
│ │ ├── create_backup.pyc
│ │ ├── deferred_delete.py
│ │ ├── deferred_delete.pyc
│ │ ├── evacuate.py
│ │ ├── evacuate.pyc
│ │ ├── extended_availability_zone.py
│ │ ├── extended_availability_zone.pyc
│ │ ├── extended_server_attributes.py
│ │ ├── extended_server_attributes.pyc
│ │ ├── extended_status.py
│ │ ├── extended_status.pyc
│ │ ├── extended_volumes.py
│ │ ├── extended_volumes.pyc
│ │ ├── extension_info.py
│ │ ├── extension_info.pyc
│ │ ├── fixed_ips.py
│ │ ├── fixed_ips.pyc
│ │ ├── flavor_access.py
│ │ ├── flavor_access.pyc
│ │ ├── flavor_manage.py
│ │ ├── flavor_manage.pyc
│ │ ├── flavor_rxtx.py
│ │ ├── flavor_rxtx.pyc
│ │ ├── flavors_extraspecs.py
│ │ ├── flavors_extraspecs.pyc
│ │ ├── flavors.py
│ │ ├── flavors.pyc
│ │ ├── floating_ip_dns.py
│ │ ├── floating_ip_dns.pyc
│ │ ├── floating_ip_pools.py
│ │ ├── floating_ip_pools.pyc
│ │ ├── floating_ips_bulk.py
│ │ ├── floating_ips_bulk.pyc
│ │ ├── floating_ips.py
│ │ ├── floating_ips.pyc
│ │ ├── fping.py
│ │ ├── fping.pyc
│ │ ├── helpers.py
│ │ ├── helpers.pyc
│ │ ├── hide_server_addresses.py
│ │ ├── hide_server_addresses.pyc
│ │ ├── hosts.py
│ │ ├── hosts.pyc
│ │ ├── hypervisors.py
│ │ ├── hypervisors.pyc
│ │ ├── image_metadata.py
│ │ ├── image_metadata.pyc
│ │ ├── image_size.py
│ │ ├── image_size.pyc
│ │ ├── images.py
│ │ ├── images.pyc
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── instance_actions.py
│ │ ├── instance_actions.pyc
│ │ ├── instance_usage_audit_log.py
│ │ ├── instance_usage_audit_log.pyc
│ │ ├── ips.py
│ │ ├── ips.pyc
│ │ ├── keypairs.py
│ │ ├── keypairs.pyc
│ │ ├── limits.py
│ │ ├── limits.pyc
│ │ ├── lock_server.py
│ │ ├── lock_server.pyc
│ │ ├── migrate_server.py
│ │ ├── migrate_server.pyc
│ │ ├── migrations.py
│ │ ├── migrations.pyc
│ │ ├── multinic.py
│ │ ├── multinic.pyc
│ │ ├── multiple_create.py
│ │ ├── multiple_create.pyc
│ │ ├── networks_associate.py
│ │ ├── networks_associate.pyc
│ │ ├── networks.py
│ │ ├── networks.pyc
│ │ ├── pause_server.py
│ │ ├── pause_server.pyc
│ │ ├── pci.py
│ │ ├── quota_classes.py
│ │ ├── quota_classes.pyc
│ │ ├── quota_sets.py
│ │ ├── quota_sets.pyc
│ │ ├── remote_consoles.py
│ │ ├── remote_consoles.pyc
│ │ ├── rescue.py
│ │ ├── rescue.pyc
│ │ ├── rest_api_version_history.rst
│ │ ├── scheduler_hints.py
│ │ ├── scheduler_hints.pyc
│ │ ├── schemas
│ │ │ ├── admin_password.py
│ │ │ ├── admin_password.pyc
│ │ │ ├── agents.py
│ │ │ ├── agents.pyc
│ │ │ ├── aggregates.py
│ │ │ ├── aggregates.pyc
│ │ │ ├── assisted_volume_snapshots.py
│ │ │ ├── assisted_volume_snapshots.pyc
│ │ │ ├── attach_interfaces.py
│ │ │ ├── attach_interfaces.pyc
│ │ │ ├── availability_zone.py
│ │ │ ├── availability_zone.pyc
│ │ │ ├── block_device_mapping.py
│ │ │ ├── block_device_mapping.pyc
│ │ │ ├── block_device_mapping_v1.py
│ │ │ ├── block_device_mapping_v1.pyc
│ │ │ ├── cells.py
│ │ │ ├── cells.pyc
│ │ │ ├── cloudpipe.py
│ │ │ ├── cloudpipe.pyc
│ │ │ ├── config_drive.py
│ │ │ ├── config_drive.pyc
│ │ │ ├── console_output.py
│ │ │ ├── console_output.pyc
│ │ │ ├── create_backup.py
│ │ │ ├── create_backup.pyc
│ │ │ ├── evacuate.py
│ │ │ ├── evacuate.pyc
│ │ │ ├── fixed_ips.py
│ │ │ ├── fixed_ips.pyc
│ │ │ ├── flavor_access.py
│ │ │ ├── flavor_access.pyc
│ │ │ ├── flavor_manage.py
│ │ │ ├── flavor_manage.pyc
│ │ │ ├── flavors_extraspecs.py
│ │ │ ├── flavors_extraspecs.pyc
│ │ │ ├── floating_ip_dns.py
│ │ │ ├── floating_ip_dns.pyc
│ │ │ ├── floating_ips_bulk.py
│ │ │ ├── floating_ips_bulk.pyc
│ │ │ ├── floating_ips.py
│ │ │ ├── floating_ips.pyc
│ │ │ ├── hosts.py
│ │ │ ├── hosts.pyc
│ │ │ ├── image_metadata.py
│ │ │ ├── image_metadata.pyc
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── keypairs.py
│ │ │ ├── keypairs.pyc
│ │ │ ├── migrate_server.py
│ │ │ ├── migrate_server.pyc
│ │ │ ├── multinic.py
│ │ │ ├── multinic.pyc
│ │ │ ├── multiple_create.py
│ │ │ ├── multiple_create.pyc
│ │ │ ├── networks_associate.py
│ │ │ ├── networks_associate.pyc
│ │ │ ├── networks.py
│ │ │ ├── networks.pyc
│ │ │ ├── quota_classes.py
│ │ │ ├── quota_classes.pyc
│ │ │ ├── quota_sets.py
│ │ │ ├── quota_sets.pyc
│ │ │ ├── remote_consoles.py
│ │ │ ├── remote_consoles.pyc
│ │ │ ├── rescue.py
│ │ │ ├── rescue.pyc
│ │ │ ├── reset_server_state.py
│ │ │ ├── reset_server_state.pyc
│ │ │ ├── scheduler_hints.py
│ │ │ ├── scheduler_hints.pyc
│ │ │ ├── security_groups.py
│ │ │ ├── security_groups.pyc
│ │ │ ├── server_external_events.py
│ │ │ ├── server_external_events.pyc
│ │ │ ├── server_groups.py
│ │ │ ├── server_groups.pyc
│ │ │ ├── server_metadata.py
│ │ │ ├── server_metadata.pyc
│ │ │ ├── server_migrations.py
│ │ │ ├── server_migrations.pyc
│ │ │ ├── servers.py
│ │ │ ├── servers.pyc
│ │ │ ├── server_tags.py
│ │ │ ├── server_tags.pyc
│ │ │ ├── services.py
│ │ │ ├── services.pyc
│ │ │ ├── tenant_networks.py
│ │ │ ├── tenant_networks.pyc
│ │ │ ├── user_data.py
│ │ │ ├── user_data.pyc
│ │ │ ├── volumes.py
│ │ │ └── volumes.pyc
│ │ ├── security_group_default_rules.py
│ │ ├── security_group_default_rules.pyc
│ │ ├── security_groups.py
│ │ ├── security_groups.pyc
│ │ ├── server_diagnostics.py
│ │ ├── server_diagnostics.pyc
│ │ ├── server_external_events.py
│ │ ├── server_external_events.pyc
│ │ ├── server_groups.py
│ │ ├── server_groups.pyc
│ │ ├── server_metadata.py
│ │ ├── server_metadata.pyc
│ │ ├── server_migrations.py
│ │ ├── server_migrations.pyc
│ │ ├── server_password.py
│ │ ├── server_password.pyc
│ │ ├── servers.py
│ │ ├── servers.pyc
│ │ ├── server_tags.py
│ │ ├── server_tags.pyc
│ │ ├── server_usage.py
│ │ ├── server_usage.pyc
│ │ ├── services.py
│ │ ├── services.pyc
│ │ ├── shelve.py
│ │ ├── shelve.pyc
│ │ ├── simple_tenant_usage.py
│ │ ├── simple_tenant_usage.pyc
│ │ ├── suspend_server.py
│ │ ├── suspend_server.pyc
│ │ ├── tenant_networks.py
│ │ ├── tenant_networks.pyc
│ │ ├── used_limits.py
│ │ ├── used_limits.pyc
│ │ ├── user_data.py
│ │ ├── user_data.pyc
│ │ ├── versions.py
│ │ ├── versions.pyc
│ │ ├── versionsV21.py
│ │ ├── versionsV21.pyc
│ │ ├── views
│ │ │ ├── addresses.py
│ │ │ ├── addresses.pyc
│ │ │ ├── flavors.py
│ │ │ ├── flavors.pyc
│ │ │ ├── hypervisors.py
│ │ │ ├── hypervisors.pyc
│ │ │ ├── images.py
│ │ │ ├── images.pyc
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── keypairs.py
│ │ │ ├── keypairs.pyc
│ │ │ ├── limits.py
│ │ │ ├── limits.pyc
│ │ │ ├── servers.py
│ │ │ ├── servers.pyc
│ │ │ ├── server_tags.py
│ │ │ ├── server_tags.pyc
│ │ │ ├── usages.py
│ │ │ ├── usages.pyc
│ │ │ ├── versions.py
│ │ │ └── versions.pyc
│ │ ├── virtual_interfaces.py
│ │ ├── virtual_interfaces.pyc
│ │ ├── volumes.py
│ │ └── volumes.pyc
│ ├── extensions.py
│ ├── extensions.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── placement
│ │ ├── auth.py
│ │ ├── auth.pyc
│ │ ├── deploy.py
│ │ ├── deploy.pyc
│ │ ├── handler.py
│ │ ├── handler.pyc
│ │ ├── handlers
│ │ │ ├── aggregate.py
│ │ │ ├── aggregate.pyc
│ │ │ ├── allocation.py
│ │ │ ├── allocation.pyc
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyc
│ │ │ ├── inventory.py
│ │ │ ├── inventory.pyc
│ │ │ ├── resource_class.py
│ │ │ ├── resource_class.pyc
│ │ │ ├── resource_provider.py
│ │ │ ├── resource_provider.pyc
│ │ │ ├── root.py
│ │ │ ├── root.pyc
│ │ │ ├── usage.py
│ │ │ └── usage.pyc
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── microversion.py
│ │ ├── microversion.pyc
│ │ ├── policy.py
│ │ ├── policy.pyc
│ │ ├── requestlog.py
│ │ ├── requestlog.pyc
│ │ ├── rest_api_version_history.rst
│ │ ├── util.py
│ │ ├── util.pyc
│ │ ├── wsgi.py
│ │ └── wsgi.pyc
│ ├── urlmap.py
│ ├── urlmap.pyc
│ ├── versioned_method.py
│ ├── versioned_method.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
└── validation
├── __init__.py
├── __init__.pyc
├── parameter_types.py
├── parameter_types.pyc
├── validators.py
└── validators.pyc
9 directories, 369 files
目录ec2、openstack与metadata分别对应了Amazon EC2 API、Openstack API与Metadata API三种API服务,而在juno版本*存v2、v3、v2.1三个版本的Openstack API源码都位于nova/api/openstack/compute目录下。
对于Openstack API来说,每一个API都对应一种资源,Openstack共定义了两种类型的资源:核心资源与扩展资源。核心资源可简单认为是云平台中最为基础的资源,比如images、servers等。而扩展资源根据是否为核心资源的扩展又分两种情况,比如:keypairs是对server的扩展,cells则是独立资源。