深挖Openstack Nova - 实例创建(3)

本文深入探讨OpenStack Nova的实例创建过程,重点解析create方法的内部逻辑,包括验证创建资格、检查资源使用、参数验证、调度器交互等。详细分析了_create_instance方法中的 ValidateAndBuildBaseOptions步骤,涉及可用空间、实例类型、user_data、安全组、网络、kernel和ramdisk等多个关键环节的验证,并对后续的实例数量调整、块设备映射、metadata处理和image检测进行了概述。
摘要由CSDN通过智能技术生成

--------------- 紧接上篇 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_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值