# 'status': u'creating',
# 'display_name': u'snapshot
for snapshot1',
# 'created_at': u'2016-06-24T09:23:00.517279',
# 'display_description':
u'',
# 'volume_size': 20,
# 'volume_id':
u'60e16af2-0684-433c-a1b6-c1af1c2523fc',
# 'progress': None,
# 'project_id':
u'25520b29dce346d38bc4b055c5ffbfcb',
# 'id':
u'cede2421-ea68-4a8e-937d-c27074b9024b',
# 'size': 20
# }
snapshot =
self.volume_api.create_snapshot_force(
context, volume['id'], name, volume['display_description'])
# 接着会根据bdm信息,来构建快照的dict格式属性信息,返回一个BlockDeviceDict对象,属性如下:
# {
# 'guest_format': None,
# 'boot_index': 0,
# 'no_device': None,
# 'connection_info': None,
# 'snapshot_id':
u'cede2421-ea68-4a8e-937d-c27074b9024b',
# 'volume_size': 20,
# 'device_name':
u'/dev/vda',
# 'disk_bus': u'virtio',
# 'image_id': None,
# 'source_type': 'snapshot',
# 'device_type': u'disk',
# 'volume_id': None,
# 'destination_type':
'volume',
# 'delete_on_termination':
False
# }
mapping_dict =
block_device.snapshot_from_bdm(snapshot['id'], bdm)
# 过滤掉已经在数据库中存在的字段
mapping_dict =
mapping_dict.get_image_mapping()
# 将云主机所有的映射关系都添加到mapping中
mapping.append(mapping_dict)
return mapping
self._record_action_start(context, instance, instance_actions.CREATE_IMAGE)
# 调用“snapshot_instance”,获取云主机所有的mapping关系
mapping =
snapshot_instance(self, context, instance, bdms)
# 如果此时卷的文件系统已静默,这里则进行解冻处理,实现过程就是通过rpc.case发送异步请求给nova-compute
# nova-compute接收到消息后,会等到快照完成后对文件系统进行解冻(需要agent支持)
if quiesced:
self.compute_rpcapi.unquiesce_instance(context, instance, mapping)
# 更新云主机metadata信息中的properties信息
if mapping:
properties['block_device_mapping'] = mapping
properties['bdm_v2'] = True
# 到这一步时,会到添加一条记录到glance快照(镜像)数据库条目
#(会在Dashboard的镜像面板显示一条名为snapshot1的快照记录),
# 快照的大部分信息都拷贝至系统盘属性,这是因为卷快照是可以直接用来启动云主机的,
# 另外'block_device_mapping'属性中包含所有的volume设备快照信息(如果有的话),
# 每个volume设备快照信息作为一条记录,记录在image_properties数据表;
#
{
'name':
u'snapshot1',
'min_ram':
u'0',
'min_disk':
u'20',
'is_public':
False,
'properties':
{
'bdm_v2':
True,
'block_device_mapping':
[{
'guest_format':
None,
'boot_index':
0,
'no_device':
None,
'image_id':
None,
'volume_id':
None,
'device_name':
u'/dev/vda',
'disk_bus':
u'virtio',
'volume_size':
20,
'source_type':
'snapshot',
'device_type':
u'disk',
'snapshot_id':
u'cede2421-ea68-4a8e-937d-c27074b9024b',
'destination_type':
'volume',
'delete_on_termination':
False
}],
'base_image_ref':
u'',
'root_device_name':
u'/dev/vda'
},
'size':
0
}
return self.image_api.create(context, image_meta)
OpenStack快照分析:(三)从磁盘启动云主机离线(在线)快照分析 (4)
内容版权声明:除非注明,否则皆为本站原创文章。