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

本文分析OpenStack创建虚拟机过程中客户端部分的源码,从点击创建虚拟机按钮到发送HTTP请求到nova API的流程。涉及novaclient、Server类、Client对象、Manager类以及请求发送的过程。
本文为扶艾原创文章,版权所有,禁止转载!

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

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

我们分析就分析全套的,创建虚拟机的源码分析总共分为三篇文章,我们将会用通俗易懂的语言来描述整个流程。第一篇文章将分析客户端部分的源码,也就是从点击创建虚拟机按钮后到发送http请求这部分的源码;第二篇文章将分析nova api如何接收到http请求的源码;第三篇文章将分析从筛选计算节点到创建虚拟机成功部分的源码。

本篇文章将分析虚拟机从点击创建按钮到发送http请求到nova api的源码分析。

从点击界面的创建虚拟机按钮后,在输入虚拟机的名称选择镜像和网络后那实际上做了什么工作呢?跟着我的思路来走一走!

客户端

这部分主要分析下客户端的源码,这部分源码分在两个地方:

  • 界面部分源码:/usr/share/openstack-dashboard/openstack_dashboard/
  • nova客户端源码:/usr/lib/python2.7/site-packages/novaclient/

点击创建按钮之后,实际执行了路径1这个文件中class LaunchInstancehandle方法。至于为什么界面点击创建按钮后执行这个,大家可以去看下我们的关于界面二次开发的文章,看完你会对前端界面的源码架构有个清晰的理解。

路径1. /usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py 

部分源码:
from openstack_dashboard import api
...

class LaunchInstance(workflows.Workflow):
    ...

    def handle(self, request, context):
        ...
        api.nova.server_create(request,
                               context['name'],
                               image_id,
                               context['flavor'],
                               context['keypair_id'],
                               normalize_newlines(custom_script),
                               context['security_group_ids'],
                               block_device_mapping=dev_mapping_1,
                               block_device_mapping_v2=dev_mapping_2,
                               nics=nics,
                               availability_zone=avail_zone,
                               instance_count=int(context['count']),
                               admin_pass=context['admin_pass'],
                               disk_config=context.get('disk_config'),
                               config_drive=context.get('config_drive'),
                               scheduler_hints=scheduler_hints)

这里可以看到handle方法在收集了界面输入的相关参数后调用了api.nova.server_create()函数。那么我们继续看下api.nova.server_create()函数。

路径2. /usr/share/openstack-dashboard/openstack_dashboard/api/nova.py

部分源码
from novaclient import client as nova_client
...

def server_create(request, name, image, flavor, key_name, user_data,
                  security_groups, block_device_mapping=None,
                  block_device_mapping_v2=None, nics=None,
                  availability_zone=None, instance_count=1, admin_pass=None,
                  disk_config=None, config_drive=None, meta=None,
                  scheduler_hints=None, description=None):
    ...
    return Server(get_novaclient_with_instance_desc(request).servers.create(
        name.strip(), image, flavor, userdata=user_data,
        security_groups=security_groups,
        key_name=key_name, block_device_mapping=block_device_mapping,
        block_device_mapping_v2=block_device_mapping_v2,
        nics=nics, availability_zone=availability_zone,
        min_count=instance_count, admin_pass=admin_pass,
 
OpenStack个开源的云计算平台,可以用于构建和管理公共云和私有云环境。在OpenStack创建虚拟机源码解析主要涉及以下几个方面: 1. Nova组件:Nova是OpenStack的计算模块,负责管理和调度虚拟机实例。在创建虚拟机时,首先通过Nova API接口向Nova服务发送创建虚拟机的请求。源码中涉及了虚拟机规格、镜像选项、网络配置等参数的解析和处理。 2. Glance组件:Glance是OpenStack的映像服务,用于提供虚拟机镜像。在创建虚拟机时,需要从Glance中选择合适的镜像作为虚拟机的基础环境。源码中通过Glance API接口获取镜像的元数据信息,包括名称、版本、大小、格式等,然后根据需要将镜像下载或者复制到计算节点上。 3. Neutron组件:Neutron是OpenStack的网络服务,负责虚拟机的网络连接和管理。在创建虚拟机时,需要为虚拟机分配IP地址、配置路由和安全组等网络设置。源码中通过Neutron API接口获取网络的信息,并将虚拟机的网络配置与物理网络进行关联。 4. Cinder组件:Cinder是OpenStack的块存储服务,可以为虚拟机提供持久性存储。在创建虚拟机时,可以选择并挂载Cinder卷作为虚拟机的硬盘。源码中通过Cinder API接口获取存储的信息,并将卷与虚拟机进行关联和挂载。 通过以上的源码解析,可以了解到OpenStack创建虚拟机时,涉及了多个组件的协同工作,包括计算、映像、网络和存储等方面。在实际使用中,可以根据需求和实际情况进行定制和扩展,以满足个性化的虚拟机创建需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值