OpenStack源码阅读-创建虚拟机(三)

openstack-neutron源码解析 openstack——neutron源码解析 阅读详情
本文为扶艾原创文章,版权所有,禁止转载!

请大家静下心来看源码分析的文章,看完后相信你会有收获的!

本文来自于微信公众号“扶艾”,欢迎大家关注获取更多精彩内容!

上一篇文章我们分析了nova api是如何接收请求的,这篇文章我们将分析接收到请求之后创建虚拟机的流程。

nova api请求接收到请求之后,是执行的路径1的create方法。这个整合了创建虚拟机的用到的参数,并作了简单的合法性检测。之后调用了self.compute_api.create()方法。这里省略了很多异常处理,也就是说在后面调用中也会有很多的合法性检测,包括镜像不可用、虚拟机模版未找到、模版配置与镜像不符合等等这些都会抛出异常。

路径1. /usr/lib/python2.7/site-packages/nova/api/openstack/compute/servers.py

部分源码:

from nova import compute

class ServerController():

    def __init__(self):
        self.compute_api = comptute.API()

    def create(self, req, body):
        ...
        #获取创建虚拟机的参数
        server_dict = body['server']
        #获取参数中的虚拟机管理员密码,如果没有则生成一个随机密码
        password = self._get_server_admin_password(server_dict)
        #获取参数中的虚拟机名称,去除名称中的前后空格
        name = common.normalize_name(server_dict['name'])
        ...
        #初始化一个字典用于存放创建虚拟机需要到参数
        create_kwargs = {}
        #将server_dict中的部分参数做合法性检测后赋值给create_kwargs
        self._create_by_func_list(server_dict, create_kwargs, body)
        ...
        try:
            (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,
                            supports_multiattach=supports_multiattach,
                            **create_kwargs)
        except ...

            raise
        ...省略各种except

路径1中最后调用的是self.compute_api.create()方法,self.compute_api是在ServerController的init方法中赋值的compute.API()。根据下面路径2的源码可以发现,这里的compute.API()为nova.compute.api.API类,所以self.comput_api.create()方法即是nova.compute.api.API.create()

路径2. /usr/lib/python2.7/site-packages/nova/compute/__init__.py

部分源码:
def API():
    #这里根据配置文件的设置来确定是否导入cell_api,默认导入nova.compute.api.API
    class_name = _get_compute_api_class_name()
    return importutils.import_object(class_name, *args, **kwargs) 

在路径3的create方法中检测可用域是否可用,构建了一个筛选计算节点需要满足的基本条件组成的字典,然后调用了self._create_instance()方法

路径3. /usr/lib/python2.7/site-packages/nova/compute/api.py

