• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > Openstack Nova(九)----Instance 创建(Computer API & Conductor ),openstacknovaapi

Openstack Nova(九)----Instance 创建(Computer API & Conductor ),openstacknovaapi

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含Openstack Nova(九)----Instance 创建(Computer API & Conductor ),openstacknovaapi等服务器相关知识,网友希望可以进行参考

Openstack Nova(九)----Instance 创建(Computer API & Conductor ),openstacknovaapi


在前一章中, 学习了所有的流水线处理。最后通过路由的设置,会把创建Instance的请求映射到servers.py的Controller的create方法。这中间会有不少的代码, 但都是一些常用的逻辑, 这里不进行讲述。

Controller/Create

这是一段比较长的代码, 但是做的事情还是比较简单。就是对各种参数的合法性检查。

@wsgi.response(202)
    @wsgi.serializers(xml=FullServerTemplate)
    @wsgi.deserializers(xml=CreateDeserializer)
    def create(self, req, body):
        """Creates a new server for a given user."""
        if not self.is_valid_body(body, 'server'):
            raise exc.HTTPUnprocessableEntity()
        #由前面的流水线生成的上下文环境
        context = req.environ['nova.context']
        #server的全部参数
        server_dict = body['server']
        #Instance的password
        password = self._get_server_admin_password(server_dict)
        #Instance的名称,这个不能为空
        if 'name' not in server_dict:
            msg = _("Server name is not defined")
            raise exc.HTTPBadRequest(explanation=msg)

        name = server_dict['name']
        #验证name的长度1-255
        self._validate_server_name(name)
        name = name.strip()
        #从当前参数中,取出image标识,有可能为空
        image_uuid = self._image_from_req_data(body)

        personality = server_dict.get('personality')
        config_drive = None
        if self.ext_mgr.is_loaded('os-config-drive'):
            config_drive = server_dict.get('config_drive')

        injected_files = []
        if personality:
            #需要注入的文件
            injected_files = self._get_injected_files(personality)

        #安全组配置
        sg_names = []
        if self.ext_mgr.is_loaded('os-security-groups'):
            security_groups = server_dict.get('security_groups')
            if security_groups is not None:
                sg_names = [sg['name'] for sg in security_groups
                            if sg.get('name')]
        if not sg_names:
            sg_names.append('default')

        sg_names = list(set(sg_names))
        #网络配置
        requested_networks = None
        if (self.ext_mgr.is_loaded('os-networks')
                or utils.is_neutron()):
            requested_networks = server_dict.get('networks')

        if requested_networks is not None:
            if not isinstance(requested_networks, list):
                expl = _('Bad networks format')
                raise exc.HTTPBadRequest(explanation=expl)
            requested_networks = self._get_requested_networks(
                requested_networks)
        #ipv4及有效性检查,只是针对IP地址本身,不会考虑其它单元的IP地址
        (access_ip_v4, ) = server_dict.get('accessIPv4'),
        if access_ip_v4 is not None:
            self._validate_access_ipv4(access_ip_v4)
        #ipv6及有效性检查,只是针对IP地址本身,不会考虑其它单元的IP地址
        (access_ip_v6, ) = server_dict.get('accessIPv6'),
        if access_ip_v6 is not None:
            self._validate_access_ipv6(access_ip_v6)

        try:
            #Instance的配置信息, 这个必须有
            flavor_id = self._flavor_id_from_req_data(body)
        except ValueError as error:
            msg = _("Invalid flavorRef provided.")
            raise exc.HTTPBadRequest(explanation=msg)

        # optional openstack extensions:
        key_name = None
        if self.ext_mgr.is_loaded('os-keypairs'):
            key_name = server_dict.get('key_name')

        user_data = None
        if self.ext_mgr.is_loaded('os-user-data'):
            user_data = server_dict.get('user_data')
        self._validate_user_data(user_data)
        #zone信息, 用来对Instance进行分区,分区基于HOST
        availability_zone = None
        if self.ext_mgr.is_loaded('os-availability-zone'):
            availability_zone = server_dict.get('availability_zone')
        #硬盘信息, 可以做为启动盘
        block_device_mapping = None
        block_device_mapping_v2 = None
        legacy_bdm = True
        if self.ext_mgr.is_loaded('os-volumes'):
            block_device_mapping = server_dict.get('block_device_mapping', [])
            for bdm in block_device_mapping:
                try:
                    block_device.validate_device_name(bdm.get("device_na
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Openstack Nova(九)----Instance 创建(Computer API & Conductor ),openstacknovaapi

相关文章

  • Machine Learning On Spark——第一节:基础数据结构(一),learningspark
  • Hadoop之——自定义分组比较器实现分组功能,hadoop分组
  • Web.xml配置详解,web.xml详解
  • 吐槽Oozie: 挖好坑,等你跳!,oozie
  • Spark性能优化:数据倾斜调优
  • jsp中用EL读取了数据库里面的时间,怎么设置格式显示的格式,jspel
  • MapReduce处理输出多文件格式(MultipleOutputs),mapreduce多文件输出
  • 独家教程利用VPS服务器搭建独享VPN(基于Centos6.4 Openvpn),vpsopenvpn
  • 关于Oozie的input-events和done-flag,oozieinput-events
  • nova-compute[5410]: OSError: [Errno 13] Permission denied: '镜像路径',5410oserror

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • 从Hadoop URL中读取数据,hadoopurl读取数据
    • CSR1000V在XenServer的安装和简单使用,csr1000vxenserver
    • HDFS命令行接口详解,hdfs命令行详解
    • spark视频教程免费下载,spark视频教程
    • RabbitMQ(python实现)学习之二:Producer发送消息至多个消息队列queue(广播消息),rabbitmqqueue
    • UCB CS162: Get sarted, create a docker container for UCB CS162 online course,ucbcs162
    • 关于分布式程序 java的内存管理浅谈,java内存管理浅谈
    • Install Docker on Mac OS X,installdocker
    • XenServer网卡Bonding,xenserverbonding
    • 《转》ceilometer的数据采集机制入门,《转》ceilometer

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有