IVIC—虚拟计算机系统 北航云计算科研成果转化成品


概要

  Ivic公有云API为用户提供通过HTTP请求调用的方式使用Ivic云产品。API的调用地址为:http://frenzy.ivic.org.cn/api/v0.1/。

  用户使用API服务,需要先注册账户,在我的账户下选择api-key,即可获得access_key和api_token,access_key用于在http请求中标示用户的身份,api_token用于加密。请用户妥善保管,并定期更换。

  在调用API时,需要在http首部添加三个附加的头部。具体说明如下:

HTTP报头说明
ACCESS-KEY用户在我的账户下获得的access_key
API_REQUEST_DATE请求的发送时间,为字符串,格式为:"2015-07-29 13:47:11 +0800"
API_HMAC通过HMAC算法生成的散列验证码,HMAC算法的token为用户获得的api_token,message为API_REQUES-DATE,哈希算法为SHA1。

IvicAPI的返回值均为JSON格式,如果在调用API时遇到错误,会返回一定的错误信息。用户可以根据返回的错误信息进行处理,返回的错误格式为{"error":...}

返回对象定义:

云主机:

名称类型描述
uuidString云主机唯一标示符
idInteger云主机Id
hostnameString主机名称
created_atString创建时间
vnc_portStringvnc连接端口号
vnc_passwordStringvnc连接密码
vnet_idInteger网络Id
statusString云主机状态
cpu_usageStringcpu使用量
mem_totalString云主机总内存大小
mem_freeString云主机可用内存大小
disk_totalString云主机总磁盘大小
disk_readString云主机读操作次数
disk_writeString云主机磁盘写次数
runtime1String云主机当前运行时长
runtime2String云主机总运行时长
vcpuString云主机vcpu个数
descriptionString云主机描述
expiration_timeString云主机到期时间,为空则表示为按时计费
ip_addressString云主机ip地址
mac_addressString云主机mac地址
os_releaseString云主机操作系统

示例:{"uuid":"faa42e14-b9dc-426f-b5a0-c43c92d30ab6","id":12,"hostname":"vm003","created_at":"2015-08-13T18:36:05+08:00","vnc_port":null,"vnc_password":"Cho3pXltS6Dk671x0+1u/w==","vnet_id":1,"status":"stopped","cpu_usage":"0","mem_total":"524288","mem_free":"0","disk_total":"10000000","disk_free":"0","disk_read":"","disk_write":"","runtime1":0,"runtime2":0,"vcpu":"1","description":null,"expiration_time":"2016-08-13T18:36:05+08:00","ip_address":"192.168.105.7","mac_address":"52:54:00:73:16:98","os_release":"Wheezy(7.0)"}



云硬盘:

名称类型描述
uuidString云硬盘唯一标示符
idInteger云硬盘Id
virtual_machine_idInteger云主机Id,若没有挂载则为null
created_atString创建时间
updated_atString更新时间
nameString云硬盘名称
sizeString云硬盘容量,单位为KB
statusString云硬盘状态

示例:{"id":2,"uuid":"0a9f2dcc-2533-41f3-bd91-64673bcd3643","virtual_machine_id":null,"size":"10000000","name":"vdisk001","description":"","created_at":"2015-07-29T21:04:06+08:00","updated_at":"2015-07-29T21:04:07+08:00","status":"valid"}



快照:

名称类型描述
uuidString快照唯一标示符
idInteger快照Id
virtual_machine_idInteger云主机Id
created_atString创建时间
updated_atString更新时间
nameString快照名称
descriptionString快照描述,可以为null
statusString快照状态
vm_statusString快照时云主机状态

示例:{"id":1,"uuid":"4653633d-14e6-447d-bf56-b4249fb261fd","description":null,"virtual_machine_id":1,"name":"snapshot_002","status":"valid","vm_status":"running","created_at":"2015-07-30T09:41:46+08:00","updated_at":"2015-07-30T09:41:49+08:00"}



镜像:

名称类型描述
uuidString镜像唯一标示符
idInteger镜像Id
virtual_machine_idInteger云主机Id
sizeString镜像大小,单位为KB
os_typeString操作系统类型,例如linux
nameString镜像名称
descriptionString快照描述,可以为null
os_kernelString操作系统的内核的版本号
os_releaseString操作系统的发行版的版本,例如squeeze(6.0)
os_distributionString操作系统的发行版,例如Debian

示例:{"id":1,"uuid":"d2a0258d-955e-4ae8-b6d4-1cd7123c6119","size":"1978496","name":"debian6.0","description":"","os_type":"Linux","os_kernel":"2.6.32","os_release":"Squeeze(6.0)","os_distribution":"Debian"}