部分源码
from nova import conductor
class API():

    def __init__():
        self.compute_task_api = conductor.ComputeTaskAPI()

    def create(self, context, instance_type,
               image_href, kernel_id=
OpenStack中nova组件创建虚拟机的源码流程 OpenStack中创建虚拟机的源码流程分析 阅读详情

相关推荐

openstack单机ubuntu虚拟机环境安装部署经验及源码结构简单介绍(适合入门者)

参考:OneStack脚本 本文主要关于近一个月对Openstack学习的一个总结,包括单机环境安装部署中出现的问题记录和源码学习的过程,适合入门者阅读。 一、openstack安装部署 目前看到的一个是官方的安装部署文档,一个是中文的OneStack脚本。 根据两个文档都能在虚拟机Ubuntu环境搭建好环境,中间也许或出现某些问题,搜一下应该可以得到解决。 因为OneStack的是中文

周绍禹-whuiss 6521

OpenStack源码探秘(一)——Nova-Scheduler

OpenStack源码探秘(一)——Nova-Scheduler OpenStack源码探秘(二)——Oslo.Config 许久没有更新OpenStack源码探秘系列了。最近换工作颇不顺利,许多笔者心仪的公司都因为这样或那样的原因而失之交臂,这样下去可能会考虑到互联网公司做些服务器端的工作。晚上回到家心情都不太好,懒得动笔,不过经过了几天起伏,心态也慢慢调整过来了,今天就给大家分享一篇N

熠耀之森 8867

卸载Office 16 Click-to-Run Extensibility Component详细步骤

卸载Office 16 Click-to-Run Extensibility Component详细步骤 第一步:按住键盘上的“Win+R”,打开运行窗口 在运行窗口输入“Installer”回车,打开Installer文件夹 第二步:在Installer文件夹红框最右侧,即“大小”后面,右击选择“其他”,找到“主题”,勾选,点击“确定”,添加主题列成功 第三步:在“主题”列找到“Office 16 Click-to-Run Extensibility Component

M_try的博客 3万+

电力电子新手必看:COT控制模式的工作原理与典型应用场景解析

本文深入解析了COT控制模式的工作原理及其在电力电子领域的典型应用。COT控制(恒定导通时间控制)通过固定导通时间机制,解决了传统滞环控制的问题,特别适用于需要快速瞬态响应和高效率的应用场景,如CPU/GPU供电和便携设备电源管理。文章详细介绍了COT控制的核心流程、技术特点及设计实践中的关键考量,帮助电力电子新手快速掌握这一技术。

weixin_30745553的博客 522

如何快速下载Gaia DR3星表数据?中国虚拟天文台镜像站保姆级教程

本文提供了一份详细的保姆级教程,指导用户如何通过中国虚拟天文台镜像站高速、稳定地下载Gaia DR3星表数据。文章详细介绍了镜像站的访问地址、数据组织结构,并给出了使用wget、aria2c等工具进行批量下载的实战策略,帮助国内用户避开国际网络延迟,高效获取近20亿颗天体的海量数据。

weixin_29231263的博客 305

【LDLTS解析】从重叠峰到精准参数:拉普拉斯深能级瞬态光谱如何重塑半导体缺陷分析

本文深入解析了拉普拉斯深能级瞬态光谱(LDLTS)技术如何革新半导体缺陷分析。针对传统DLTS难以分辨重叠峰的痛点,LDLTS通过拉普拉斯逆变换对高精度电容瞬态曲线进行数学解卷积,成功分离发射率相近的缺陷信号,实现从模糊宽峰到精准独立峰的转变。该技术不仅大幅提升了缺陷激活能和捕获截面等关键参数的提取精度,更推动分析范式从经验拟合转向第一性原理,为先进半导体工艺开发与良率提升提供了强大的精准诊断工具。

weixin_29224309的博客 274

数据分析实战:如何用皮尔逊相关系数避免伪相关陷阱(附Python代码)

本文通过实战案例与Python代码,深入解析了皮尔逊相关系数在数据分析中的应用与常见陷阱。文章重点揭示了如何识别与避免由混杂变量导致的伪相关,并介绍了通过可视化、敏感性分析、分层分析与偏相关分析等方法来检验相关性的可靠性,帮助分析师建立严谨的相关性思维。

weixin_29051245的博客 412

MATLAB双目相机标定:从工具箱实战到参数精解

本文详细讲解了使用MATLAB进行双目相机标定的完整实战流程与参数精解。从拍摄合格的棋盘格图像、设置关键参数(如径向畸变系数),到分析重投影误差、优化结果并正确导出和使用内外参,提供了从操作到原理的全面指导,帮助读者为立体视觉应用奠定精准基础。

weixin_29041767的博客 260

学 Simulink——基于递推最小二乘法(RLS)的工业电机转动惯量 J在线辨识仿真

Te 估算 = 1.5·p·(ψ·iq + (Ld-Lq)·id·iq)回归量:φ(k)=−ω˙(k), y(k)=Te​(k), θ=J。仿真:电机加速 0→1500rpm,观测 J^(k)→Jnom​。(可选) Jtrue​切 0.04(双惯量负载)→ 看跟踪。电机机械运动方程:Te​−TL​=J⋅ω˙+B⋅ω。J^(0)=0.005→收敛至0.02kg⋅m2✔。Te​:电磁转矩(Nm),已知(来自电流环输出)仅需 Te​,ω(驱动器已有)→ 无额外传感 ✔。

amy_mhd的博客 45

【无人机编队】基于matlab虚拟leader无人机编队仿真【含Matlab源码 3279期】

虚拟leader无人机编队仿真 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 837

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: OpenStack源码阅读-创建虚拟机(二)
下一篇: 你在OpenStack安装部署中是如何排错的
林大大.
博客等级 码龄11年 111粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值