CloudStack的模板上传有只能通过http server,但经常会遇到httpserver搭建异常、上传发生timeout或者上传一半的时候无法继续上传等等各种问题,而项目实施的时候,按进度又要求必须尽快使用该模板,这个时候就会有是否能够直接将模板scp到SecondaryStorage中的需求。
推荐阅读:
在SS中,模板存放在template目录中,此目录的结构为:template/tmpl/[account_id]/[template_id]/
account_id为此模板所属用户的id
例如:登陆admin用户,上传一个CentOS.ova作为vmware模板,该模板id为202,则此模板在SS中存放路径为template/tmpl/2/202/。该目录中一共有4个文件:509f8d99-d81f-3104-95c9-9cfd23026f83.ova,CentOS_5.6-disk1.vmdk,CentOS5.6.mf,CentOS 5.6.ovf,template.properties。
".ova"文件是上传的原始ova文件,".vmdk",".mf",".ovf"是由ova解压之后产生的模板文件。
".vmdk"是虚拟机的磁盘镜像文件
".ovf"是虚拟机在导出为ovf格式的时候所产生的描述文件,包含了虚拟机磁盘文件vmdk,资源文件iso和domain之间的正确对应
".mf"是相关文件的SHA的集合,主要作用是防止模板文件被修改
此例中,mf文件内容如下:
[root@localhost 202]# catCentOS\ 5.6.mf
SHA1(CentOS 5.6.ovf)=867999689b9a2f4591dc3c930d4033f7872264b0
SHA1(CentOS_5.6-disk1.vmdk)=f8a0fdbbafafcc2dc1535c1bf53f500180a5cf75
以上3个文件是vmware模板相关文件,另外一个template.properties则是CloudStack在installtemplate完成之后,产生的模板描述文件,内容如下:
[root@localhost 202]# cattemplate.properties
#
#Mon Jul 29 06:42:11 UTC 2013
ova.virtualsize=10737418240 //模板的额定值
filename=509f8d99-d81f-3104-95c9-9cfd23026f83.ova //ova文件名
ova.filename=509f8d99-d81f-3104-95c9-9cfd23026f83.ova //ova文件名
id=202 //db中vm_template.id
public=true //db 中vm_template.public,控制模板的访问权限
uniquename=202-2-fc9f565a-9e17-3de2-b81a-f91b2b69894f//db中vm_template.uniquename
virtualsize=10737418240 //模板的额定值
checksum=847b01e45b6ad09519f4c3fabeb5b823//校验码,检查文件是否完整或被改变
hvm=true//db中vm_template.hvm,是否需要主机支持hvm
ova=true //是否ova文件
description=test//db中vm_template.display_text
ova.size=1011362816 //ova模板文件大小
size=1011362816 //ova模板文件大小
==============================================================================
CloudStack中对模板的信息,会分别存放在5个表中:vm_template,template_host_ref,template_zone_ref,template_spool_ref,template_swift_ref。
vm_template主要存放模板的详细信息,包含名称,访问权限,下载地址,格式,类型等。
表结构如下:
+--------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| unique_name | varchar(255) | NO | | NULL | |
| name | varchar(255) | NO | | NULL | |
| uuid | varchar(40) | YES | UNI | NULL | |
| public | int(1) unsigned | NO | | NULL | |访问权限
| featured | int(1)unsigned | NO | | NULL | |访问权限
| type | varchar(32) | YES | | NULL | |
| hvm | int(1) unsigned | NO | | NULL | |
| bits | int(6) unsigned | NO | | NULL | |32/64
| url | varchar(255) | YES | | NULL | |模板上传地址
| format | varchar(32) | NO | | NULL | | OVA/VHD/QCOW2/ISO
| created | datetime | NO | | NULL | |
| removed | datetime | YES | MUL | NULL | |
| account_id | bigint(20) unsigned | NO | | NULL | |
| checksum |varchar(255) | YES | | NULL | |
| display_text | varchar(4096) | YES | | NULL | |
| enable_password |int(1) unsigned | NO | | 1 | |
| enable_sshkey | int(1) unsigned | NO | | 0 | |
| guest_os_id | bigint(20) unsigned | NO | | NULL | |操作系统类型
| bootable | int(1)unsigned | NO | | 1 | |
| prepopulate | int(1) unsigned | NO | | 0 | |
| cross_zones | int(1) unsigned | NO | | 0 | |跨资源域
| extractable | int(1) unsigned | NO | | 0 | |可下载
| hypervisor_type |varchar(32) | YES | | NULL | |
| source_template_id | bigint(20) unsigned | YES | | NULL | |
| template_tag | varchar(255) | YES | | NULL | |
| sort_key | int(32) | NO | | 0 | |
+--------------------+---------------------+------+-----+---------+----------------+
type有4种类型,分别为USER/SYSTEM/BUILTIN/PERHOST,即用户模板,系统虚拟机模板,内建模板,PERHOST。