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

本文为扶艾原创文章,版权所有,禁止转载!

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

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

我们分析就分析全套的,创建虚拟机的源码分析总共分为三篇文章,我们将会用通俗易懂的语言来描述整个流程。第一篇文章将分析客户端部分的源码,也就是从点击创建虚拟机按钮后到发送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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值