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

2024-06-15 14:08

本文主要是介绍深挖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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063665

相关文章

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

PyQt6 键盘事件处理的实现及实例代码

《PyQt6键盘事件处理的实现及实例代码》本文主要介绍了PyQt6键盘事件处理的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录一、键盘事件处理详解1、核心事件处理器2、事件对象 QKeyEvent3、修饰键处理(1)、修饰键类

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据