接口参考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)}