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)}

  

原文地址:https://www.cnblogs.com/slqt/p/10910255.html