zoukankan      html  css  js  c++  java
  • easyStack开发

    接口参考openstack文档
    启动虚拟机 def start_vm_new(openstack_auth=None, user_auth=None,vm_info=None, project_info=None,region=None,**kwargs): try: data = {"os-start": None} vmid = getopenstack.Get_infos(vm_info).get_vm()['Y_systemID'] url='/servers/{}/action'.format(vmid) status,res = ServerAction(openstack_auth, user_auth, project_info,region).post_action(data, type='nova',add_url=url) if status == 202: return {'success': True, 'message': '启动vm实例成功'} else: return {'success': False, 'message': '启动vm实例失败:{}'.format(res)} except Exception as e: return {'success': False, 'message': '启动vm实例失败:{}'.format(e)}

      

    挂载逻辑卷
    def attach_volumn(openstack_auth=None, vm_info=None, user_auth=None,project_info=None,
                      volume_info=None, mountpoint=None,TENANT_PASSWD=None,region=None,**kwargs):
        try:
            if '[' in vm_info:
                vmid = getopenstack.Get_infos(vm_info).get_vm()['Y_systemID']
            else:
                vmid=vm_info
            if '[' in volume_info:
                volume_id = getopenstack.Get_infos(volume_info).get_vm()['Y_systemID']
            else:
                volume_id=volume_info
            data = {"volumeId": volume_id}
            if mountpoint:
                data["device"] = mountpoint
            data = {"volumeAttachment": data}
            status, res = ServerAction(openstack_auth,user_auth,project_info,region,TENANT_PASSWD=TENANT_PASSWD).post_action(
                data, type='nova', add_url='/servers/{}/os-volume_attachments'.format(vmid))
            if status == 200:
                return {'success': True, 'message': '挂载卷成功'}
            else:
                return {'success': False, 'message': '挂载卷失败:{}'.format(res)}
        except Exception as e:
            return {'success': False, 'message': '挂载卷失败:{}'.format(e)}
    

      

    创建虚拟机
    def create_vm(openstack_auth=None, flavor_info=None, image_info=None, security_info=None,
                  source_info=None, vmname=None, options=None, adminPass=None, accessIPv4=None,
                  publicnet_info=None, key_name=None, user_auth=None, project_info=None,
                  TENANT_PASSWD=None,region=None,
                  **kwargs):
        try:
            openstack = getopenstack.Get_infos(openstack_auth).get_openstack()
            flavor = getopenstack.Get_infos(flavor_info).get_flavor().get('Y_systemID', None)
            if not flavor:
                return {'success': False, 'message': '创建实例失败:资源配置为空'}
            image = getopenstack.Get_infos(image_info).get_image().get('Y_systemID', None)
            availability_zone = 
            getopenstack.Get_infos(source_info).get_source().get('Y_name', None).split('[')[0]
            if not availability_zone:
                return {'success': False, 'message': '创建实例失败:可用区域为空'}
            if security_info:
                security_group = getopenstack.Get_infos(security_info).get_security()
    
            value = {"name": vmname, "imageRef": image, "flavorRef": flavor}
            if availability_zone:
                value.update({"availability_zone": availability_zone})
    
            if publicnet_info:
                network = getopenstack.Get_infos(publicnet_info).get_ip().get('Y_systemID', None)
                if not network:
                    return {'success': False, 'message': '创建实例失败:网络配置信息为空'}
                all_net_data = [{"uuid": network}]
                value['networks'] = all_net_data
    
            if accessIPv4:
                value.update({"accessIPv4": accessIPv4})
            if adminPass:
                value.update({"adminPass": str(adminPass)})
            if key_name:
                value.update({"key_name": str(key_name)})
            if options:
                value.update(options)
            data = {"server": value}
            status, res = ServerAction(openstack_auth, user_auth,project_info,region,
                                       TENANT_PASSWD=TENANT_PASSWD).post_action(data,
                                                                                type='nova',
                                                                                add_url='/servers')
    
            # print status, res
            if status == 202:
                # print res
                vm_id = json.loads(res)['server']['id']
                vm_pass = json.loads(res)['server']['adminPass']
                return {'success': True, 'message': '实例创建成功,id为:{}'.format(vm_id), 'outputParam': vm_id}
            else:
                return {'success': False, 'message': '创建实例失败:{}'.format(res)}
        except Exception as e:
            return {'success': False, 'message': '创建实例失败:{}'.format(e)}
    

      

    绑定浮动ip
    def add_floatingip(openstack_auth=None, vm_info=None, user_auth=None, project_info=None,
                       fixed_address=None, address=None, USER_PASSWD=None, region=None, **kwargs):
        '''
        :param openstack_auth:
        :param vm_info:
        :param fixed_address:
        :param address:floating address
        :param kwargs:
        :return:
        '''
        try:
            # print address
            ipaddr = getopenstack.Get_infos(address).get_ip()['Y_ipAddress']
            # print ipaddr
            if fixed_address:
                value = {"address": ipaddr, "fixed_address": fixed_address}
            else:
                value = {"address": ipaddr}
            data = {"addFloatingIp": value}
            # print data
            status, res = ServerAction(openstack_auth, user_auth,project_info,region,
                                       vm_info=vm_info, USER_PASSWD=USER_PASSWD).post_action(data,
                                                                                             type='nova',
                                                                                             add_url='/servers')
    
            # status, res = ServerAction(openstack_auth, user_auth, project_info, vm_info=vm_info).post_action(data)
            print status, res
            if status == 202:
                return {'success': True, 'message': '添加公网ip成功'}
            else:
                return {'success': False, 'message': '添加公网ip失败:{}'.format(res)}
    
        except Exception as e:
            return {'success': False, 'message': '添加公网ip失败:{}'.format(e)}
    

      

    获取镜像id
    def get_image(openstack_auth=None, flavor_info=None, image_info=None, security_info=None,
                  source_info=None, vmname=None, options=None, adminPass=None, accessIPv4=None,
                  publicnet_info=None, key_name=None, user_auth=None, project_info=None,
                  TENANT_PASSWD=None, region=None,
                  **kwargs):
        try:
            openstack = getopenstack.Get_infos(openstack_auth).get_openstack()
            status, res = ServerAction(openstack_auth, user_auth, project_info, region,
                                       TENANT_PASSWD=TENANT_PASSWD).get_action(type='glance',
                                                                               add_url='/v2/images')
    
            # print status, res
            if status == 200:
                # print res
                vm_id=''
                vms = json.loads(res)['images']
                for vm in vms:
                    #print vm
                    if vm['name']==image_info:
                        vm_id=vm['id']
                        return {'success': True, 'message': '镜像id为:{}'.format(vm_id), 'outputParam': vm_id}
                if vm_id=='':
                    return {'success': False, 'message': '查找镜像失败:{}'.format(vms)}
            else:
                return {'success': False, 'message': '查找镜像失败:{}'.format(res)}
    
        except Exception as e:
            return {'success': False, 'message': '查找镜像失败:{}'.format(e)}
    

      

    创建逻辑卷
    def create_volumn(openstack_auth=None, name=None, description=None, size=None,
                      user_auth=None,project_info=None, vm_info=None,TENANT_PASSWD=None,region=None,**kwargs):
        '''
        :param openstack:
        :param availability_zone:
        :param name:
        :param description:
        :param size: 单位GB
        :param kwargs:
        :return:
        '''
        try:
            url = '/os-volumes'
            data = {"volume": {"size": size, "display_name": name, "display_description": description}}
            status, res = ServerAction(openstack_auth, user_auth, project_info,region,TENANT_PASSWD=TENANT_PASSWD).
                post_action(data, type='nova',add_url=url)
            if status == 200:
                volumn_id=json.loads(res)['volume']['id']
                return {'success': True, 'message': '创建存储卷成功,id为:{}'.format(volumn_id),'out':volumn_id}
            else:
                return {'success': False, 'message': '创建存储卷失败:{}'.format(res)}
        except Exception as e:
            return {'success': False, 'message': '创建存储卷失败:{}'.format(e)}
    

      

    停止虚拟机
    def stop_vm(openstack_auth=None, vm_info=None,user_auth=None,project_info=None, region=None,**kwargs):
        try:
            data = {"os-stop": None}
            vmid = vm_info#getopenstack.Get_infos(vm_info).get_vm()['Y_systemID']
            url = '/servers/{}/action'.format(vmid)
            status, res = ServerAction(openstack_auth, user_auth, project_info,region).
                post_action(data,type='nova',add_url=url)
            if status == 202:
                return {'success': True, 'message': '停止vm实例成功'}
            else:
                return {'success': False, 'message': '停止vm实例失败:{}'.format(res)}
        except Exception as e:
            return {'success': False, 'message': '停止vm实例失败:{}'.format(e)}
    

      

    获取资源配置方案
    def get_flavor(openstack_auth=None, flavor_info=None, image_info=None, security_info=None,
                  source_info=None, vmname=None, options=None, adminPass=None, accessIPv4=None,
                  publicnet_info=None, key_name=None, user_auth=None, project_info=None,
                  TENANT_PASSWD=None, region=None,
                  **kwargs):
        try:
            openstack = getopenstack.Get_infos(openstack_auth).get_openstack()
            status, res = ServerAction(openstack_auth, user_auth, project_info, region,
                                       TENANT_PASSWD=TENANT_PASSWD).get_action(type='nova',
                                                                               add_url='/flavors')
    
            #print status, res
            if status == 200:
                # print res
                vm_id=''
                vms = json.loads(res)['flavors']
                for vm in vms:
                    #print vm
                    if vm['name']==image_info:
                        vm_id=vm['id']
                        return {'success': True, 'message': '资源配置方案id为:{}'.format(vm_id), 'outputParam': vm_id}
                if vm_id=='':
                    return {'success': False, 'message': '查找资源配置方案失败:{}'.format(vms)}
            else:
                return {'success': False, 'message': '查找资源配置方案失败:{}'.format(res)}
    
        except Exception as e:
            return {'success': False, 'message': '查找资源配置方案失败:{}'.format(e)}
    

      

    添加公钥信息
    def add_key(openstack_auth=None, user_auth=None, project_info=None, key_name=None, key_content=None,
                tenant_passwd=None, region=None,**kwargs):
        try:
            data = {"keypair": {
                "name": key_name,
                "public_key": key_content}}
            # status, res = ServerAction(openstack_auth, user_auth, project_info,region,
            #                            tenant_passwd=tenant_passwd).post_action(data, type='key')
            status, res = ServerAction(openstack_auth, user_auth, project_info, region,
                                       tenant_passwd=tenant_passwd).post_action(data, type='nova')
            if status == 200:
                return {'success': True, 'message': '公钥信息添加成功'}
            else:
                return {'success': False, 'message': '公钥信息添加失败:{}'.format(res)}
        except Exception as e:
            return {'success': False, 'message': '公钥信息添加失败:{}'.format(e)}
    

      

    删除虚拟机
    def del_vm(openstack_auth=None, vm_info=None,user_auth=None,project_info=None, region=None, **kwargs):
        try:
            vmid = vm_info#getopenstack.Get_infos(vm_info).get_vm()['Y_systemID']
            url = '/servers/{}'.format(vmid)
            status, res = ServerAction(openstack_auth, user_auth, project_info,region). 
                delete_action(type='nova', add_url=url)
            if status == 204:
                return {'success': True, 'message': '删除vm实例成功'}
            else:
                return {'success': False, 'message': '删除vm实例失败:{}'.format(res)}
        except Exception as e:
            return {'success': False, 'message': '删除vm实例失败:{}'.format(e)}
    

      

  • 相关阅读:
    编译和和运行amor
    用好C语言的中库,系统错误的处理
    C语言中的宏
    时隔多年,再次实现的链表
    脚本更改桌面背景
    python爬虫 一个security的RSA加密爬虫
    mysql 8.0版本
    mysql5.7的并行复制
    kinshard中间件问题
    Springboot2-@Transactional 事务不生效
  • 原文地址:https://www.cnblogs.com/slqt/p/10910255.html
Copyright © 2011-2022 走看看