网络:

名称类型描述
idInteger网络Id
nameString网络名称
netmaskString子网掩码
gatewayString网关
start_ipString起始ip
statusString网络状态
capacity_numString最大容量

示例:{"id":1,"name":"vnet1","netmask":"255.255.255.0","gateway":"192.168.7.254","start_ip":"192.168.7.2","status":"running","capacity_num":254}



日志:

名称类型描述
actionString日志记录的操作
idInteger日志Id
levelString级别
created_atString创建时间
source_idInteger操作源Id
source_typeString操作对象
user_idInteger操作用户Id

示例:{"action":"deploy VirtualMachine(1): vm001","created_at":"2015-07-29T21:01:46+08:00","id":25,"level":"INFO","source_id":1,"source_type":"VirtualMachine","user_id":1}



工作job:

名称类型描述
uuidStringjob唯一标示符
idIntegerjobId
descriptionString描述
created_atString创建时间
updated_atString更新时间
operationString操作
optionsString操作的可选参数
target_object_idInteger操作对象Id
target_object_typeString操作对象类型
titleString工作标题,说明工作内容
user_idIntegerjob用户拥有者Id
job_infoString特别job信息记载,一般为null

示例:{"created_at":"2015-07-30T14:45:43+08:00","description":"edit VirtualMachine id=1","id":11,"job_info":null,"operation":"edit","options":null,"status":"finished","target_object_id":1,"target_object_type":"VirtualMachine","title":"edit VirtualMachine id=1","updated_at":"2015-07-30T14:45:44+08:00","user_id":1,"uuid":"ce79819e-d515-45cc-82b7-707773bbf569"}



消费账单:

名称类型描述
amountString金额
idInteger消费账单Id
charge_typeString收费类型,分为monthly(按月)、annual(按年),by_time(计时)
created_atString创建时间
updated_atString更新时间
target_object_idInteger操作对象Id
target_object_typeString操作对象类型
user_idIntegerjob用户拥有者Id
quantityInteger包月或包年数量

示例:{"amount":"23.04","charge_type":"monthly","created_at":"2015-07-30T14:09:39+08:00","id":1,"price":"23.04","quantity":1,"target_object_id":3,"target_object_type":"VirtualMachine","updated_at":"2015-07-30T14:09:39+08:00","user_id":1}



充值账单:

名称类型描述
amountString金额
idIntegerjobId
created_atString创建时间
updated_atString更新时间
kindInteger充值方式
user_idInteger用户拥有者Id
statusInteger账单状态

示例:{"amount":"1000.0","created_at":"2015-08-02T20:59:37+08:00","id":1,"kind":1,"status":"valid","updated_at":"2015-08-02T20:59:47+08:00","user_id":1}



云主机

对于云主机资源,提供了获取用户云主机列表、获取指定云主机信息、申请创建云主机、启动云主机、关闭云主机、强制关闭云主机、重启云主机、拍摄云主机快照、获取指定快照信息、获取云主机快照列表、回滚云主机快照、获取云主机日志信息12个接口。

URL请求方式请求参数返回说明
1.获取用户云主机列表/api/v0.1/virtual_machinesgetpage ,Integer,必须参数,请求页数云主机实例列表
2.获取指定云主机信息/api/v0.1/virtual_machines/:idget:id,String,必须参数,为指定云主机的id号云主机实例
3.申请创建云主机/api/v0.1/virtual_machines/createposthostname,String,必须参数,为云主机名称
imageId,Integer,必须参数,镜像Id
vnetId,Integer,必须参数,网络Id
vcpu,Integer,可选参数,cpu个数,取值范围为[1,2,4,8,12,16],默认取值为1
mem,String,可选参数,内存大小,取值范围为[512M,1G,2G,4G,8G],默认取值为512M
description,String,可选参数,云主机描述
charge_type,String,可选参数,收费方式,取值范围为[hour,month,year],默认取值为hour
vm_id,云主机的id
4.启动云主机/api/v0.1/virtual_machines/:id/startget:id,String,必须参数,为指定云主机的id号status : ok
5.关闭云主机/api/v0.1/virtual_machines/:id/stopget:id,String,必须参数,为指定云主机的id号status : ok
6.强制关闭云主机/api/v0.1/virtual_machines/:id/shutdownget:id,String,必须参数,为指定云主机的id号status : ok
7.重启云主机/api/v0.1/virtual_machines/:id/rebootget:id,String,必须参数,为指定云主机的id号status : ok
8.拍摄云主机快照/api/v0.1/virtual_machines/:id/snapshotpost:id,String,必须参数,为指定云主机的id号快照实例
9.获取指定快照信息/api/v0.1/virtual_machines/:id/snapshot/:snapshotIdget:id,String,必须参数,为指定云主机的id号快照实例
10.获取云主机快照列表/api/v0.1/virtual_machines/:id/snapshotsget:id,String,必须参数,为指定云主机的id号快照实例列表
11.回滚云主机快照/api/v0.1/virtual_machines/:id/rollback/:snapshotIdget:id,String,必须参数,为指定云主机的id号status : ok
12.删除云主机快照/api/v0.1/virtual_machines/:id/delete_snapshot/:snapshotIddelete:id,String,必须参数,为指定云主机的id号status : ok
13.获取云主机日志信息/api/v0.1/virtual_machines/:id/logget:id,String,必须参数,为指定云主机的id号日志实例列表
14.获取云主机挂载的云硬盘/api/v0.1/virtual_machines/:id/vdisksget:id,String,必须参数,为指定云主机的id号云硬盘实例列表
15.删除云主机/api/v0.1/virtual_machines/:id/destroydelete:id,String,必须参数,为指定云主机的id号status : ok

