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