OpenStack 创建VM流程简单介绍__Newton版本
来源:互联网 发布:笔记软件的作用 编辑:程序博客网 时间:2024/04/29 23:40
才疏学浅,若有不当之处敬请雅正, 本文适合刚刚开始看Nova源码的人,先把整个流程串一下,后面再详细介绍一下。
Nova 接收用户请求的入口:nova/api/compute/servers.py
nova/api/compute/servers.py
class ServersController(wsgi.Controller):
"""The Server API base controller class for the OpenStack API."""
.........................
def create(self, req, body):
"""Creates a new server for a given user."""
................................
(instances, resv_id) = self.compute_api.create(context,.....................................
inst_type,
image_uuid,
display_name=name,
display_description=description,
availability_zone=availability_zone,
forced_host=host, forced_node=node,
metadata=server_dict.get('metadata', {}),
admin_password=password,
requested_networks=requested_networks,
check_server_group_quota=True,
**create_kwargs)
class API(base.Base):
"""API for interacting with the compute manager."""
............................................................def create(self,------------):............................................................
"""Provision instances, sending instance information to the
scheduler. The scheduler will determine where the instance(s)
go and will handle creating the DB entries.
return self._create_instance(跳转到本文件的_create_instance()函数
context, instance_type,
image_href, kernel_id, ramdisk_id,
min_count, max_count,
display_name, display_description,
key_name, key_data, security_groups,
availability_zone, user_data, metadata,
injected_files, admin_password,
access_ip_v4, access_ip_v6,
requested_networks, config_drive,
block_device_mapping, auto_disk_config,
filter_properties=filter_properties,
legacy_bdm=legacy_bdm,
shutdown_terminate=shutdown_terminate,
check_server_group_quota=check_server_group_quota)
def _create_instance(self, context, instance_type,
image_href, kernel_id, ramdisk_id,
min_count, max_count,
display_name, display_description,
key_name, key_data, security_groups,
availability_zone, user_data, metadata, injected_files,
admin_password, access_ip_v4, access_ip_v6,
requested_networks, config_drive,
block_device_mapping, auto_disk_config, filter_properties,
reservation_id=None, legacy_bdm=True, shutdown_terminate=False,
check_server_group_quota=False):
"""Verify all the input parameters regardless of the provisioning
strategy being performed and schedule the instance(s) for
creation.
"""
。。。。。。。。。。。。。。。。。。。。。。。。。。。
self.compute_task_api.build_instances(context,
instances=instances, image=boot_meta,
filter_properties=filter_properties,
admin_password=admin_password,
injected_files=injected_files,
requested_networks=requested_networks,
security_groups=security_groups,
block_device_mapping=block_device_mapping,
legacy_bdm=False)
return (instances, reservation_id)
跳转到 nova/conductor/api.py
class ComputeTaskAPI(object):
"""ComputeTask API that queues up compute tasks for nova-conductor."""............................................
def build_instances(self, context, instances, image, filter_properties,
admin_password, injected_files, requested_networks,
security_groups, block_device_mapping, legacy_bdm=True):
self.conductor_compute_rpcapi.build_instances(context,
instances=instances, image=image,
filter_properties=filter_properties,
admin_password=admin_password, injected_files=injected_files,
requested_networks=requested_networks,
security_groups=security_groups,
block_device_mapping=block_device_mapping,
legacy_bdm=legacy_bdm)跳转到 nova/conductor/rpcapi.py
class ComputeTaskAPI(object):..........................
"""Client side of the conductor 'compute' namespaced RPC APIdef build_instances(self, context, instances, image, filter_properties,
admin_password, injected_files, requested_networks,
security_groups, block_device_mapping, legacy_bdm=True):
cctxt = self.client.prepare(version=version)
cctxt.cast(context, 'build_instances', **kw)
跳转到 nova/conductor/manager.py
class ComputeTaskManager(base.Base):"""Namespace for compute methods.
This class presents an rpc API for nova-conductor under the 'compute_task'
namespace. The methods here are compute operations that are invoked
by the API service. These methods see the operation to completion, which
may involve coordinating activities on multiple compute nodes.
""".............def build_instances(self, context, instances, image, filter_properties,
admin_password, injected_files, requested_networks,
security_groups, block_device_mapping=None, legacy_bdm=True):...............................self.compute_rpcapi.build_and_run_instance(context,
instance=instance, host=host['host'], image=image,
request_spec=request_spec,
filter_properties=local_filter_props,
admin_password=admin_password,
injected_files=injected_files,
requested_networks=requested_networks,
security_groups=security_groups,
block_device_mapping=bdms, node=host['nodename'],
limits=host['limits'])跳转到 nova/compute/rpcapi.py
class ComputeAPI(object):..........................................
'''Client side of the compute rpc API.def build_and_run_instance(self, ctxt, instance, host, image, request_spec,
filter_properties, admin_password=None, injected_files=None,
requested_networks=None, security_groups=None,
block_device_mapping=None, node=None, limits=None):
version = '4.0'
cctxt = self.router.by_host(ctxt, host).prepare(
server=host, version=version)
cctxt.cast(ctxt, 'build_and_run_instance', instance=instance,
image=image, request_spec=request_spec,
filter_properties=filter_properties,
admin_password=admin_password,
injected_files=injected_files,
requested_networks=requested_networks,
security_groups=security_groups,
block_device_mapping=block_device_mapping, node=node,
limits=limits)跳转到 nova/compute/manager.py
class ComputeManager(manager.Manager):"""Manages the running instances from creation to destruction."""
....................................def build_and_run_instance(self, context, instance, image, request_spec,
filter_properties, admin_password=None,
injected_files=None, requested_networks=None,
security_groups=None, block_device_mapping=None,
node=None, limits=None):
def _locked_do_build_and_run_instance(*args, **kwargs):
#locked because we could wait in line to build this instance
#NOTE(danms): We grab the semaphore with the instance uuid
# for a while and we want to make sure that nothing else tries
# to do anything with this instance while we wait.
with self._build_semaphore:
self._do_build_and_run_instance(*args, **kwargs)
跳转到本类的_do_build_and_run_instance()方法utils.spawn_n(_locked_do_build_and_run_instance,
context, instance, image, request_spec,
filter_properties, admin_password, injected_files,
requested_networks, security_groups,
block_device_mapping, node, limits)
def _do_build_and_run_instance(self, context, instance, image,
request_spec, filter_properties, admin_password, injected_files,
requested_networks, security_groups, block_device_mapping,
node=None, limits=None):
self._build_and_run_instance(context, instance, image,跳转到本类中_build_and_run_instance() 方法
decoded_files, admin_password, requested_networks,
security_groups, block_device_mapping, node, limits,
filter_properties)
def _build_and_run_instance(self, context, instance, image, injected_files,
admin_password, requested_networks, security_groups,
block_device_mapping, node, limits, filter_properties):
with timeutils.StopWatch() as timer:
self.driver.spawn(context, instance, image_meta,
injected_files, admin_password,
network_info=network_info,
block_device_info=block_device_info)
然后调用具体的驱动来创建虚拟机
0 0
- OpenStack 创建VM流程简单介绍__Newton版本
- openstack创建虚拟机VM操作流程
- openstack nova 创建虚拟机流程 liberty版本
- 创建vm流程
- OpenStack虚拟机创建流程
- openstack创建VM虚机命令
- openstack创建instance的流程
- openstack创建instance的流程
- openstack创建instance的流程
- openstack创建instance的流程
- openstack创建instance的流程
- CloudStack 创建VM 源码流程分析
- CloudStack 创建VM 源码流程分析
- cloudstack 创建与删除VM流程
- openstack 鉴权简单介绍
- OpenStack Heat总结之:icehouse版本中Heat的简单介绍
- OpenStack Heat总结之:icehouse版本中Heat的简单介绍(转)
- openstack 管理 三十七 - 创建 vm 并 指定IP 地址
- Non-Obvious Debugging Techniques
- linux常用的快捷键
- 亚马逊 机器学习 服务 的实例 基本操作 步骤
- 使用CORS实现跨域的方式
- spring 整合redis的简单操作
- OpenStack 创建VM流程简单介绍__Newton版本
- Install plugin from disk插件自动化快速实现Parcelable接口序列化
- win7系统一键垃圾文件清理雨沐枫修正版.bat批处理一键清理
- Popupwindow的定制
- ubuntu设置静态IP地址
- init进程_处理子进程终止2
- boostrap表单验证插件-bootstrapValidator
- Caffe学习(十)protobuf及caffe.proto解析
- FloorPlan 经验总结