云硬盘

对于云硬盘资源,提供了获取用户云硬盘列表、获取指定云硬盘信息、申请创建云硬盘、挂载云硬盘、卸载云硬盘、删除云硬盘6个接口。

URL请求方式请求参数返回说明
1.获取用户云硬盘列表/api/v0.1/vdisk/allget云硬盘实例列表
2.获取指定云硬盘信息/api/v0.1/vdisk/:idget:id,String,必须参数,为指定云硬盘的id号云硬盘实例
3.申请创建云硬盘/api/v0.1/vdisks/createpostname,String,必须参数,为云硬盘名称
size,String,必须参数,云硬盘容量,取值范围为[10,20,30,40,50,60,70,80,90,100]
charg_type,String,可选参数,收费方式,取值范围为[hour,month,year],默认取值为hour
description,String,可选参数
vdisk_id,云硬盘的id
4.挂载云硬盘/api/v0.1/vdisk/:vdisk_id/mountput:vdisk_id,String,必须参数,为指定云硬盘的id号
vm_id,String,必须参数,为挂载的云主机id
status : ok
5.卸载云硬盘/api/v0.1/vdisk/:vdisk_id/unmountput:vdisk_id,String,必须参数,为指定云硬盘的id号
vm_id,String,必须参数,为挂载的云主机id
status : ok
6.删除云硬盘/api/v0.1/vdisk/:vdisk_id/unmountput:vdisk_id,String,必须参数,为指定云硬盘的id号
vm_id,String,必须参数,为挂载的云主机id
status : ok

镜像

对于镜像,提供了获取镜像列表和查询指定镜像详细信息的接口。

URL请求方式请求参数返回说明
1.获取镜像列表/api/v0.1/imagesgetpage,Integer,必须参数,指定页数镜像实例列表
2.获取指定镜像信息/api/v0.1/images/:idget:id,String,必须参数,为指定镜像Id镜像实例

网络

对于网络,提供了获取网络列表和查询指定网络详细信息的接口。

URL请求方式请求参数返回说明
1.获取网络列表/api/v0.1/vnetsgetpage,Integer,必须参数,指定页数网络实例列表
2.获取指定网络信息/api/v0.1/vnets/:idget:id,String,必须参数,为指定网络Id网络实例

价格查询

对于价格查询,提供了云主机价格查询、云硬盘价格查询的接口。

URL请求方式请求参数返回说明
1.云主机价格查询/api/v0.1/prices/virtual_machinegetvcpu,Integer,必须参数,cpu个数,取值范围为[1,2,4,8,12,16]
mem,String,必须参数,内存大小,取值范围为[512M,1G,2G,4G,8G]
charge_type,String,必须参数,收费方式,取值范围为[hour,month,year]
price:单价
2.云硬盘价格查询/api/v0.1/prices/vdiskgetsize,String,必须参数,容量大小(G),取值范围为[10,20,30,40,50,60,70,80,90,100]
charge_type,String,必须参数,收费方式,取值范围为[hour,month,year]
price:单价

其他

除以上资源外,还提供了用户日志查询、用户job查询、用户充值账单查询和用户消费账单查询的接口。

URL请求方式请求参数返回说明
1.用户日志查询/api/v0.1/users/loggetpage,Integer,必须参数,指定页数日志实例
2.用户job查询/api/v0.1/users/jobgetpage,Integer,必须参数,指定页数job实例
3.用户充值账单查询/api/v0.1/users/recharge_billgetpage,Integer,必须参数,指定页数充值账单实例
4.用户消费账单查询/api/v0.1/users/expense_billgetpage,Integer,必须参数,指定页数消费账单实例