本文主要是介绍深挖Openstack Nova - 实例创建(3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
--------------- 紧接上篇 nova实例创建(2) --------------------
5. 分析create方法
在最开始的run_instances方法中可知创建实例是通过self.compute_api.create
方法来实现的,该方法是在/nova/compute/api.py
里
# 建立所有类型的实例都要执行 # 返回一个元组(实例或者是reservation_id的元组) # 元组里面的实例可以是"None"或者是实例字典的一个列表,这要取决于是否等待scheduler返回的信息 @hooks.add_hook("create_instance") def create(self, context, instance_type,image_href, kernel_id=None, ramdisk_id=None,min_count=None, max_count=None,display_name=None, display_description=None,key_name=None, key_data=None, security_group=None,availability_zone=None, user_data=None, metadata=None,injected_files=None, admin_password=None,block_device_mapping=None, access_ip_v4=None,access_ip_v6=None, requested_networks=None, config_drive=None,auto_disk_config=None, scheduler_hints=None, legacy_bdm=True,shutdown_terminate=None, check_server_group_quota=False):
5.1 首先对执行create方法的资格进行验证
# 验证是否有资格执行create这个方法 # policy是nova中的一个资格验证机制 self._check_create_policies(context, availability_zone,requested_networks, block_device_mapping)
5.2 检测多个实例情况下IP和端口的使用情况
if requested_networks and max_count > 1:# 检测多个实例是否同时占用一个固定IP,如果是,引发异常self._check_multiple_instances_and_specified_ip(requested_networks)if utils.is_neutron():# 检测多个实例是否使用同一个端口,如果不是,引发异常self._check_multiple_instances_neutron_ports(requested_networks)
5.3 验证所有参数并最后发送请求消息给调度器
# 验证所有的输入实例参数 # 发送要运行实例(‘run_instance’)的请求消息到远程调度器 return self._create_instance(context, instance_type,image_href, kernel_id, ramdisk_id,min_count, max_count,display_name, display_description,key_name, key_data, security_group,availability_zone, user_data, metadata,injected_files, admin_password,access_ip_v4, access_ip_v6,requested_networks, config_drive,block_device_mapping, auto_
这篇关于深挖Openstack Nova - 实例创建(3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!